简体   繁体   English

记录器委托方法未调用

[英]Recorder delegate method not called

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:NULL];
    recorder.delegate = self;
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];

    [recorder prepareToRecord];
    recorder.meteringEnabled = YES;
    //Start the actual Recording
    [recorder record];

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

    NSLog(@"%f",level);

i have used this code in viewDidload() method to record a sound sound get in level. 我已经在viewDidload()方法中使用此代码来记录声音的水平。

i want to call the deleget method when device get the sound. 我想在设备发出声音时调用deleget方法。

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


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


}

this method not called. 此方法未调用。

i am setting recorder delegate in .h file but not called this method why this is happening. 我在.h文件中设置记录器委托,但未调用此方法,原因是这种情况。

help me to do this. 帮助我做到这一点。

Thanks in advance. 提前致谢。

Are you actually storing the AVAudioRecorder instance somewhere? 您实际上是否将AVAudioRecorder实例存储在某个地方? If you are not then it is likely deallocated by the time the above code finishes. 如果不是这样,则可能在上述代码完成时将其释放。

Try this 尝试这个

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

 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:5000.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];

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

recorder.meteringEnabled = YES;

[player setVolume: 1.0];

[recorder prepareToRecord];

} }

 -(IBAction)record:(id)sender {


   if (!recorder.recording) {
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setActive:YES error:nil];
    recordBtn.selected=YES;

    tabBtn.selected = YES;
    tabBtn.userInteractionEnabled = NO;

    // Start recording


    [recorder record];

   } else {


  }


 }


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




recorder = nil;
player = nil;
spinnerView = nil;


UploadAudioViewController *upload = [[UploadAudioViewController alloc]initWithNibName:@"UploadAudioViewController" bundle:nil];


NSLog(@"recorder url----%@",recorderurl);

upload.audioURL = recorderurl;

[self.navigationController pushViewController:upload animated:YES];




 }

and make sure - you used AVAudioRecorderDelegate and AVAudioPlayerDelegate 并确保-您使用了AVAudioRecorderDelegate和AVAudioPlayerDelegate

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM