簡體   English   中英

麥克風獲取聲音的方法未調用

[英]Microphone get sound method not called

當iPhone麥克風收到聲音時,我想調用委托方法。 呼叫未委托的記錄員代表。 我想獲得聲音強度。

我已經嘗試過此代碼。 但沒有用

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);

}

我該怎么做,謝謝你。

實際上,您的記錄器同時啟動和停止,這就是其代理從未觸發的原因。 如果我正確理解了您想要什么,那么這里就是解決方案。

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];
          } 
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM