From e94905f281b66f4ed32d786182ea1abb77b79e15 Mon Sep 17 00:00:00 2001 From: danigb Date: Thu, 11 Apr 2024 17:56:04 +0200 Subject: [PATCH] fix: findSampleInRegion includes user's detune param --- src/player/layers.test.ts | 17 +++++++++++++++++ src/player/layers.ts | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/player/layers.test.ts b/src/player/layers.test.ts index 343f9c3..f316776 100644 --- a/src/player/layers.test.ts +++ b/src/player/layers.test.ts @@ -37,6 +37,23 @@ describe("findSamplesInRegions", () => { ]); }); + it("applies given detune", () => { + const group: RegionGroup = { + regions: [ + { sampleName: "a", midiPitch: 60, midiLow: 60, midiHigh: 75 }, + { sampleName: "b", midiPitch: 75, midiLow: 70, midiHigh: 80 }, + ], + sample: {}, + }; + + expect(findSamplesInRegions(group, { note: 60, detune: 50 })).toEqual([ + { name: "a", detune: 50, note: 60 }, + ]); + expect(findSamplesInRegions(group, { note: 62, detune: -50 })).toEqual([ + { name: "a", detune: 150, note: 62 }, + ]); + }); + it("finds finds with non integer midi", () => { const group: RegionGroup = { regions: [ diff --git a/src/player/layers.ts b/src/player/layers.ts index c7d6df1..78853c2 100644 --- a/src/player/layers.ts +++ b/src/player/layers.ts @@ -78,10 +78,11 @@ function findSampleInRegion( const velocity = sample.velocity ?? defaults.velocity; const regionGainOffset = region.volume ? dbToGain(region.volume) : 0; const sampleGainOffset = sample.gainOffset ?? defaults.gainOffset ?? 0; + const sampleDetune = sample.detune ?? 0; return { decayTime: sample?.decayTime ?? region.sample?.decayTime ?? defaults.decayTime, - detune: 100 * (semitones + (region.tune ?? 0)), + detune: 100 * (semitones + (region.tune ?? 0)) + sampleDetune, duration: sample?.duration ?? region.sample?.duration ?? defaults.duration, gainOffset: sampleGainOffset + regionGainOffset || undefined, loop: sample?.loop ?? region.sample?.loop ?? defaults.loop,