我正在尝试使用AudioUnit for iPhone app进行录制。
更改:(开始)我添加了以下代码
bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mNumberChannels = 2;
bufferList->mBuffers[0].mDataByteSize = 1024;
bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
更改:(结束)
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
OSStatus status;
status = AudioUnitRender(appdelegate->audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
appdelegate->bufferList);
if(status != 0)
NSLog(@"AudioUnitRender status is %d", status);
SInt16* samples = (SInt16*)(ioData->mBuffers[0].mData);
.....
}
修复:(我收到OSStatus -50错误代码) - 因为我没有初始化bufferList。
我是来自AudioBuffer的EXC_BAD_ACCESS(ioData-> mBuffers [0] .mData)。
我不确定这个错误。请帮我解决。
答案 0 :(得分:0)
您正在向已解除分配的对象发送消息。在XCode中转到Project - >编辑Active Executable - >参数 - >单击“加号”按钮,添加NSZombieEnabled并将其值设置为YES。这样做,您可以调试应用程序并找出哪个解除分配的对象仍在接收消息。
但是不要忘记事后在你的项目上禁用这个参数。
答案 1 :(得分:0)
我解决了它;
在我的代码中,我编写了两个回调方法。我们需要两个音频设备才能使用两个音频单元。
我删除了一个回调函数。
只需查看以下链接即可了解相关信息 http://developer.apple.com/library/mac/#technotes/tn2002/tn2091.html