Skip to content

Commit 866d5c1

Browse files
authored
Merge pull request #8 from eljeff/sampler-envelope-fix
Sampler envelope fix
2 parents 5b24036 + 9092b29 commit 866d5c1

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

Sources/CDunneAudioKit/SamplerDSP.mm

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,42 @@ void akCoreSamplerSetLoopThruRelease(CoreSamplerRef pSampler, bool value) {
9999

100100
void updateCoreSampler(CoreSampler* newSampler) {
101101
newSampler->init(sampleRate);
102+
newSampler->setADSRAttackDurationSeconds(sampler->getADSRAttackDurationSeconds());
103+
newSampler->setADSRDecayDurationSeconds(sampler->getADSRDecayDurationSeconds());
104+
newSampler->setADSRHoldDurationSeconds(sampler->getADSRHoldDurationSeconds());
105+
newSampler->setADSRSustainFraction(sampler->getADSRSustainFraction());
106+
newSampler->setADSRReleaseHoldDurationSeconds(sampler->getADSRReleaseHoldDurationSeconds());
107+
newSampler->setADSRReleaseDurationSeconds(sampler->getADSRReleaseDurationSeconds());
108+
109+
newSampler->setFilterAttackDurationSeconds(sampler->getFilterAttackDurationSeconds());
110+
newSampler->setFilterDecayDurationSeconds(sampler->getFilterDecayDurationSeconds());
111+
newSampler->setFilterSustainFraction(sampler->getFilterSustainFraction());
112+
newSampler->setFilterReleaseDurationSeconds(sampler->getFilterReleaseDurationSeconds());
113+
114+
newSampler->setPitchAttackDurationSeconds(sampler->getPitchAttackDurationSeconds());
115+
newSampler->setPitchDecayDurationSeconds(sampler->getPitchDecayDurationSeconds());
116+
newSampler->setPitchSustainFraction(sampler->getPitchSustainFraction());
117+
newSampler->setPitchReleaseDurationSeconds(sampler->getPitchReleaseDurationSeconds());
118+
newSampler->pitchADSRSemitones = sampler->pitchADSRSemitones;
119+
120+
newSampler->pitchOffset = sampler->pitchOffset;
121+
newSampler->cutoffEnvelopeStrength = sampler->cutoffEnvelopeStrength;
122+
newSampler->cutoffMultiple = sampler->cutoffMultiple;
123+
newSampler->filterEnvelopeVelocityScaling = sampler->filterEnvelopeVelocityScaling;
124+
newSampler->glideRate = sampler->glideRate;
125+
newSampler->isFilterEnabled = sampler->isFilterEnabled;
126+
newSampler->isLegato = sampler->isLegato;
127+
newSampler->isMonophonic = sampler->isMonophonic;
128+
newSampler->keyTracking = sampler->keyTracking;
129+
newSampler->linearResonance = sampler->linearResonance;
130+
newSampler->masterVolume = sampler->masterVolume;
131+
newSampler->portamentoRate = sampler->portamentoRate;
132+
newSampler->vibratoDepth = sampler->vibratoDepth;
133+
newSampler->vibratoFrequency = sampler->vibratoFrequency;
134+
newSampler->voiceVibratoDepth = sampler->voiceVibratoDepth;
135+
newSampler->voiceVibratoFrequency = sampler->voiceVibratoFrequency;
136+
newSampler->setLoopThruRelease(sampler->loopThruRelease);
137+
102138
sampler.set(newSampler);
103139
}
104140
};

Tests/DunneAudioKitTests/SamplerTests.swift

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,26 @@ class SamplerTests: XCTestCase {
3737
sampler.stop(noteNumber: 88)
3838
testMD5(audio)
3939
}
40-
40+
41+
func testSamplerAttackVolumeEnvelope() {
42+
let engine = AudioEngine()
43+
let sampleURL = Bundle.module.url(forResource: "TestResources/12345", withExtension: "wav")!
44+
let file = try! AVAudioFile(forReading: sampleURL)
45+
let sampler = Sampler()
46+
sampler.load(avAudioFile: file)
47+
sampler.masterVolume = 1
48+
engine.output = sampler
49+
let audio = engine.startTest(totalDuration: 8.0)
50+
audio.append(engine.render(duration: 1.0)) //run test for a second before setting parameters
51+
sampler.attackDuration = 1.0
52+
sampler.load(avAudioFile: file)
53+
audio.append(engine.render(duration: 1.0))//run test to give time to load
54+
sampler.play(noteNumber: 65, velocity: 127)
55+
audio.append(engine.render(duration: 6.0))
56+
sampler.stop(noteNumber: 65)
57+
testMD5(audio)
58+
}
59+
4160
/// Run this test with thread sanitizer.
4261
func testSamplerThreadSafety() {
4362
let engine = AudioEngine()

Tests/DunneAudioKitTests/ValidatedMD5s.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ extension XCTestCase {
1212

1313
let validatedMD5s: [String: String] = [
1414
"-[SamplerTests testSampler]": "8739229f6bc52fa5db3cc2afe85ee580",
15+
"-[SamplerTests testSamplerAttackVolumeEnvelope]": "bf00177ac48148fa4f780e5e364e84e2",
1516
"-[SynthTests testChord]": "155d8175419836512ead0794f551c7a0",
1617
"-[SynthTests testMonophonicPlayback]": "77fb882efcaf29c3a426036d85d04090",
1718
"-[SynthTests testParameterInitialization]": "e27794e7055b8ebdbf7d0591e980484e",

0 commit comments

Comments
 (0)