Я пытаюсь использовать AVAudioRecorder
в MacOSX 10.14.x для получения показаний уровня звука входного источника - в данном случае, микрофона. Поскольку это не на iOS, использование AVAudioSession
не применяется. Я включил микрофон в настройках SandBox, а также дважды проверил все в приложении Audio Midi Setup, установив для микрофона значение 2-канальное 24-битное целое число 44,1 кГц. Я удалил всю проверку ошибок, но все должно быть в порядке (например, очевидный успех при всех вызовах объекта recorder
). Кроме того, я попробовал это на другом компьютере 10.14.x с тем же результатом.
Когда я запускаю это, все, что я получаю, это значения -120,0 как для средней, так и для пиковой мощности в моем обратном вызове, даже если есть звук.
Есть идеи, что я делаю не так?
Примечание. Когда я запускаю [recorder prepareToRecord]
, я получаю два сообщения об ошибке:
no saved enable hardware sample rate converter preference found
ca_debug_string: inPropertyData == NULL
AVAudioRecorder *recorder; // instance variable
NSTimer *levelTimer; // instance variable
NSURL *url = [NSURL fileURLWithPath: @"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.00], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityHigh], AVEncoderAudioQualityKey,
nil];
NSError *error = nil;
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.03
target:self
selector:@selector(levelTimerCallback:)
userInfo:nil
repeats:YES];
- (void)levelTimerCallback:(NSTimer *)timer {
[recorder updateMeters];
float peakPower = [recorder peakPowerForChannel:0];
float avgPower = [recorder averagePowerForChannel:0];
}