2011-06-20 48 views
1

我有一個AUGraph設置相當簡單地與連接到I/O單元中的多通道混合器。播放通過回調函數訪問,一切都很好。使用IOS 3D混合器

我想切換到3D混音器,而不是多通道混頻器。所以我將參數從kAudioUnitSubType_MultiChannelMixer切換到kAudioUnitSubType_AU3DMixerEmbedded,並保持所有其他設置相同。

結果是有點兒高音調的哀鳴,似乎開始聽起來像的東西,然後成爲只是撒嬌十歲上下的。我已經瀏覽了3D混音器的各個單元的parameters,並將它們設置爲默認值,但沒有任何變化。打開和關閉k3DMixerParam_Enable參數確實可以在靜音和取消靜音播放時起作用。

沒有人有和我可能會錯過什麼設置的想法?或知道在哪裏可以找到工作的3D混音器的例子?

回答

2

正如已經指出的三維混合器需要單聲道輸入。但你也必須使用UInt16作爲輸入樣本數據類型。這是一個工作AudioStreamBasicDescription:

AudioStreamBasicDescription streamFormat = {0}; 
size_t bytesPerSample = sizeof (UInt16); 

streamFormat.mFormatID   = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags  = kAudioFormatFlagsCanonical; 
streamFormat.mBytesPerPacket = bytesPerSample; 
streamFormat.mFramesPerPacket = 1; 
streamFormat.mBytesPerFrame  = bytesPerSample; 
streamFormat.mChannelsPerFrame = 1; 
streamFormat.mBitsPerChannel = 8 * bytesPerSample; 
streamFormat.mSampleRate  = graphSampleRate; 

// Set the input stream format of the desired 3D mixer unit audio bus 
AudioUnitSetProperty (
         mixerUnit, 
         kAudioUnitProperty_StreamFormat, 
         kAudioUnitScope_Input, 
         audioBus, 
         &streamFormat, 
         sizeof (streamFormat) 
        ); 
+0

儘管這在本例中是隱含的,但大尾數標誌必須關閉。 – verec

1

由於所有的答案已經提到:在3D調音臺iOS上需要單聲道輸入。

在iOS 8 /的Xcode 6的規範的格式的概念已被棄用,我發現這個(且僅此)單流格式描述工作作爲3D混合器輸入總線流格式描述:

AudioStreamBasicDescription monoStreamFormat = {0}; 
monoStreamFormat.mSampleRate  = sampleRate; 
monoStreamFormat.mFormatID   = kAudioFormatLinearPCM; 
monoStreamFormat.mFormatFlags  = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 
monoStreamFormat.mBitsPerChannel = 16; 
monoStreamFormat.mChannelsPerFrame = 1; 
monoStreamFormat.mFramesPerPacket = 1; 
monoStreamFormat.mBytesPerPacket = 2; 
monoStreamFormat.mBytesPerFrame  = 2; 

樣品率應該設置,然後從AVAudioSession獲得。

設置在連接到3D混頻器輸入音頻單元的輸出這種格式。這可能是一個AUConverter單位...

不過請注意,這並沒有被用於<測試的iOS 8