iPhone - показывать обратную запись аудио записи с помощью AVAudioRecorder - PullRequest
2 голосов
/ 02 октября 2009

Я использую класс AVAudioRecorder для записи в файл WAV. Я хотел бы реализовать обратную связь записи (как пример SpeakHere), которая показывает уровень записи.

Я просмотрел образец SpeakHere, но не смог понять, как изменился уровень записи. Может кто-нибудь подсказать мне, что нужно сделать?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 02 октября 2009

Если вы используете AVAudioRecorder, вы можете просто использовать следующее, чтобы получить уровни мощности:

- (float)peakPowerForChannel:(NSUInteger)channelNumber
- (void)updateMeters

Те дают вам значения на графике. Есть более простые способы построения графиков этих значений, но чтобы увидеть, как пример SpeakHere делает это, посмотрите их README:

AQLevelMeter.h
AQLevelMeter.mm

The AQLevelMeter class defines the level meter view for the applcation, displaying the metering data from an AudioQueue object

LevelMeter.h
LevelMeter.m

LevelMeter is a base metering class, providing simple functionality for displaying level data

GLLevelMeter.h
GLLevelMeter.m

GLLevelMeter is a subclass of LevelMeter that uses OpenGL for drawing

AQRecorder.h
AQRecorder.m
0 голосов
/ 22 мая 2012

Ответ Махбоуда является правильным, хотя я обнаружил, что этот метод более отзывчив, чем "peakPowerForChannel":

- (float)averagePowerForChannel:(NSUInteger)channelNumber

Затем я перевел значение с плавающей точкой в ​​несколько более полезную шкалу от 0 до 10 с помощью этого вычисления: (Обязательно используйте MIN и MAX, чтобы обеспечить выполнение числа, находящегося в диапазоне, потому что в редких случаях оно может выходить за пределы 0 -10.)

//
// Decrease the divisor to increase the responsiveness
//
int translatedValue = (averagePowerFloat / 6 + 11);

Затем у меня есть цикл в фоновом потоке, который вызывает updateMeters 10 раз в секунду и обновляет индикатор выполнения с уровнем записи. Кажется, работает очень хорошо.

...