1

Mac OS X でのキャプチャと再生に vpio オーディオ ユニットを使用しています。

vpio ユニットで入出力フォーマットを設定するまでは、すべてうまくいきます。

私が望んでいたフォーマットは次のとおりです。

AudioStreamBasicDescription audio_format ;
audio_format.mSampleRate     = 8000.0 ;
audio_format.mBitsPerChannel     = 16 ;
audio_format.mChannelsPerFrame = 1 ;
audio_format.mBytesPerFrame      = (audio_format.mBitsPerChannel >> 3)  * audio_format.mChannelsPerFrame ;
audio_format.mFramesPerPacket    = 1 ;
audio_format.mBytesPerPacket     = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ;
audio_format.mFormatID       = kAudioFormatLlinearPCM ;
audio_format.mFormatFlags    = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked ;

このフォーマットを vpio (入力バス/出力スコープ) に設定できますが、vpio (出力バス/入力スコープ) には設定できず、エラー コードが表示されます(kAudioUnitErr_FormatNotSupported)。しかし、AUHAL unit代わりに使用すると、AUHAL (入力バス/出力スコープ) と AUHAL (出力バス/入力スコープ) の両方でフォーマットを設定できます。

この2つのユニットの違いは何ですか?

いくつかの試行を行った後、次のように、vpio (出力バス/入力スコープ) で使用可能な形式の 1 つを最終的に見つけました。

AudioStreamBasicDescription audio_format ;
audio_format.mSampleRate     = 8000.0 ;
audio_format.mBitsPerChannel     = 32 ;
audio_format.mChannelsPerFrame   = 1 ;
audio_format.mBytesPerFrame      = (audio_format.mBitsPerChannel >> 3)  * audio_format.mChannelsPerFrame ;
audio_format.mFramesPerPacket    = 1 ;
audio_format.mBytesPerPacket     = audio_format.mBytesPerFrame * audio_format.mFramesPerPacket ;
audio_format.mFormatID       = kAudioFormatLlinearPCM ;
audio_format.mFormatFlags    = kLinearPCMFormatFlagIsFloat | kLinearPCMFormatFlagIsPacked ;

しかし、私を混乱させたのは、vpio の (入力バス/出力スコープ) と (出力バス/入力スコープ) のフォーマットが一致していなかったことです。そして、どうやって手に入れるのか知りたいthe available formats information of the vpio unitですか?Apple サイトで利用可能な の形式に関するドキュメントが見つかりません。

誰かが私の質問に答えることができますか?

ありがとうございます。

4

3 に答える 3

0

私はあなたと同じ問題を抱えています。Voice Processing Audio ユニットにオーディオ フォーマットを設定しようとすると、エラー -10865 が発生します。これは、オーディオ フォーマット プロパティが書き込み可能でないことを意味します。

私の理解が正しければ、この Audio Unit にフォーマットを設定することはできません。8000 Hz のサンプル レートでオーディオが必要な場合は、再サンプルする必要があります。

それはできる

  1. Audio Unit グラフを作成し、 Voice Processing Unit の前にConverter Audio Unitを追加する
  2. ffmpeg の swresample などの外部ライブラリを使用してオーディオをリサンプリングする

あなたの開発を頑張ってください。

于 2016-06-27T18:56:46.173 に答える
-1

プロジェクトで音声を録音するのに最適なファイル サイズと音質を得るために、次の設定を使用しました。

  // Setup audio session
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    // Define the recorder setting
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init];

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [recordSetting setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey];
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
    [recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityLow] forKey:AVEncoderAudioQualityKey];

   // Initiate and prepare the recorder
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];
于 2013-08-22T14:34:24.207 に答える