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

继上一期之后 ,我停止使用AKSampler转移到AKSampler中使用的function。 让我的循环再次工作(在这个谷歌组的post的帮助下),但我有一个正弦波播放(这发生在MIDISampler无法find它的源文件时)。

这不是我所针对的源文件的问题,因为它们都播放OK。 正弦波从这个过程中的其他地方传来,但我看不到在哪里…

请帮忙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() 

我发现这个问题的原因。 我了解到,MIDI音序器创build了一个额外的音轨,当我给它一个特定数量的MIDI音轨时, 对于我的MIDI文件中的四首曲目,音序器给了我五个。 这个额外的曲目是为了节奏(在这里发现 )。

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

我假设第一首曲目正在用于节奏曲目,并且当我在.plist中创build五首曲目以匹配音序器时,正弦波音就消失了。

这导致了一个解决办法。 我通过复制我的.plist中的第一个样本来完成这个任务,然后将代表这个声音的精灵隐藏在屏幕之外。 现在这个工作,但如果任何人有一个想法如何控制这个速度轨道及其在AKSequencer使用,我想知道更多。

简而言之:确保MIDI文件具有您要使用的确切轨道数量。 创build相同数量的AKMIDISamplerAKSequencer使用,为节奏轨道添加一个。 那么请注意音序器中的第一首曲子是速度曲目,不能播放样本。

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

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

或者我认为一个声音或“采样器工具”文件夹工作,以及在采样器演示:

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