【发布时间】:2012-01-04 11:13:11
【问题描述】:
每次调用音频单元的回调函数时,我都会得到另一个数量的样本,这很奇怪,因为NSLog(@"%ld",inNumberFrames); 总是给我 512。
当我这样做时:
NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData));
我得到的数字如:50 20 19 160 200 1 ...
这很奇怪。 每次回调,我必须得到完整的缓冲区 512 个样本没有?
我知道我没有得到所有需要的样本,因为如果我输入一个 sin 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??? -
那我应该用什么?你能帮我检索这一行中的数据吗?
-
您的缓冲区是固定大小(inNumberFrames),因此只需进行相应的迭代。
-
根据苹果他们不是,因此我应该 malloc 他们..
-
是的,你 malloc 他们,但他们的大小随后不会改变。
标签: objective-c xcode core-audio