AudioKit: способ ввести тишину / затухание с помощью петли с AKPlayer? - PullRequest
0 голосов
/ 09 января 2019

В моем приложении я даю пользователю возможность воспроизводить небольшой кадр аудио (из более крупного аудиофайла), чтобы слушать снова и снова для выполнения ручной транскрипции. AKPlayer делает это тривиальным. Теперь, поскольку кадр аудио довольно мал, довольно интенсивно слышать этот цикл снова и снова (немного сводящий с ума в классическом смысле этого слова). Я хотел бы либо постепенно уменьшить его, либо снова включить его с помощью цикла ИЛИ просто ввести 500 мс тишины, прежде чем цикл начнется снова. Я не знаю, с чего начать, вот текущий рабочий код, как:

public func playLoop(start: Double, end: Double) {
        self.chordLoopPlayer.isLooping = true
        self.chordLoopPlayer.buffering = .always
        self.chordLoopPlayer.preroll()
        let millisecondsPerSample : Double = 1000 / 44100
        let startingDuration : Double = (((start * millisecondsPerSample) / 1000) / 2)
        let endingDuration : Double = (((end * millisecondsPerSample) / 1000) / 2)
        print("StartinDuration:\(startingDuration) | EndingDuration:\(endingDuration)")
        self.chordLoopPlayer.loop.start = startingDuration
        self.chordLoopPlayer.loop.end = endingDuration

        self.chordLoopPlayer.play(from: startingDuration, to: endingDuration)

Большое спасибо <3 </p>

1 Ответ

0 голосов
/ 11 января 2019

Вам просто нужно установить .fade значения для вашего постепенного появления / исчезновения до вызова функции play (). AudioKit будет выполнять их каждый раз при входе и выходе из цикла. Таким образом, при условии, что вы хотите 2-секундное затухание и 2-секундное затухание (подстраивайтесь по вашему вкусу), ваш код будет выглядеть так:

public func playLoop(start: Double, end: Double) {
    self.chordLoopPlayer.isLooping = true
    self.chordLoopPlayer.buffering = .always
    self.chordLoopPlayer.preroll()
    let millisecondsPerSample : Double = 1000 / 44100
    let startingDuration : Double = (((start * millisecondsPerSample) / 1000) / 2)
    let endingDuration : Double = (((end * millisecondsPerSample) / 1000) / 2)
    print("StartinDuration:\(startingDuration) | EndingDuration:\(endingDuration)")
    self.chordLoopPlayer.loop.start = startingDuration
    self.chordLoopPlayer.loop.end = endingDuration

    // add fade in/out values to fade in or fade out during playback; reset to 0 to disable.
    self.chordLoopPlayer.fade.inTime = 2 // in seconds
    self.chordLoopPlayer.fade.outTime = 2 // in seconds

    self.chordLoopPlayer.play(from: startingDuration, to: endingDuration)
}

Я нахожу документацию AudioKit немного расстраивающей в этом отношении, так как найти эти свойства не очень просто, если вы еще не знаете, что ищете, или понять, как их использовать, если у вас нет ' Я уже не сталкивался с примерами кода, поэтому я надеюсь, что это полезный пример для тех, кто ищет эту тему в SO. В любом случае, список под-свойств, связанных со свойством AudioKit .fade, находится здесь: https://audiokit.io/docs/Classes/AKPlayer/Fade.html

...