演奏不同速度时,AKOscillatorBank出现故障

时间:2019-04-02 16:41:33

标签: audiokit

我正在研究一种创建浮动对象,然后在它们碰撞时播放音符的东西。算出速度,然后使用AKOscillatorBank演奏音符演奏音符。当发送具有不同速度的多个音符时,AKOscillatorBank开始单击,并且音量开始在所有位置跳跃。就像任何给定音符的速度会影响整个振荡器组的音量。

当每个音符具有相同速度时,效果很好。试图为每个对象而不是AKOSillatorBank使用新的AKOsillator,但这会产生自己的一系列问题。

oscBank = AKOscillatorBank(waveform: AKTable(.sine), attackDuration: 0.01, decayDuration: 0.4, sustainLevel: 0, releaseDuration: 0.4, pitchBend: 0, vibratoDepth: 0, vibratoRate: 0)

// each object has a playNote function that calculate velocity of object then converts to midi velocity value. 
//Works fine when velocity is set to a static number eg: oscBank.play(noteNumber: midiNote, velocity: 100)

func playNote (_ velocity: CGFloat) {
        oscBank.play(noteNumber: midiNote, velocity: phyVelToMidiVel(velocity))

        _ = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: false) { timer in
            self.oscBank.stop(noteNumber: self.midiNote)
            timer.invalidate()
        }
    }

    func phyVelToMidiVel (_ phyVel: CGFloat) -> MIDIVelocity {
        var midiVel = (127 / resizeConstant) * phyVel
        if midiVel > 127 {
            midiVel = 127
        } 
        return UInt8(midiVel)
    }

向AKOsillatorBank发送多个具有不同速度的音符时的点击声。

0 个答案:

没有答案