我有一个AKSequencer,它里面有一个带有AKMIDISampler输出的AKMusicTrack。我还用一个soundfont文件加载了AKMIDISampler。
我在使用AudioKit的renderToFile时遇到的问题是,当它创建文件时,声音是空的/无声的,或者它会播放文件开头的单个音符,以及只播放单个音符,整个长度都会播放一个奇怪的声音。
以下是初始化的代码
let midiSampler = AKMIDISampler()
let sequencer = AKSequencer()
let midi = AKMIDI()
do {
try midiSampler.loadSoundFont("soundFontFile", preset: 0, bank: 0)
} catch {
AKLog("Error - Couldn't load Sample!!!")
}
AudioKit.output = midiSampler
do {
try AudioKit.start()
} catch {
AKLog("AudioKit didn't begin")
}
let drumTrack = sequencer.newTrack("Drum Track")
midi.openInput()
midiSampler.enableMIDI(midi.client, name: "MIDI Sampler MIDI In")
drumTrack.setMIDIOutput(midiSampler.midiIn)
sequencer.setLength(AKDuration(beats: 8))
sequencer.setTempo(136)
sequencer.setRate(40)
midi = AudioKit.midi下面是我尝试renderToFile的方法:
let path = "recordedMIDIAudio.caf"
let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent(path)
let format = AVAudioFormat(commonFormat: .pcmFormatFloat64, sampleRate: 44100, channels: 1, interleaved: true)!
do {
let audioFile = try AKAudioFile(forWriting: url, settings: format.settings, commonFormat: format.commonFormat, interleaved: format.isInterleaved)
try AudioKit.renderToFile(audioFile, duration: 3.55, prerender: {
self.sequencer.play()
})
} catch {
AKLog("Error when converting")
}我在这个特定的问题上做了相当多的研究,但我没有运气。如有任何帮助或建议,我们将不胜感激,谢谢!
发布于 2018-10-13 03:22:44
不幸的是,离线渲染不能与基于MIDI的信号生成一起工作,这是一个众所周知的事实,但可能没有足够的文档记录。midi系统使用的时钟不会随着渲染到文件时发生的采样生成速度而加快。
https://stackoverflow.com/questions/52778524
复制相似问题