2012-12-24 100 views
0

我已經指定並實例化了兩個音頻單元:一個多聲道混音器單元和一個子類型AudioFilePlayer的生成器。我需要設置核心音頻文件播放器音頻單元的ASBD嗎?

我會想我需要設置filePlayer輸出的ASBD以匹配爲混音器輸入設置的ASBD。但是,當我嘗試設置filePlayer的輸出時,我得到一個kAudioUnitErr_FormatNotSupported(-10868)錯誤。

這裏是流格式我在混頻器輸入(成功)設置和我也試圖在filePlayer設置(這是來自蘋果的mixerhost示例項目複製的monostream格式):

Sample Rate:    44100 
Format ID:     lpcm 
Format Flags:     C 
Bytes per Packet:    2 
Frames per Packet:   1 
Bytes per Frame:    2 
Channels per Frame:   1 
Bits per Channel:   16 

在使用過程中解決這個問題我查詢filePlayer AU的格式是「本地」設置的。這是所返回的內容:

Sample Rate:    44100 
Format ID:     lpcm 
Format Flags:    29 
Bytes per Packet:    4 
Frames per Packet:   1 
Bytes per Frame:    4 
Channels per Frame:   2 
Bits per Channel:   32 

所有示例代碼,我發現發送filePlayer單元的輸出效果器,並設置filePlayer的輸出,以匹配該效果單元的ASBD集。鑑於我沒有效果單元,它似乎將filePlayer的輸出設置爲混音器輸入的ASBD將是正確的並且是必需的。

在此先感謝!

回答

0

基本上我沒有打擾設置filePlayer ASBD,而是檢索了它設置的「native」ASBD,並且只更新了採樣率和通道數。

同樣,我沒有在調音臺上設置輸入,並讓調音臺將其格式化。

0

你是如何配置AUGraph的?我可能需要看一些代碼來幫助你。

僅將AUMultiChannelMixer ASBD的輸出範圍設置爲一次(如在MixerHost中)一樣。但是,如果您完全有任何效果,則需要考慮其ASBD的定義位置以及如何安排代碼,以便CoreAudio不會跳入並影響AudioUnit ASBD的效果。通過搞亂我的意思是覆蓋你的ASBD到默認kAudioFormatFlagIsFloat,kAudioFormatFlagIsPacked,2個通道,非交錯。起初這對我來說是一大痛苦。

我會將AudioUnits的效果設置爲它們的默認ASBD。假設你已經連接AUFilePlayer節點,您可以稍後再拉出來在這樣的程序

result = AUGraphNodeInfo (processingGraph, 
          filePlayerNode, 
          NULL, 
          &filePlayerUnit); 

,然後繼續設置

AudioUnitSetProperty(filePlayerUnit, 
        kAudioUnitProperty_StreamFormat, 
        kAudioUnitScope_Output, 
        0,  
        &monoStreamFormat, 
        sizeof(monoStreamFormat)); 

希望這有助於。

+0

我一直在回答這個問題,因爲我收到了SO以外的幫助。基本上我沒有打擾設置filePlayer ASBD,而是檢索了它設置的「本機」ASBD,並僅更新了採樣率和通道數。同樣,我沒有在調音臺上設置輸入,並讓調音臺將其格式化。 – Nick