remoteIO回拨功能是给不稳定的缓冲列表
问题描述:
音频单元的每一次回调函数被调用时,我得到的样品是陌生的另一个号码,因为NSLog(@"%ld",inNumberFrames);
让我总是512remoteIO回拨功能是给不稳定的缓冲列表
当我这样做:
NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData));
我得到的数字,如:50 20 19 160 200 1 ...
这很奇怪。每个回调函数都有 ,我必须得到满缓冲区的512个样本没有?
我知道我没有得到所有需要的样本,因为如果我输入一个罪2khz,我得到过零约600,如果我什么都不放,我等同样。
检索数据我做的:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2;
//NSLog(@"%ld",inNumberFrames);
buffer.mData = malloc(inNumberFrames * 2);
// Put buffer in a AudioBufferList
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
//checkStatus(status);
NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData));
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
for(int i=0; i < strlen((const char *)(&bufferList)->mBuffers[0].mData); i++)
{
....
任何帮助,这会来救我的天! 谢谢。
答
音频采样缓冲区的strlen()是而不是与样本数有关。相反,请查看作为回调函数参数给定的帧数。
你为什么在缓冲区中使用'strlen'? – 2012-01-04 11:22:46
所以我应该使用什么?你能帮我检索这一行的数据吗? – Curnelious 2012-01-04 12:22:32
您的缓冲区是固定大小(inNumberFrames),因此只需进行相应的迭代即可。 – 2012-01-04 12:25:07