从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()
答案 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合成器......