6

macosxでkAudioUnitSubType_VoiceProcessingIOサブタイプ(kAudioUnitSubType_HALOutputではない)を備えた組み込みのマイク/スピーカーを使用した単純なプレイスルーアプリケーションの例を見つけています。コアオーディオAPIに関するコメントによると、kAudioUnitSubType_VoiceProcessingIOはデスクトップとiPhone 3.0以降で利用できるので、macosの例はどこかにあるはずです。

サンプルがどこにあるかわかりますか?またはmacosでkAudioUnitSubType_VoiceProcessingIOサブタイプを使用する方法を知っている人はいますか?私はすでにiOSで行ったのと同じ方法を試しましたが、うまくいきませんでした。

4

3 に答える 3

5

この IO ユニットを有効にするいくつかのことを発見しました。

  1. ストリーム形式は本当にうるさいです。それはする必要があります
    • LinearPCM
    • フラグコノニカル
    • チャンネルあたり 32 ビット
    • (私は 1 つのチャンネルを作成しましたが、それ以上のチャンネルでも動作する可能性があります)-
    • サンプルレート 44100 (他では動作する可能性があります)
  2. EnableIO を設定しません。IO はデフォルトで有効になっており、そのプロパティは書き込み可能ではありません。
  3. 初期化前にストリーム形式を設定します。

他の主要なオーディオ作業と同様に、すべての関数呼び出しのエラー ステータスを確認し、エラーの内容を特定し、最終的に機能するまで各ステップで少し変更を加えるだけで済みます。

于 2012-06-25T22:55:19.593 に答える
1

チャンネル数に基づいて、2 つの異なる kAudioUnitProperty_StreamFormat セットアップがありました。

size_t bytesPerSample = sizeof (AudioUnitSampleType);
stereoStreamFormat.mFormatID          = kAudioFormatLinearPCM;
stereoStreamFormat.mFormatFlags       = kAudioFormatFlagsAudioUnitCanonical;
stereoStreamFormat.mBytesPerPacket    = bytesPerSample;
stereoStreamFormat.mFramesPerPacket   = 1;
stereoStreamFormat.mBytesPerFrame     = bytesPerSample;
stereoStreamFormat.mChannelsPerFrame  = 2;
stereoStreamFormat.mBitsPerChannel    = 8 * bytesPerSample;
stereoStreamFormat.mSampleRate        = graphSampleRate;

size_t bytesPerSample = sizeof (AudioUnitSampleType);
monoStreamFormat.mFormatID          = kAudioFormatLinearPCM;
monoStreamFormat.mFormatFlags       = kAudioFormatFlagsAudioUnitCanonical;
monoStreamFormat.mBytesPerPacket    = bytesPerSample;
monoStreamFormat.mFramesPerPacket   = 1;
monoStreamFormat.mBytesPerFrame     = bytesPerSample;
monoStreamFormat.mChannelsPerFrame  = 1;                  // 1 indicates mono
monoStreamFormat.mBitsPerChannel    = 8 * bytesPerSample;
monoStreamFormat.mSampleRate        = graphSampleRate;

I/O ユニットを kAudioUnitSubType_VoiceProcessingIO として使用する場合、このオーディオ ストリーム形式で

AudioComponentDescription iOUnitDescription;
iOUnitDescription.componentType = kAudioUnitType_Output;
iOUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
iOUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
iOUnitDescription.componentFlags = 0;
iOUnitDescription.componentFlagsMask = 0;

バッファ サイズがこの AudioUnit のバッファ サイズよりも小さかったため、オーディオ出力の中断がはっきりとわかります。

kAudioUnitSubType_RemoteIO に戻す

iOUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;

その中断は消えます。

マイクからのオーディオ入力を処理し、オーディオ バッファーにリアルタイムの計算を適用しています。

メソッドでは、graphSampleRate は AVSession のサンプル レートです。

graphSampleRate = [AVAudioSession sharedInstance] sampleRate];

そして多分ここで私は間違っています。

最後に、構成パラメーターの値は次のとおりです。

ステレオ ストリーム形式:

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

モノストリーム形式:

Sample Rate:              44100
Format ID:                 lpcm
Format Flags:              3116
Bytes per Packet:             4
Frames per Packet:            1
Bytes per Frame:              4
Channels per Frame:           1
Bits per Channel:            32
于 2013-10-09T18:07:39.030 に答える