diff --git a/Sources/CDunneAudioKit/SamplerDSP.mm b/Sources/CDunneAudioKit/SamplerDSP.mm index 3cc779e..d8d5e3f 100644 --- a/Sources/CDunneAudioKit/SamplerDSP.mm +++ b/Sources/CDunneAudioKit/SamplerDSP.mm @@ -99,6 +99,42 @@ void akCoreSamplerSetLoopThruRelease(CoreSamplerRef pSampler, bool value) { void updateCoreSampler(CoreSampler* newSampler) { newSampler->init(sampleRate); + newSampler->setADSRAttackDurationSeconds(sampler->getADSRAttackDurationSeconds()); + newSampler->setADSRDecayDurationSeconds(sampler->getADSRDecayDurationSeconds()); + newSampler->setADSRHoldDurationSeconds(sampler->getADSRHoldDurationSeconds()); + newSampler->setADSRSustainFraction(sampler->getADSRSustainFraction()); + newSampler->setADSRReleaseHoldDurationSeconds(sampler->getADSRReleaseHoldDurationSeconds()); + newSampler->setADSRReleaseDurationSeconds(sampler->getADSRReleaseDurationSeconds()); + + newSampler->setFilterAttackDurationSeconds(sampler->getFilterAttackDurationSeconds()); + newSampler->setFilterDecayDurationSeconds(sampler->getFilterDecayDurationSeconds()); + newSampler->setFilterSustainFraction(sampler->getFilterSustainFraction()); + newSampler->setFilterReleaseDurationSeconds(sampler->getFilterReleaseDurationSeconds()); + + newSampler->setPitchAttackDurationSeconds(sampler->getPitchAttackDurationSeconds()); + newSampler->setPitchDecayDurationSeconds(sampler->getPitchDecayDurationSeconds()); + newSampler->setPitchSustainFraction(sampler->getPitchSustainFraction()); + newSampler->setPitchReleaseDurationSeconds(sampler->getPitchReleaseDurationSeconds()); + newSampler->pitchADSRSemitones = sampler->pitchADSRSemitones; + + newSampler->pitchOffset = sampler->pitchOffset; + newSampler->cutoffEnvelopeStrength = sampler->cutoffEnvelopeStrength; + newSampler->cutoffMultiple = sampler->cutoffMultiple; + newSampler->filterEnvelopeVelocityScaling = sampler->filterEnvelopeVelocityScaling; + newSampler->glideRate = sampler->glideRate; + newSampler->isFilterEnabled = sampler->isFilterEnabled; + newSampler->isLegato = sampler->isLegato; + newSampler->isMonophonic = sampler->isMonophonic; + newSampler->keyTracking = sampler->keyTracking; + newSampler->linearResonance = sampler->linearResonance; + newSampler->masterVolume = sampler->masterVolume; + newSampler->portamentoRate = sampler->portamentoRate; + newSampler->vibratoDepth = sampler->vibratoDepth; + newSampler->vibratoFrequency = sampler->vibratoFrequency; + newSampler->voiceVibratoDepth = sampler->voiceVibratoDepth; + newSampler->voiceVibratoFrequency = sampler->voiceVibratoFrequency; + newSampler->setLoopThruRelease(sampler->loopThruRelease); + sampler.set(newSampler); } }; diff --git a/Tests/DunneAudioKitTests/SamplerTests.swift b/Tests/DunneAudioKitTests/SamplerTests.swift index 46fc93d..63813dc 100644 --- a/Tests/DunneAudioKitTests/SamplerTests.swift +++ b/Tests/DunneAudioKitTests/SamplerTests.swift @@ -37,7 +37,26 @@ class SamplerTests: XCTestCase { sampler.stop(noteNumber: 88) testMD5(audio) } - + + func testSamplerAttackVolumeEnvelope() { + let engine = AudioEngine() + let sampleURL = Bundle.module.url(forResource: "TestResources/12345", withExtension: "wav")! + let file = try! AVAudioFile(forReading: sampleURL) + let sampler = Sampler() + sampler.load(avAudioFile: file) + sampler.masterVolume = 1 + engine.output = sampler + let audio = engine.startTest(totalDuration: 8.0) + audio.append(engine.render(duration: 1.0)) //run test for a second before setting parameters + sampler.attackDuration = 1.0 + sampler.load(avAudioFile: file) + audio.append(engine.render(duration: 1.0))//run test to give time to load + sampler.play(noteNumber: 65, velocity: 127) + audio.append(engine.render(duration: 6.0)) + sampler.stop(noteNumber: 65) + testMD5(audio) + } + /// Run this test with thread sanitizer. func testSamplerThreadSafety() { let engine = AudioEngine() diff --git a/Tests/DunneAudioKitTests/ValidatedMD5s.swift b/Tests/DunneAudioKitTests/ValidatedMD5s.swift index deb93d6..6f05d4a 100644 --- a/Tests/DunneAudioKitTests/ValidatedMD5s.swift +++ b/Tests/DunneAudioKitTests/ValidatedMD5s.swift @@ -12,6 +12,7 @@ extension XCTestCase { let validatedMD5s: [String: String] = [ "-[SamplerTests testSampler]": "8739229f6bc52fa5db3cc2afe85ee580", + "-[SamplerTests testSamplerAttackVolumeEnvelope]": "bf00177ac48148fa4f780e5e364e84e2", "-[SynthTests testChord]": "155d8175419836512ead0794f551c7a0", "-[SynthTests testMonophonicPlayback]": "77fb882efcaf29c3a426036d85d04090", "-[SynthTests testParameterInitialization]": "e27794e7055b8ebdbf7d0591e980484e",