我正在尝试录制混音器单元输出产生的声音.
目前,我的代码基于Apple MixerHost iOS应用程序演示:混音器节点连接到音频图形上的远程IO节点.
我尝试在混音器输出上的远程IO节点输入上设置输入回调.
我做错了什么,但我找不到错误.
这是下面的代码.这是在多通道混音器单元设置之后完成的:
UInt32 flag = 1;
// Enable IO for playback
result = AudioUnitSetProperty(iOUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output,
0, // Output bus
&flag,
sizeof(flag));
if (noErr != result) {[self printErrorMessage: @"AudioUnitSetProperty EnableIO" withStatus: result]; return;}
/* can't do that because *** AudioUnitSetProperty EnableIO error: -1073752493 00000000
result = AudioUnitSetProperty(iOUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input,
0, // Output bus
&flag,
sizeof(flag));
if (noErr != result) {[self printErrorMessage: @"AudioUnitSetProperty EnableIO" withStatus: result]; …Run Code Online (Sandbox Code Playgroud) 这是我的代码:我使用此代码通过使用音频单元记录iPhone输出音频,然后将输出保存在output.caf中,但output.caf文件为空,任何人都知道我该怎么办?输出音频文件为空
这是音频单元的初始化
-(void) initializaeOutputUnit
{
OSStatus status;
// Describe audio component
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
// Get component
AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc);
// Get audio units
status = AudioComponentInstanceNew(inputComponent, &audioUnit);
// Enable IO for recording
UInt32 flag = 1;
status = AudioUnitSetProperty(audioUnit,
kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input,
kInputBus,
&flag,
sizeof(flag));
// Enable IO for playback
status = AudioUnitSetProperty(audioUnit,
kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Output,
kOutputBus,
&flag,
sizeof(flag));
// Describe format
AudioStreamBasicDescription audioFormat={0};
audioFormat.mSampleRate …Run Code Online (Sandbox Code Playgroud) 我一直试图在iOS 5上一个renderCallback记录从RemoteIO单元直接AAC在iPad 2,我已经看到了矛盾的信息说这是不可能的-这是可能的(在评论点击这里).我想要这样做的原因是因为录制到PCM需要如此多的磁盘空间来记录任何长度 - 即使它稍后被转换为AAC.
我准备放弃了.我已经通过谷歌刮,所以,核心音频书和苹果的核心音频邮件列表和论坛,并已经到了,我没有得到任何错误的点-和我记录的东西到磁盘,但生成的文件无法播放.模拟器和设备都是这种情况.
所以...如果有人有这方面的经验,我真的很感激在正确的方向上轻推.设置是RemoteIO正在播放AUSamplers的输出并且工作正常.
以下是我在下面的代码中所做的事情
指定AudioStreamBasicDescriptionremoteIO设备的格式kAudioFormatLinearPCM
ExtAudioFileRef
通过从RemoteIO单元获取指定客户端格式,创建并指定目标格式
为RemoteID单元指定renderCallback
在renderCallback中,在kAudioUnitRenderAction_PostRender阶段中写入数据
正如我所说,我没有收到任何错误,并且生成的音频文件大小显示正在写入某些内容,但该文件无法播放.也许我的格式搞砸了?
无论如何,这是我在一个瓶子里的信息和/或"Be Here Dragons"的旗帜,任何人都在冒着Core-Audio的黑暗水域.
//尝试播放文件时得到的不愉快的消息:

//部分remoteIO设置
// Enable IO for recording
UInt32 flag = 1;
result = AudioUnitSetProperty(ioUnit,
kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input,
kInputBus, // == 1
&flag,
sizeof(flag));
if (noErr != result) {[self printErrorMessage: @"Enable IO for recording" withStatus: result]; return;}
// Describe format - - - - - - - - - -
size_t bytesPerSample = sizeof (AudioUnitSampleType);
AudioStreamBasicDescription …Run Code Online (Sandbox Code Playgroud)