Я хочу сделать что-то вроде проверки динамиков на iPhone (как проект курса). И мне интересно, как получить линейный PCM от динамика. Я прочитал о документации о службах очереди, и кажется, что он записывает звук, а затем сохраняет его в файл. Есть ли способ получить линейный PCM от этого? В документации упоминалось что-то о буфере, но я этого не совсем понимаю. Может быть, это ключ к этому?Как получить линейный PCM от записи на iPhone?
1
A
ответ
1
Audio Queue Services является для этого. Просто введите код, который вам нужен в функции обратного вызова. http://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005343
0
AVAudioRecorder *audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
audioRecorder.delegate = self;
audioRecorder.meteringEnabled = YES;
затем начать запись с использованием NSTimer, таких как Invoke таймера при нажатии на кнопку записи метод
-(IBAction)record:(id)sender{
NSTimer *recordTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self
selector:@selector(recordTimerAction:) userInfo:nil repeats:YES];
}
-(void)recordTimerAction:(id)sender {
[audioRecorder updateMeters];
const double ALPHA = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [audioRecorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
NSLog(@"The Amplitude of the recording Sound is %f",lowPassResults);
NSLog(@"The Normal Linear PCM Value is %f",[audioRecorder peakPowerForChannel:0]);
}
// Делегат
-(void)audioRecorderDidFinishRecording: (AVAudioRecorder *)recorder successfully:(BOOL)flag{
[recordTimer invalidate];
}
, что амплитуда будет находиться в диапазоне от 0 до 1., Что может быть полезным – Bala
Пожалуйста, дайте мне знать, если это не работает – Bala
я обнаружил, что яблоко имеет встроенный Int API для этого, которое называется Службы очереди аудио. Я думаю, что ваш ответ правильный, но встроенный API будет лучше. – yoyosir