0

マルチチャンネル ミキサー ユニットとサブタイプ AudioFilePlayer のジェネレーターの 2 つのオーディオ ユニットを指定してインスタンス化しました。

ミキサー入力に設定した ASBD と一致するように、filePlayer の出力の ASBD を設定する必要があると考えていたでしょう。しかし、filePlayer の出力を設定しようとすると、kAudioUnitErr_FormatNotSupported (-10868) エラーが発生します。

これは、ミキサー入力に設定したストリーム フォーマット (成功) であり、filePlayer にも設定しようとしています (これは、Apple の mixerhost サンプル プロジェクトからコピーされたモノストリーム フォーマットです)。

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 に設定することが正しい (そして必要な) ことのように思えます。

4

2 に答える 2

0

AUGraphをどのように構成しましたか?私はあなたを助けるためにいくつかのコードを見る必要があるかもしれません。

AUMultiChannelMixer ASBDの出力スコープの設定は(MixerHostのように)1回だけ機能します。ただし、何らかの効果がある場合は、ASBDが定義されている場所と、CoreAudioがジャンプしてエフェクトAudioUnitsASBDを混乱させないようにコードを配置する方法を検討する必要があります。いじることは、ASBDをデフォルトのkAudioFormatFlagIsFloat、kAudioFormatFlagIsPacked、2チャネル、非インターリーブにオーバーライドすることを意味します。これは最初は私にとって大きな苦痛でした。

エフェクトAudioUnitsをデフォルトのASBDに設定します。AUFilePlayerノードを接続していると仮定すると、このようなプログラムの後半でそれを引き出すことができます。

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

そして、設定に進みます

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

うまくいけば、これがお役に立てば幸いです。

于 2012-12-27T23:22:13.183 に答える
0

基本的に、filePlayer ASBD をわざわざ設定するのではなく、設定されている「ネイティブ」ASBD を取得し、サンプル レートとチャンネル数のみを更新しました。

同様に、ミキサーに入力を設定せず、ミキサーにフォーマットアウトを認識させました。

于 2013-05-22T14:16:12.577 に答える