gpt4 book ai didi

ios - RemoteIO:影响应用程序产生的音频

转载 作者:行者123 更新时间:2023-11-28 22:46:46 26 4
gpt4 key购买 nike

简而言之:有没有一种方法可以使用 RemoteIO 捕获/处理应用程序生成的所有音频?

我可以获得渲染回调,通过连接到 RemoteIO 的输入范围输出总线,我可以将音频发送到扬声器。但是我在该回调中的输入缓冲区不包含 AVPlayer 在应用程序其他地方产生的声音。甚至可以操纵所有应用程序音频吗?

这是我的设置:

-(void)setup
{
OSStatus status = noErr;

AudioComponentDescription remoteIODesc;
fillRemoteIODesc(&remoteIODesc);
AudioComponent inputComponent = AudioComponentFindNext(NULL, &remoteIODesc);

AudioComponentInstance remoteIO;
status = AudioComponentInstanceNew(inputComponent, &remoteIO);
assert(status == noErr);

AudioStreamBasicDescription desc = {0};
fillShortMonoASBD(&desc);

status = AudioUnitSetProperty(remoteIO,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&desc,
sizeof(desc));
assert(status == noErr);

AURenderCallbackStruct callback;
callback.inputProc = outputCallback;
callback.inputProcRefCon = _state;

status = AudioUnitSetProperty(remoteIO,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&callback,
sizeof(callback));
assert(status == noErr);

status = AudioUnitInitialize(remoteIO);
assert(status == noErr);

status = AudioOutputUnitStart(remoteIO);
assert(status == noErr);
}

最佳答案

简短回答:不,不幸的是,它不能那样工作。您将无法对通过 AVFoundation(从 iOS 6 开始)制作的音频添加任意处理。

您误解了 RemoteIO 单元的用途。 RemoteIO 让您可以访问 2 个东西:音频输入硬件和音频输出硬件。同样,您可以使用 RemoteIO 从麦克风获取音频,或将音频发送到扬声器。 RemoteIO 单元不允许您获取应用程序其他部分(例如 AVFoundation)发送到硬件的音频。不用太深入,这是因为 AVFoundation 不使用与 RemoteIO 相同的音频路径。

要在您想要的级别上操作音频,您将不得不比 AVFoundation 更深入。 Audio Queue Services是下一层,可以让您以音频队列处理分路器的形式访问音频。这可能是开始处理音频的最简单方法。不过,还没有太多关于它的文档。目前最好的来源可能是 header AudioToolbox.framework/AudioQueue.h 请注意,这仅在 iOS 6 中引入。

比这更深的是Audio Units .这是 RemoteIO 单元所在的位置。您可以使用 AUFilePlayer 从音频文件中产生声音,然后将该音频提供给其他音频单元进行处理(或自己处理)。这将比 AVFoundation(轻描淡写)更棘手/冗长,但如果您已经设置了 RemoteIO 单元,那么您可能可以处理它。

关于ios - RemoteIO:影响应用程序产生的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13016853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com