Swift中AudioUnitRender和ExtAudioFileWrite错误-50:尝试将MIDI转换为音频文件

先生。须藤

我正在尝试在Swift中将MIDI文件转换为音频文件(.m4a)。

目前,我正在使用MIKMIDI作为排序和播放MIDI文件的工具,但是它不包含将播放内容保存到文件中的功能。MIKMID的创建者在此处概述了执行此操作的过程为了捕获输出并将其保存到音频文件中,我遵循了此示例,尝试将Swift的GeneralIO节点替换为MIKMIDI Graph的RemoteIO节点。当我尝试使用AudioUnitRender和ExtAudioFileWrite将输出保存到文件时,它们都返回错误-50(kAudio_ParamError)。

    var channels = 2
    var buffFrames = 512
    var bufferList = AudioBufferList.allocate(maximumBuffers: 1)

         for i in 0...bufferList.count-1{

               var buffer = AudioBuffer()
               buffer.mNumberChannels = 2
               buffer.mDataByteSize = UInt32(buffFrames*sizeofValue(AudioUnitSampleType))
               buffer.mData = calloc(buffFrames, sizeofValue(AudioUnitSampleType))

               bufferList[i] = buffer

               result = AudioUnitRender(generalIOAudioUnit, &flags, &inTimeStamp, busNum, UInt32(buffFrames), bufferList.unsafeMutablePointer)
               inTimeStamp.mSampleTime += 1

               result = ExtAudioFileWrite(extAudioFile, UInt32(buffFrames), bufferList.unsafeMutablePointer)

         }

是什么引起错误-50,如何解决以将MIDI(脱机呈现为.m4a文件的错误?

更新:通过将mNumberChannels和channel更改为= 1,我解决了ExtAudioFileWrite错误-50。现在我得到了一秒钟带有噪音的音频文件。AudioUnitRender仍然返回错误-50。

节奏拳头

您的代码有两个问题:

  1. AudioBufferList不同意客户端格式,请尝试

    let bufferList = AudioBufferList.allocate(maximumBuffers: Int(clientFormat.mChannelsPerFrame)) 
    
  2. 您要从中替换错误的节点AUGraph,并将其余节点连接到自身,从而导致上的无限循环AudioUnitRender

但是主要的问题是您没有实现作者建议的解决方案您希望可以AudioUnitRender使用比实时时间更快的示例时间戳进行调用,但是作者说不,您必须手动将采样时间转换为主机时间,并且如果需要的话,可以实现Midi播放器的更好部分。

因此,您可以执行此操作(听起来很困难),或者提出功能请求,或者在听音乐时通过在图表的远程IO音频单元中添加渲染通知AudioUnitAddRenderNotify并在此kAudioUnitRenderAction_PostRender阶段编写样本来实时记录到文件中

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++中通过FFmpeg将原始文件转换为音频文件(.wav)

来自分类Dev

如何将SAPI文本语音转换为VBScript中的音频文件?

来自分类Dev

如何将音频播放列表中的文件转换为一个大音频文件?

来自分类Dev

使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3

来自分类Dev

如何在(L)ubuntu中将`rm`和`ra`音频文件转换为mp3?

来自分类Dev

如何将Midi文件转换为按键(在Python中)?

来自分类Dev

在Pydub和Librosa之间转换音频文件

来自分类Dev

用于将音频文件递归转换为 mp3 的脚本在另一个具有相同子文件夹名称的文件夹中

来自分类Dev

ffmpeg在windows中批量转换音频文件

来自分类Dev

来自AudioUnitRender swift的paramErr -50

来自分类Dev

使用ffmpeg javascript将wav音频文件转换为pcm音频文件

来自分类Dev

使用ffmpeg javascript将wav音频文件转换为pcm音频文件

来自分类Dev

将音频文件存储在数组中

来自分类Dev

使用怯id,ffmpeg和bash以编程方式将多个midi文件转换为wave

来自分类Dev

使用ffmpeg将音频文件转换为FLAC?

来自分类Dev

Android:-将录制的音频文件转换为float数组

来自分类Dev

如何将同一文件夹中的所有音频文件同时转换为另一种格式

来自分类Dev

在 Swift 3.0 中转换 base64String 中的音频文件

来自分类Dev

如何将图像和音频转换为avi视频文件?

来自分类Dev

如何将图像和音频转换为avi视频文件?

来自分类Dev

将OGG(和其他格式)转换为MIDI?

来自分类Dev

将立体声音频转换为AVI文件中的单声道

来自分类Dev

我想将此代码转换为声音(尝试共享音频文件)

来自分类Dev

视频到音频文件转换并通过FFMPEG保存在节点js中

来自分类Dev

如何转换音频文件中的录制视频或现有视频?

来自分类Dev

音频文件以错误的速度播放

来自分类Dev

使用Swift播放随机音频文件

来自分类Dev

将音频文件保存到新创建的文件夹中-Android开发

来自分类Dev

将音频文件保存到新创建的文件夹中-Android开发

Related 相关文章

  1. 1

    如何在C ++中通过FFmpeg将原始文件转换为音频文件(.wav)

  2. 2

    如何将SAPI文本语音转换为VBScript中的音频文件?

  3. 3

    如何将音频播放列表中的文件转换为一个大音频文件?

  4. 4

    使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3

  5. 5

    如何在(L)ubuntu中将`rm`和`ra`音频文件转换为mp3?

  6. 6

    如何将Midi文件转换为按键(在Python中)?

  7. 7

    在Pydub和Librosa之间转换音频文件

  8. 8

    用于将音频文件递归转换为 mp3 的脚本在另一个具有相同子文件夹名称的文件夹中

  9. 9

    ffmpeg在windows中批量转换音频文件

  10. 10

    来自AudioUnitRender swift的paramErr -50

  11. 11

    使用ffmpeg javascript将wav音频文件转换为pcm音频文件

  12. 12

    使用ffmpeg javascript将wav音频文件转换为pcm音频文件

  13. 13

    将音频文件存储在数组中

  14. 14

    使用怯id,ffmpeg和bash以编程方式将多个midi文件转换为wave

  15. 15

    使用ffmpeg将音频文件转换为FLAC?

  16. 16

    Android:-将录制的音频文件转换为float数组

  17. 17

    如何将同一文件夹中的所有音频文件同时转换为另一种格式

  18. 18

    在 Swift 3.0 中转换 base64String 中的音频文件

  19. 19

    如何将图像和音频转换为avi视频文件?

  20. 20

    如何将图像和音频转换为avi视频文件?

  21. 21

    将OGG(和其他格式)转换为MIDI?

  22. 22

    将立体声音频转换为AVI文件中的单声道

  23. 23

    我想将此代码转换为声音(尝试共享音频文件)

  24. 24

    视频到音频文件转换并通过FFMPEG保存在节点js中

  25. 25

    如何转换音频文件中的录制视频或现有视频?

  26. 26

    音频文件以错误的速度播放

  27. 27

    使用Swift播放随机音频文件

  28. 28

    将音频文件保存到新创建的文件夹中-Android开发

  29. 29

    将音频文件保存到新创建的文件夹中-Android开发

热门标签

归档