【问题标题】:Manipulating data in AudioBuffer's mData操作 AudioBuffer 的 mData 中的数据
【发布时间】:2011-06-05 12:18:24
【问题描述】:

我是 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)。

谢谢。

【问题讨论】:

    标签: iphone objective-c ios audio


    【解决方案1】:

    使用 RemoteIO 音频单元时,您可以使用 AudioUnitSetProperty 和 kAudioUnitProperty_StreamFormat 来设置音频样本帧所需的数据类型和格式。然后,由于您设置了数据类型,您将知道在从回调缓冲区读取样本时使用(转换)什么类型。

    还要注意缓冲区中的短整数或短浮点数少于字节数(使用 Apple 的 C 数据类型)。

    【讨论】:

    • 好的,我想我现在有了。 mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 所以我使用int32_t 作为数据。谢谢:)
    • 我刚刚为我的项目发布了另一个问题。也许你也有答案? :) stackoverflow.com/questions/6249491/…
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多