Существуют ли способы, позволяющие избежать амплитудного щелчка при остановке / запуске AKOscillator, кроме использования конвертов - PullRequest
1 голос
/ 03 октября 2019

Если я использую AKOscillator только для определенных целей, должен ли я в любом случае использовать классы Envelopes, чтобы избежать щелчка по амплитуде при запуске / остановке генератора? Или есть еще более легкие методы?

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Один «легкий» метод состоит в том, чтобы установить линейное изменение параметра на ненулевое значение, начать амплитуду с нуля, а затем установить амплитуду. Темппример детской площадки:

import AudioKitPlaygrounds
import AudioKit

let oscillator = AKOscillator(waveform: AKTable(.sine), amplitude: 0)
oscillator.rampDuration = 0.2

AudioKit.output = oscillator
try AudioKit.start()

oscillator.start()
oscillator.amplitude = 1.0

sleep(1)
oscillator.amplitude = 0
0 голосов
/ 09 октября 2019

Я использовал ваш код, и он не помог, но я обнаружил, что этот «щелчок» появляется в конце, когда генератор останавливается. так что если даже rampDuration равен 0.0, в начале не будет «щелчка», а только «щелчка» в конце. Вот мой код (он находится внутри приложения IOS):

class ViewController: UIViewController {

var osc = AKOscillator(waveform: AKTable(.sine), amplitude: 0)

@IBAction func buttonTapped(_ sender: UIButton) {    //when button in App is pressed

    osc.rampDuration = 0.2
    AudioKit.output = osc
    osc.frequency = Double.random(in: 100.0...1000.0)

    try? AudioKit.start()

    osc.start()
    osc.amplitude = 0.5
    osc.rampDuration = 0.0 //to avoid frequency glide effect

    sleep(1)

    //osc.rampDuration - I tried to change rampDuration before oscillator stop, but it 
    //did not help      

    osc.stop()     //here is amplitude 'click' appears

    try? AudioKit.stop()
    }

Итак, как я предположил, мне все равно придется использовать конверты?

...