Я пытаюсь использовать 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-выхода и вижу, что события, «воспроизводимые» из закрытия предзагрузки, на самом деле отправляются / обрабатываются.
В основном, мне кажется, мне любопытно узнать, является ли этона самом деле ожидается на работу.Я видел пару постов, в которых говорилось, что renderToFile из MIDI не поддерживается (в то время как другие предлагали, чтобы он работал).
Кстати, я также опубликовал проблему на аудиоканале GitHub.