2013-10-24 12 views
0

아이폰 마이크에서 소리가 나면 대리자 메서드를 호출하고 싶다. 호출되지 않은 레코더 대리자를 호출하십시오. 나는 소리의 강도를 얻고 싶다.마이크가 소리가 나지 않는다.

이 코드를 사용해 보았습니다. 그러나 일하지 않습니다.

NSArray *pathComponents = [NSArray arrayWithObjects: 
           [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], 
           @"MyAudioMemo.m4a", 
           nil]; 
    NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

    // Setup audio session 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

    // Define the recorder setting 
    NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 

    // Initiate and prepare the recorder 
    recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:nil]; 
    recorder.delegate = self; 
    recorder.meteringEnabled = YES; 
    [recorder prepareToRecord]; 



    [recorder record]; 

    [recorder updateMeters]; 
    level = [recorder peakPowerForChannel:0]; 



    [recorder stop]; 

    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setActive:NO error:nil]; 




    // Do any additional setup after loading the view, typically from a nib. 
} 

// 사용자가 사운드를 얻을 때 호출이 방법 ....... 내가 사전에이 감사를 할 수있는 방법

-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag 
{ 


    NSLog(@"Sound level is %f",level); 

} 

.

답변

0

실제로 레코더가 동시에 시작되고 중지되므로 그 대리인이 절대 실행되지 않습니다. 내가 원하는 것을 정확하게 이해했다면, 여기에 해결책이 있습니다.

NSArray *pathComponents = [NSArray arrayWithObjects: 
          [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], 
          @"MyAudioMemo.m4a", 
          nil]; 
NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents]; 

// Setup audio session 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

// Define the recorder setting 
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 

[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 

// Initiate and prepare the recorder 
recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:nil]; 
recorder.delegate = self; 
recorder.meteringEnabled = YES; 
[recorder prepareToRecord]; 



//[recorder record]; // Do not start recording here 

[recorder updateMeters]; 
level = [recorder peakPowerForChannel:0]; 

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
[audioSession setActive:NO error:nil]; 
    self.meterTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 
           target:self 
           selector:@selector(updateAudioMeter) 
           userInfo:nil 
           repeats:YES]; 
} 

    // Do any additional setup after loading the view, typically from a nib. 
} 

여기에 측정 수준 내가 마이크는 마이크 근처 박수 같은 일부 사운드를 얻을 때 대리자 메서드 호출 할

-(void)updateAudioMeter 
    { 
    [self.recorder updateMeters]; 
     self.dBLevel = [self.recorder averagePowerForChannel:0]; 

     if(self.dBLevel>-25) 
     { 
      [self.recorder record]; 
     } 
     else 
      { 
      [self.recorder stop]; 
      } 
    } 
+0

가져옵니다. – Jitendra

+0

예, 알겠습니다. 그것의 동일한 해결책. updateAudioMeter는 사운드 레벨을 확인하고 여기에 -25 인 임계 값을 초과하여 증가하면 레코더가 레코딩을 시작합니다. 레코더를 시작하고 멈추는 데 더 높은 값과 낮은 값을 추가 할 수 있습니다 –

+0

아니요 마이크 근처에서 사용자가 박수를 치를 때만 전화하고 싶습니다. – Jitendra

관련 문제