1

カラオケソフトを開発していて、audiounit を使って音声をミックスしたいのですが、スコープと要素の設定方法がわかりません。例:

UInt32 busCount = 2;
OSStatus result = AudioUnitSetProperty (
    mixerUnit,
    kAudioUnitProperty_ElementCount
    kAudioUnitScope_Input,
    0,
    &busCount,
    sizeof (busCount
);

スコープが「kAudioUnitScope_Input」で要素が「0」である理由は何ですか?

4

2 に答える 2

6

Apple Docsのこの図は、それをかなり明確にしています:

スコープは、オーディオ ユニット内のプログラム コンテキストです。グローバル スコープという名前からは別のことが示唆されるかもしれませんが、これらのコンテキストは入れ子になることはありません。Audio Unit Scopes 列挙体の定数を使用して、ターゲットとするスコープを指定します。

0 は「出力バス」を表します。

要素は、オーディオ ユニット スコープ内にネストされたプログラム コンテキストです。要素が入力スコープまたは出力スコープの一部である場合、それは物理的なオーディオ デバイスの信号バスに似ています。そのため、バスと呼ばれることもあります。これら 2 つの用語 (要素とバス) は、オーディオ ユニットのプログラミングではまったく同じものを指します。このドキュメントでは、シグナル フローを強調する場合は「バス」を使用し、I/O ユニットの入力要素や出力要素など、オーディオ ユニットの特定の機能面を強調する場合は「要素」を使用します (「I/O ユニットの本質的な特性」を参照)。 .

バス値のセマンティクスを与えるには、定義を使用するのが最善です。

// put this in header file
#define kOutputBus 0
#define kInputBus 1
于 2013-05-21T16:26:01.893 に答える
1

は次のAudioUnitSetPropertyように定義されます。

OSStatus AudioUnitSetProperty (
   AudioUnit            inUnit,
   AudioUnitPropertyID  inID,
   AudioUnitScope       inScope,
   AudioUnitElement     inElement,
   const void           *inData,
   UInt32               inDataSize
);

コード内の 0 は に対応し、AudioUnitElementkAudioUnitScope_Input definedAudioUnitScopeであり、次のように説明されています。

スコープ - プロパティが適用されるオーディオ ユニット内のプログラム コンテキスト。このドキュメントで説明されているように、プロパティは 1 つ以上のスコープに適用されます。iOS のオーディオ ユニットのスコープは、入力、出力、およびグローバルです。OS X では、オーディオ ユニットには追加の MIDI 関連のスコープ (Group、Part、および Note) があります。

AudioUnitSetPropertyAudio Unit Properties Referenceのドキュメントを見てください。

于 2013-05-21T16:27:51.667 に答える