AVAudioRecorder(iPadでのテスト)から正確なメーターを読み取ることができません。iPadのAVAudioRecorderメーター遅延
音量が上がっている間はうまくいくようですが、音量が下がると遅延が発生します。例:私はマイクに向かって話し、ゆっくりと私の声を上げます。読み取り値は-35.567から-34.678まで-10.579まで増加しますが、話しを止めると1~2秒遅れて-35.567(またはそれが起こったとき)に戻ります。 NSLogはループからの更新を続けますが、音が長い間終了していても、遅延中にメーター番号は変わりません。
以下のコードの要点を追加しました。必要に応じてフルコードを入力していただければ幸いです。
私はそうのようなレコーダーを初期化します。
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error];
[audioSession setActive:YES error: &error];
NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
recordedTmpFile = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithString: @"Recording.caf"]]];
recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error];
[recorder setDelegate:self];
[recorder prepareToRecord];
[recorder setMeteringEnabled:YES];
[recorder record];
とループにメーターを更新します。
編集した-(void) loop:(ccTime)dt
{
if(isRecording == YES)
{
//get volume levels
[recorder updateMeters];
float level = [recorder peakPowerForChannel:0];
NSLog(@"Vol: %f", level);
}
}
:私も、私はのためのCocos2dスケジュールを使用していますことを言及する必要がありますループ:
[self schedule:@selector(loop:)];
そのような長い遅延でしょうか?
編集:平均ピーク電力を試しましたが、これには遅延がありません。だから私はおそらくそれを回避策として使うことができた。しかし、私はむしろピークパワーを使用したり平均化したりしません。何が起きているのかを理解することは良いことです。
ループのループ間隔は何ですか:(ccTime)dt関数? – Raptor
デフォルトです。私はそれが何であるか分かりません。しかし、このループは遅延中にNSLogを何度も更新しています。突然降りるまで同じ数字が残っています。 – Kangoo
これはループを開始します:[self schedule:@selector(loop :)]; – Kangoo