2012-04-26 2 views
1

Я хочу сделать что-то вроде проверки динамиков на iPhone (как проект курса). И мне интересно, как получить линейный PCM от динамика. Я прочитал о документации о службах очереди, и кажется, что он записывает звук, а затем сохраняет его в файл. Есть ли способ получить линейный PCM от этого? В документации упоминалось что-то о буфере, но я этого не совсем понимаю. Может быть, это ключ к этому?Как получить линейный PCM от записи на iPhone?

ответ

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

, что амплитуда будет находиться в диапазоне от 0 до 1., Что может быть полезным – Bala

+0

Пожалуйста, дайте мне знать, если это не работает – Bala

+0

я обнаружил, что яблоко имеет встроенный Int API для этого, которое называется Службы очереди аудио. Я думаю, что ваш ответ правильный, но встроенный API будет лучше. – yoyosir