Пример установки последней версии 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 (который я искал в исходных кодах, но ничего на момент написания). Или, может быть, я делаю что-то не так, чего не знаю, просто потратил день своей жизни на разные вещи.