首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AudioKit > 4.8中的AKSequencer设置如何?

AudioKit > 4.8中的AKSequencer设置如何?
EN

Stack Overflow用户
提问于 2020-05-05 07:30:34
回答 1查看 200关注 0票数 2

没有关于如何设置最新版本的AKSequencer的示例,所以我不得不假设一些基于前一个版本的东西。

我有以下AKAppleSequencer实现,可以正常工作,并且有音频输出:

代码语言:javascript
运行
复制
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来说足够了的东西没有音频输出:

代码语言:javascript
运行
复制
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上可以吗?但是没有起作用!

代码语言:javascript
运行
复制
mainMixer.connect(input: track)

别无他法!因此,在查找AKSequencerTrack之后,发现其他人报告了同样的问题(Why is the new AKSequencer not producing any sound?),因此尝试:

代码语言:javascript
运行
复制
        mainMixer.connect(input: sampler)
        mainMixer.connect(input: track)

再说一次,没有声音!还有一个指向这个相关主题的链接,类似于我之前的尝试,没有输出(How to play MIDI with AudioKit's new AKSequencer),但只是为了确保更改为使用AKSampler并加载了本地声音:

代码语言:javascript
运行
复制
sampler.loadSFZ(url: Bundle.main.url(forResource: "clock", withExtension: "wav")!)

又一次失败...!没有声音。

我运行的是AudioKit 4.9.5

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

代码语言:javascript
运行
复制
track.play()

没有声音!好的,如果我把采样器改回AKSnareSynth会怎么样?

代码语言:javascript
运行
复制
let t: AKSynthSnare = AKSynthSnare()
sequencer.addTrack(for: t)

它起作用了吗?不是的!

我有非AKSequencer格式的输出吗?是:

代码语言:javascript
运行
复制
        let t: AKSynthSnare = AKSynthSnare()
        self.mainMixer.connect(input: t)
        t.play(noteNumber: 60,
        velocity: MIDIVelocity(127),
        channel: MIDIChannel(1))

那么.isPlaying是真的吗?

代码语言:javascript
运行
复制
        for track in self.sequencer.tracks {
             mainMixer.connect(input: track)
             track.play()
             print("> > > > track.isPlaying: \(track.isPlaying)")
         }

是,isPlaying返回true

代码语言:javascript
运行
复制
> > > > track.isPlaying: true

但是,没有,没有声音!

我认为AKSequencer目前是一个黑盒,除非有人在Github中发布一个示例(我在源代码中搜索了它,但在撰写本文时什么都没有),否则不应该使用它。也许我做错了什么我不知道,只是浪费了我一天的时间去尝试不同的事情。

EN

回答 1

Stack Overflow用户

发布于 2020-05-19 01:50:30

@c_booth在下面的帖子( AudioKit: Using the new AKSequencer with any variety of the callback instruments )中提供了答案。

似乎looptempo是在track中设置的,而不是定序器本身,

代码语言:javascript
运行
复制
// 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61603346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档