1

私はAVAudioEngineこのコードを使用してマイクからリストしています:

 NSError *err2 = nil;

engine = [[AVAudioEngine alloc] init];
mainMixer = [engine mainMixerNode];
[mainMixer installTapOnBus:0 bufferSize:1024 format:[mainMixer outputFormatForBus:0] block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {
    [self normalize:buffer];
}];
[engine startAndReturnError:&err2];

次に、バッファを渡すのを見ると、という関数に入りますnormalize:

-(void) normalize:(AVAudioPCMBuffer*) buffer{
float sum = 0;

NSMutableArray *values = [NSMutableArray new];

for (AVAudioFrameCount i = 0; i < buffer.frameLength; i++) {
    [values addObject:@(buffer.floatChannelData[0][i])];
}

for (int i = 0 ; i< [values count]; i++){
    if ([values[i] floatValue] != 0){
        NSLog(@"%f", [values[i] floatValue]) ;
    }
}
}

今のところ、 の値のみを出力したいと思いますfloatChannelData。問題は、常に 0 を出力していることです。そのため、バッファの値はすべて 0 です。なぜこれが起こっているのでしょうか? マイクが受け取る声の変化に合わせて値が変化するべきではありませんか?

4

1 に答える 1

0

これで解決しました:

  • 「Info.plist」ファイルに移動します。
  • 右クリックして「行の追加」をクリックします。
  • 次に、新しく作成された行の最初の列で、キー「プライバシー - マイクの使用方法の説明」を見つけ、キーの値としてオーディオを使用して何をするつもりかについての適切な説明を追加します (3 番目の列)。

これで、アプリを実行すると、マイクへのアクセス許可を求めるダイアログ ボックスが表示されます。基本的に、オーディオ デバイスと技術的に対話してオーディオ エンジンを起動できたとしても、ユーザーから明示的な許可がない限り、オーディオを取得することはできません。

于 2020-02-23T11:08:00.167 に答える