1

我正在尝试使用 AudioKit 框架中的音序器播放音频文件。

AudioKit.output = sampler


    AudioKit.start()


    sampler.enableMIDI(midi.client,name: "sampler")


    // sequencer start


    let seq = AKSequencer()


    seq.setLength(AKDuration(beats:Double(4)))


    seq.enableLooping()


    let pattern = seq.newTrack()


    pattern?.setMIDIOutput(sampler.midiIn)


    pattern!.add(noteNumber: 48, velocity: 127, position: AKDuration(beats:Double(1)), duration: AKDuration(beats:Double(0.2)), channel: 0)

    pattern!.add(noteNumber: 48, velocity: 127, position: AKDuration(beats:Double(1)), duration: AKDuration(beats:Double(0.2)), channel: 0)

    pattern!.add(noteNumber: 48, velocity: 127, position: AKDuration(beats:Double(2)), duration: AKDuration(beats:Double(0.2)), channel: 0)


    pattern!.setLoopInfo(AKDuration( beats:Double(4) ), numberOfLoops: 80)

    seq.play()

我已经到了 AKMidiSampler 只会播放正弦波但不能播放正确样本的地步,如此处所述

因此,事实证明不可能“即时”创建序列,所以我开始寻找解决方法并发现SelectorClock它是来自 AudioKit 开发人员的一种解决方法。可悲的是,这不再起作用了..许多类定义及其属性都发生了变化。

也许我不是最新的,这已经修复了。如果不是,我确定必须解决这个问题。

4

2 回答 2

2

打开目标的后台功能。选择音频。没有这个,你得到的只是正弦波。

于 2017-07-21T15:06:29.160 回答
0

如果您想完全独立于使用 AKSequencer,您可以尝试以下操作:

let metro = AKMetronome()
metro.tempo = 120.0
metro.frequency1 = 0
metro.frequency2 = 0

metro.callback = {

    // your code e.g.: trigger a AKSamplePlayer() which should have been defined earlier in your code:
    sample.play()

}

AudioKit.output = AKMixer(metro, sample)

try! AudioKit.start()
metro.start()

自从我现在在手机上以来,我还没有测试过这段代码,但它应该可以工作。我在我的 iPhone 6s 上运行了这个概念,而且效果很好。我还尝试用我自己的类替换 AKMetronome(),但我还没有弄清楚 Sporth 参数的每个方面。我基本上想首先摆脱启动任何节拍器的声音(在运动中已经设置为零,所以不应该产生任何噪音)。如果我能做到这一点,我会告诉你的。

于 2018-07-18T21:20:42.480 回答