尝试使用Audiokit中的AKMIDISampler调试神秘的正弦波

时间:2017-11-07 14:18:50

标签: ios swift audio audiokit

previous issue开始,我停止使用AKSampler移至AKMIDISampler中使用的功能。让我的循环再次工作(在Google Groups post的帮助下),但我正在播放正弦波(当MIDISampler找不到它的源文件时会发生这种情况)。

我所定位的源文件不是问题,因为它们都可以正常播放。正弦波来自这个过程中的其他地方,但我看不到...

请帮助8•)

(简化和编辑的代码仅显示相关详细信息 - 请联系以获取任何说明)

var MIDISamplePlayer = AKMIDISampler()
var sequencer: AKSequencer?
var mixer: AKMixer!

// initialise the mixer
mixer = AKMixer()

do  {
        audiofile = try AKAudioFile(readFileName: SoundFilename as! String, 
        baseDir: .resources)
    } catch let error as NSError {
        print("There's an error: \(error)")
    }

do {
       try sprite.MIDISamplePlayer.loadAudioFile(audiofile)
    } catch let error as NSError {
       print("There's an error: \(error)")
    }

sprite.tracker = AKAmplitudeTracker(sprite.MIDISamplePlayer)
mixer.connect(to:sprite.tracker, bus: mixer.nextInput.bus)

sequencer = AKSequencer(filename: POPmidi)
sequencer?.enableLooping()

let midi = AKMIDI()

for i in 0..<popCount {
    gPOPs[i].MIDISamplePlayer.enableMIDI(midi.client, name: "MIDISample_\(i)")
    mixer.connect(gPOPs[i].MIDISamplePlayer)
    sequencer!.tracks[i].setMIDIOutput(gPOPs[i].MIDISamplePlayer.midiIn)
}

AudioKit.start()
sequencer!.play()

4 个答案:

答案 0 :(得分:2)

我发现了这个问题的原因。我了解到当我给它特定数量的MIDI音轨时,MIDI音序器正在创建一个额外的音轨;对于我的midi文件中的四个曲目,音序器给了我五个。这个额外的曲目用于速度(discovered here)。

我还了解到我的第一首曲目被我的.plist忽略了(我为不同的歌曲设置了词干)。

我假设第一首曲目用于速度曲目进行了测试,当我在.plist中创建五首曲目以匹配音序器时,正弦波音调消失了。

这导致了一个变通方法。我通过复制我的.plist中的第一个样本来做到这一点,无论如何都被忽略了,然后将代表此声音的精灵隐藏起来。这现在有效,但如果有人知道如何控制这个速度轨道及其在AKSequencer中的使用,我想知道更多。

简而言之: 确保MIDI文件具有您要使用的确切轨道数。创建相同数量的AKMIDISampler以在AKSequencer中添加一个用于速度轨道。然后要注意,音序器中的第一首曲目是速度曲目,不能播放样本。

答案 1 :(得分:1)

这是一个猜测,但将音频文件放在采样器所喜欢的位置是一个非常常见的问题。尝试将audiofiles放在Samples /文件夹中,如下例所示:

http://audiokit.io/playgrounds/Playback/Sequencer/ http://audiokit.io/playgrounds/Playback/Sampler/

或者我认为是声音或&#34;采样器乐器&#34;文件夹以及Sampler演示中的工作方式:

https://github.com/AudioKit/AudioKit/tree/master/Examples/iOS/SamplerDemo/SamplerDemo/Sounds

答案 2 :(得分:1)

我的代码中也有一个神秘的正弦波。在我的情况下,事实证明我有一个额外的代码:

AudioKit.output = sampler

所以我不小心结束了两次指定AudioKit.output。除去额外的事件后,正弦波消失了。我不确定这是如何导致正弦波的,但是我在这里留下这个答案,以防它可能会帮助其他可能有类似问题的人。

答案 3 :(得分:0)

另一种获取神秘正弦波的方法是使用常规方法设置preferredSampleRate

//   try session.setPreferredSampleRate(preferredSampleRate)
在AppDelegate中用于音频会话的

... 而不是在AudioKit AKSettings中设置它,它将产生神秘的sinewave midi合成器......