在AudioBuffer的mData中处理数据

时间:2011-06-05 12:18:24

标签: iphone objective-c ios audio

我是iOS编程的新手,我正在玩这里的一些代码:http://code.google.com/p/ios-coreaudio-example/

基本上我从麦克风输入并将其直接传送到扬声器/耳机。但是我想在扬声器播放之前操纵音频。

我想访问和操作类型为void *的mData,我想我必须将其转换为其他内容。

现在这是我的代码:

SInt16* samples = (SInt16*)(tempBuffer.mData); //cast to something usable

for ( int i = 0; i < tempBuffer.mDataByteSize; i++ )
{
    NSLog(@"%@", *(samples+i));
}

我甚至不确定通过指针访问数据的最佳方法是什么。我对从学校的C ++指针有一些经验,但我不确定它在Objective-C中是否有任何不同(我只是使用此代码获得 EXC_BAD_ACCESS )。

感谢。

1 个答案:

答案 0 :(得分:1)

使用RemoteIO音频单元时,可以将AudioUnitSetProperty与kAudioUnitProperty_StreamFormat配合使用,为音频样本帧设置所需的数据类型和格式。然后,由于您设置了数据类型,因此在从回调缓冲区中读取样本时,您将知道要使用哪种类型(强制转换)。

另请注意,缓冲区中的短整数或短浮点数小于字节数(使用Apple的C数据类型)。