使用带有AKSequencer的renderToFile的AudioKit空文件

时间:2018-10-02 15:55:18

标签: ios swift audiokit

我正在尝试使用AudioKit.renderToFile()将短的MIDI段落导出到音频(m4a):

// renderSequencer is an instance of AKSequencer
self.renderSequencer.loadMIDIFile(fromURL: midiURL)
Conductor.sharedInstance.setInstrument(renderItem.soundID, forOfflineRender: true)
// we only have one track with note content
for track in self.renderSequencer.tracks {
    if track.isNotEmpty {
        track.setMIDIOutput(Conductor.sharedInstance.midiIn)
    }
}
let audioCacheDir = self.module.stateManager.audioCacheDirectory
// strip name off midi file
let midiFileName = String(midiURL.lastPathComponent.split(separator: ".")[0])
audioFileName = midiFileName
audioFileURL = audioCacheDir.appendingPathComponent("\(midiFileName).m4a")
if let audioFileURL = audioFileURL {
    let settings = [
        AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
        AVSampleRateKey: 44100,
        AVNumberOfChannelsKey: 2,
        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
   ]
   let audioFile: AVAudioFile = try! AVAudioFile(forWriting: audioFileURL, settings: settings)
   // get time in seconds of audio file (with 4-beat tail)
   var duration: Float64 = 0.0
   MusicSequenceGetSecondsForBeats(seq, (16.0 + 4), &duration)
   // render sequence
   do { try AudioKit.renderToFile(audioFile, duration: duration) {
       self.renderSequencer.setRate(60.0)
       self.renderSequencer.play()
       }
   } catch { print("Error performing offline file render!") }
}

这确实会产生预期持续时间的音频文件,但它是无声的。我还尝试了从MIDI输出中记录日志,并且可以看到从preload闭包内部“播放”的事件实际上正在发送/处理。

我想,大多数情况下,我很想知道这是否真的预期可以正常工作。我看过几篇文章,建议不支持MIDI中的renderToFile(而其他人则建议它们起作用)。

顺便说一句,我确实也在音频套件GitHub上发布了一个问题。

0 个答案:

没有答案