我想使用該編碼AUGraph的輸出作爲AAC(在iOS 5.1上)。圖的基本拓撲結構如下所示:將kAudioUnitProperty_StreamFormat設置爲AAC時,AudioUnitSetProperty會失敗,並顯示-10868
inputs --> MixerUnit --> pcm2aac --> aac2pcm --> RemoteIO
我要搶AAC編碼的數據,因爲它是通過PostRenderCallback打pcm2aac
,然後通過UDP發送到我們的服務器應用程序。
據我所知,這個使用案例的AudioUnit是kAudioUnitType_FormatConverter
,但是當我想爲aac2pcm設置ASBD輸入屬性時,AudioUnitSetProperty以-10868失敗(當我設置pcm2acc的輸出時它也失敗,同樣的錯誤)。
AudioComponentDescription converterUnitDescription;
converterUnitDescription.componentType = kAudioUnitType_FormatConverter;
converterUnitDescription.componentSubType = kAudioUnitSubType_AUConverter;
converterUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
converterUnitDescription.componentFlags = 0;
converterUnitDescription.componentFlagsMask = 0;
//...
AUNode pcm2aacNode;
AUNode aac2pcmNode;
//...
result = AUGraphAddNode (
processingGraph,
&converterUnitDescription,
&aac2pcmNode
);
if (noErr != result) {[self printErrorMessage: @"AUGraphNewNode failed for Converter unit" withStatus: result]; return;}
//...
result = AUGraphOpen (processingGraph);
if (noErr != result) {[self printErrorMessage: @"AUGraphOpen" withStatus: result]; return;}
//...
AudioUnit aac2pcmUnit;
AudioUnit pcm2aacUnit;
//...
result = AUGraphNodeInfo (
processingGraph,
aac2pcmNode,
NULL,
&aac2pcmUnit
);
if (noErr != result) {[self printErrorMessage: @"AUGraphNodeInfo (aac2pcm)" withStatus: result]; return;}
//...
NSLog (@"Setting stream format for input aac2pcm bus");
result = AudioUnitSetProperty (aac2pcmUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
0,
&aacStreamFormat,
sizeof (aacStreamFormat)
);
if (noErr != result) {[self printErrorMessage: @"AudioUnitSetProperty (input aac2pcm stream format)" withStatus: result];return;}
// returns -10868
其中aacStreamFormat
是
memset(&aacStreamFormat, 0, sizeof(aacStreamFormat));/
UInt32 size = sizeof(aacStreamFormat);
aacStreamFormat.mFormatID = kAudioFormatMPEG4AAC;
aacStreamFormat.mChannelsPerFrame = 2;
aacStreamFormat.mFormatFlags = kMPEG4Object_AAC_Main;
aacStreamFormat.mSampleRate = graphSampleRate; //44100
AudioFormatGetProperty(kAudioFormatProperty_FormatInfo, 0, NULL, &size, &aacStreamFormat);
是這種與AUGraph轉換甚至有可能的還是我必須用其他方法進行動態轉換?
謝謝您對我們的回答,但我並不需要寫一個文件,而是一個UDP流內(我現在澄清了在問題中)。 – user1512263 2012-07-13 08:50:38
在這種情況下,您可能會通過包裝使用自定義回調的AudioFile來將ExtAudioFile強制轉換爲合規性,但這可能不值得爲此付出代價。 – sbooth 2012-07-14 12:22:38