2017-10-04 131 views
2

我試圖播放midi文件作爲wav音頻播放。與wav一起播放MIDI文件AudioKit

我試着

let akSequencer = AKSequencer(filename: "melody") 
akSequencer.enableLooping() 
akSequencer.play() 

但它只能播放第一個音符而已。同樣,它被加載就像我不能夠使用攪拌機將其與wav文件混合:

let akMidiSampler = AKMIDISampler() 
let akSampler = AKSampler() 
let wavFile = try AKAudioFile(forReading: wavUrl!) 
try akSampler.loadAudioFile(wavFile) 

let mixer = AKMixer(akSampler, akMidiSampler) 
mixer.volume = 1 

AudioKit.output = mixer 
AudioKit.start() 
akSampler.play() 

的WAV音頻正在播放,但只是MIDI第一個音符。

任何幫助非常歡迎!

+0

我希望能夠回答這個問題,但我不太瞭解它,現在已經提供了足夠的信息。例如,我們不知道melody.mid中包含了什麼,並且引用了一個名爲「akMidiSampler」的變量,但其聲明未顯示。 –

+0

@AureliusProchazka 我剛剛編輯添加akMidiSampler的定義。 melody.mid只是一個midi文件,它被添加到項目中。您可以在此鏈接https://drive.google.com/file/d/0B0-hfmdUuApIUGp2cmQwUm5SWWM/view?usp=sharing。 但基本上,我不知道我使用的方法是否正確,或者我是否完全錯誤。 –

回答

2

我相信你沒有正確地把你的音序器連接到你的MIDI採樣器。如果你看一些AudioKit例如遊樂場的位置:

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

http://audiokit.io/playgrounds/Playback/Drum%20Sequencer/

你會發現有該測序儀連接到採樣這樣一行:

sequencer.setGlobalMIDIOutput(piano.midiIn) 

sequencer.setGlobalMIDIOutput(drums.midiIn) 

最終,您可以爲音序器的不同音軌設置不同的採樣器,但我認爲這種全局方法現在對您最適合。請記住,您可能必須在iOS上啓用音頻背景模式才能使用MIDI。 HTH!

+0

所以,我嘗試了這個代碼,仍然沒有工作。但主要問題是因爲我在幾毫秒之後使用局部變量,所以聲音停止。修正是因爲它在這裏陳述:http://audiokit.io/playgrounds/Basics/Playgrounds%20to%20Production/ 謝謝奧雷利斯! –

+0

這是我使用的代碼:https://stackoverflow.com/questions/46777602/save-aksequencer-output-to-local-file –