使用扩展音频文件服务(ExtAudioFileRead)提取浮动

时间:2011-01-24 00:56:04

标签: objective-c c cocoa core-audio

我正在尝试编写一个程序来记录音频文件中样本的浮点值。我的步骤如下:

  1. 打开扩展音频文件
  2. 设置音频格式(AudioStreamBasicDescription)
  3. 将音频格式应用于我的扩展音频文件
  4. 设置AudioBufferList
  5. 使用ExtAudioFileRead()
  6. 将扩展音频文件读入AudioBufferList
  7. 记录AudioBufferList的浮点值
  8. 我已将整个90行课程放在这个要点中:https://gist.github.com/792630

    问题是,如果我将音频格式应用于扩展音频文件(步骤3),则在尝试读取文件时出错(步骤5)。如果我注释掉第5步,那么文件读起来很好,但是我不会强制执行我的读取格式,并且在登录时我不会得到浮点数。

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

1 个答案:

答案 0 :(得分:3)

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

真正的问题是你没有将fileRef的地址传递给ExtAudioFileOpenURL-你传递了值 - 所以调用无法正确初始化变量。

通话应如下所示:

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

我做到了,编译了你的代码,一切正常。