ios - AudioKit 的 RenderToFile 无法正常工作

标签 ios swift audio audiokit

我有一个 AKSequencer,里面有一个 AKMusicTrack 和 AKMIDISampler 的输出。我还使用声音字体文件加载 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

这是我尝试渲染ToFile的方法:

    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")
    }

我对这个特定问题做了很多研究,但我没有运气。任何帮助或指示将不胜感激,提前致谢!

最佳答案

不幸的是,离线渲染不适用于基于 MIDI 的信号生成,这是一个众所周知但可能没有充分记录的事实。 MIDI 系统使用的时钟不会随着渲染到文件时发生的样本生成速度而加快。

关于ios - AudioKit 的 RenderToFile 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52778524/

相关文章:

javascript - google analytics - 将事件/标签作为对象而不是字符串发送

iphone - 在 EAActionSheetPicker 中设置最小值

ios - 验证错误 : Invalid Bundle. ... 中的包包含不允许的文件 'Frameworks'

ios - GNAudioSourceMic原始音频位置

python - 无法使用pip语法错误安装PyAudio

iphone - 在 iPhone 应用程序开发中,如何将数据存储到文本文件中并在应用程序再次启动时检索它?

ios - 尝试在 Swift 2 中捕获整个 block

ios - 如何将 Controller 转换为特定协议(protocol)而不是 Swift 中的类?

ios - 缓慢的场景转换

android - 广播接收器中的Android音频管理器