如何在将音频缓冲区发送到扬声器之前获取它们?
Posted
技术标签:
【中文标题】如何在将音频缓冲区发送到扬声器之前获取它们?【英文标题】:How to grab audio buffers before sending them to speaker? 【发布时间】:2016-07-04 10:13:07 【问题描述】:我是Core Audio,AudioUnit框架的菜鸟,对它了解不多,请多多包涵。
我有一个要求,我需要使用 webRTC 访问通过远程调用来的实时流。在 webRTC 框架中,无法访问音频流。
所以,我的想法是通过 Apple 音频框架访问该音频流,我正在考虑在将音频发送到扬声器之前获取音频。是否可以在发送到扬声器之前获取音频缓冲区。
我必须用一些值修改音频缓冲区并将其发送回扬声器。
请帮忙!
【问题讨论】:
您可以在这里获得很多帮助,但需要多描述一下您的问题和您的努力。当然你可以抓取缓冲区并修改它们,但方法取决于你的音频处理链的构造。如果您是 CA 的新手,这个textbook 可能有助于通过工作示例代码阐明基本概念以供学习。 【参考方案1】:您可以设置渲染回调以输出 AudioUnit 并在发送到扬声器之前修改音频缓冲区。
AURenderCallbackStruct callbackStruct;
callbackStruct.inputProc = inputRemoteRenderCallback;
callbackStruct.inputProcRefCon = sourceUnit;
AudioUnitSetProperty(outputAudioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&callbackStruct,
sizeof(callbackStruct));
和回调:
static OSStatus inputRemoteRenderCallback (void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
)
AudioUnit au = (AudioUnit)inRefCon;
AudioUnitRender(au,
ioActionFlags,
inTimeStamp,
0,
inNumberFrames,
ioData);
return noErr;
【讨论】:
以上是关于如何在将音频缓冲区发送到扬声器之前获取它们?的主要内容,如果未能解决你的问题,请参考以下文章