2011-01-24 91 views
3

我正在尝试编写一个程序来记录音频文件中的采样的浮点值。我的步骤如下:使用扩展音频文件服务提取浮点数(ExtAudioFileRead)

  1. 打开扩展音频文件
  2. 设置音频格式(AudioStreamBasicDescription)
  3. 应用的音频格式,以我的扩展音频文件
  4. 搭建AudioBufferList
  5. 读取扩展使用ExtAudioFileRead()将音频文件转换为AudioBufferList
  6. AudioBufferList的日志浮点值

我已经把整个90类线在此要点:https://gist.github.com/792630

麻烦的是,如果我申请的音频格式,以我的扩展音频文件(步骤3),我得到一个错误尝试读取文件(步骤5)。如果我注释掉第5步,该文件读取正常,但我不会强制执行格式的读取操作,并且在登录时不会获得浮动内容。

任何建议将不胜感激。谢谢!

回答

3

我立即注意到的一件事是,您正在堆栈上分配一个AudioBufferList,但将mNumberBuffers设置为2.在堆栈上使用ABLs很好,但如果你这样做,它们只能包含一个缓冲区。但是因为你已经将客户端格式设置为单声道,这不是你真正的问题。

真正的问题是,您没有将fileRef的地址传递给ExtAudioFileOpenURL--您正在传递值 - 因此调用无法正确初始化变量。

调用应该是这样的:

CheckResult(ExtAudioFileOpenURL(inputFileURL, &fileRef), "ExtAudioFileOpenURL failed"); 

我这样做,编译代码和一切工作正常。

+1

啊,工作现在找到了。非常感谢您阅读本文! – tassock 2011-01-24 03:08:45