2013-03-18 5 views
0

Я хочу обнаружить звук во время записи. Если звук останавливается в течение 2-3 секунд, запись должна останавливаться автоматически.Автоматически обнаруживать, что нет звука AVrecorder

есть ли способ? я сделал запись: -

NSArray *dirPaths; 
     NSString *docsDir; 

     dirPaths = NSSearchPathForDirectoriesInDomains(
                 NSDocumentDirectory, NSUserDomainMask, YES); 
     docsDir = [dirPaths objectAtIndex:0]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"ddMMyyyyhh:mm:ss"]; 

     NSDate *now = [[NSDate alloc] init]; 
     NSString *dateString = [dateFormatter stringFromDate:now]; 
     dateString=[NSString stringWithFormat:@"%@.caf",dateString]; 
     soundFilePath = [docsDir 
            stringByAppendingPathComponent:dateString]; 
     NSLog(@"soundFilePath==>%@",soundFilePath); 
     NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
     [soundFilePath retain]; 
     NSDictionary *recordSettings = [NSDictionary 
             dictionaryWithObjectsAndKeys: 
             [NSNumber numberWithInt:AVAudioQualityMin], 
             AVEncoderAudioQualityKey, 
             [NSNumber numberWithInt:16], 
             AVEncoderBitRateKey, 
             [NSNumber numberWithInt: 2], 
             AVNumberOfChannelsKey, 
             [NSNumber numberWithFloat:44100.0], 
             AVSampleRateKey, 
             nil]; 
     NSError *error = nil; 
     recorder = [[AVAudioRecorder alloc] 
        initWithURL:soundFileURL 
        settings:recordSettings 
        error:&error]; 
     if (error) 
     { 
      NSLog(@"error: %@", [error localizedDescription]); 
     } else { 
      [recorder prepareToRecord]; 
     } 
     [recorder record]; 

Заранее спасибо

ответ

1

Вы shoudl использовать поддержку AVAudioRecorder для измерения уровня звука, чтобы отслеживать уровни звука и остановки записи, когда уровни ниже определенного порога. Чтобы включить измерение -

[anAVAudioRecorder setMeteringEnabled:YES]; 

, а затем вы можете периодически звонить:

[anAVAudioRecorder updateMeters]; 
power = [anAVAudioRecorder averagePowerForChannel:0]; 
if (power > threshold && anAVAudioRecorder.recording==NO) 
    [anAVAudioRecorder record]; 
else if (power < threshold && anAVAudioRecorder.recording==YES) 
    [anAVAudioRecorder stop]; 

порог: Представление с плавающей точкой, в децибелах, тока средней мощности заданного звукового канала. Возвращаемое значение 0 дБ указывает полную шкалу или максимальную мощность; возвращаемое значение -160 дБ указывает минимальную мощность (то есть около тишины).

Если сигнал, предоставленный аудиоплееру, превышает ± полную шкалу, то возвращаемое значение может превышать 0 (то есть оно может вводить положительный диапазон ).

[apple docs]

+0

Спасибо за быстрый reply.But, что делает порог означает здесь –