Как настраивается AKSequencer в AudioKit> 4.8? - PullRequest
2 голосов
/ 05 мая 2020

Пример установки последней версии AKSequencer недоступен, поэтому мне пришлось предположить несколько вещей, основанных на предыдущей версии.

У меня есть следующая реализация для AKAppleSequencer, которая работает и есть аудиовыход:

let track = sequencer.newTrack()
track?.setMIDIOutput(sampler.midiIn)
track?.add(noteNumber: 60, velocity: 100, position: AKDuration(beats: 1), duration: AKDuration(beats: 0.25))
sequencer.enableLooping(AKDuration(beats: 4))
sequencer.setTempo(self.defaultTempo)
sequencer.play()

Между тем, то, что я предполагал достаточно для последней AKSequencer, не имеет аудиовыхода:

let track: AKSequencerTrack = self.sequencer.addTrack(for: self.sampler)
track.add(noteNumber: 60, velocity: 100, position: 1, duration: 1)
sequencer.length = 4
sequencer.loopEnabled = true
sequencer.tempo = 60
sequencer.play()

Оба случая имеют sampler подключены к mainMixer и назначены на AudioKit.output.

Поскольку это не работает для последней версии AKSequencer, я подумал, что возможно подключение AKSequencerTrack к mainMixer и можно было отключить sampler от mainMixer? Но не сработало!

mainMixer.connect(input: track)

Заканчиваются альтернативы! Итак, после поиска AKSequencerTrack мы обнаружили, что кто-то еще сообщает о той же проблеме ( Почему новый AKSequencer не воспроизводит звук? ), поэтому попробовал:

        mainMixer.connect(input: sampler)
        mainMixer.connect(input: track)

Опять же, нет звука ! Там также есть ссылка на этот связанный топ c, который похож на мою предыдущую попытку, которая не имеет вывода ( Как воспроизводить MIDI с новым AKSequencer AudioKit), но просто чтобы убедиться, что изменилось, чтобы использовать AKSampler и загрузил локальный звук:

sampler.loadSFZ(url: Bundle.main.url(forResource: "clock", withExtension: "wav")!)

Очередной сбой ...! Нет звука.

Я использую AudioKit 4.9.5

Чтобы сохранить рассудок, в AKSequencerTrack есть метод .play, что произойдет, если я его назову?

track.play()

Нет звука! Хорошо, а что, если я верну сэмплер на AKSnareSynth?

let t: AKSynthSnare = AKSynthSnare()
sequencer.addTrack(for: t)

Игралось? Нет!

Есть ли у меня вообще вывод в не AKSequencer? Да:

        let t: AKSynthSnare = AKSynthSnare()
        self.mainMixer.connect(input: t)
        t.play(noteNumber: 60,
        velocity: MIDIVelocity(127),
        channel: MIDIChannel(1))

А как насчет .isPlaying это правда?

        for track in self.sequencer.tracks {
             mainMixer.connect(input: track)
             track.play()
             print("> > > > track.isPlaying: \(track.isPlaying)")
         }

Да, isPlaying возвращает true:

> > > > track.isPlaying: true

Но нет, звука нет!

Я думаю, что AKSequencer - это темная коробка, и ее не следует использовать, если кто-то не разместит пример в Github (который я искал в исходных кодах, но ничего на момент написания). Или, может быть, я делаю что-то не так, чего не знаю, просто потратил день своей жизни на разные вещи.

1 Ответ

1 голос
/ 18 мая 2020

@ c_booth предоставил ответ в следующем посте ( AudioKit: Использование нового AKSequencer с любым набором инструментов обратного вызова )

Кажется, что loop, tempo являются установить в track не сам секвенсор,

// set up a track
let track = seq.addTrack(for: cbInst)
for i in 0 ..< 4 {
    track.add(noteNumber: 60, position: Double(i), duration: 0.5)
}
track.length = 4.0
track.loopEnabled = true
...