AKSequencer在AudioKit > 4.8中如何设置?

问题描述 投票:1回答:1

最新版本的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,我想,也许堵住了 AKSequencerTrackmainMixer 并拔下插头 samplermainMixer 能做到吗?但是没有用!

mainMixer.connect(input: track)

没办法了! 所以,在找了 AKSequencerTrack 发现有人报告同样的问题(为什么新的AKSequencer不产生任何声音?),于是试了一下。

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

同样,没有声音!还有一个相关话题的链接,和我之前的尝试类似,也是没有输出(如何使用AudioKit新的AKSequencer来演奏MIDI。),但只是为了确保改为使用 AKSampler 并加载了一个本地声音。

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

又失败了... 没有声音。

我正在运行AudioKit 4.9.5。

为了保持我的理智,有一个方法 .play 在AKSequencerTrack中,如果我调用它会发生什么?

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 是Truthy吗?

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

是的,是 isPlaying 返回 true:

> > > > track.isPlaying: true

但是,不,没有声音!

我想... AKSequencer 目前是一个暗箱,不应该被使用,除非有人在Github上发布了一个例子(我在源代码中搜索了一下,但在写文章的时候没有)。也可能是我做错了什么,我不知道,只是浪费了一天的时间去尝试不同的东西。

audiokit
1个回答
1
投票

@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
© www.soinside.com 2019 - 2024. All rights reserved.