2013-04-09 2 views
0

Я создаю приложение, в котором пользователь может записывать и воспроизводить записанный файл. Я также могу записывать и играть, но проблема, с которой я столкнулся, заключается в том, что во время воспроизведения (прослушивания) записи, если пользователь нажимает кнопку записи, она начнет запись и нажатие на остановке возобновит предыдущую запись, где она осталась ,Запись и воспроизведение с использованием AVAudioRecorder и AVAudioPlayer

Что я хочу, когда пользователь слушает запись, а в среднем, когда он нажимает кнопку записи, тогда последняя запись (которую он играет) должна быть уничтожена.

Короче говоря, я не хочу возобновлять последнюю запись, я хочу воспроизвести недавнюю запись.

Вот мой код для записи и воспроизведения.

-(void)showStopbutton 
    { 
     if (flag_for_mic_button == 0) 
     { 
      // All in vain the following condition not making any effect palyer is resuming back 
      if ([audioPlayer isPlaying]) 
      { 
       [audioPlayer stop]; 
       audioPlayer = nil; 
       audioPlayer = NO; 
      } 
      // 

      [btn_Mic setImage:[UIImage imageNamed:@"stop.png"] forState:UIControlStateNormal]; 
      lbl_Press.hidden = TRUE; 
      lbl_updateTime.hidden = FALSE; 
      [self startRecording]; 
      flag_for_mic_button = 1; 
     } 
     else if (flag_for_mic_button ==1) 
     { 
      [self stopRecording]; 

      // All in vain the following condition not making any effect palyer is resuming back 

      if ([audioPlayer isPlaying]) 
      { 
       audioPlayer = NO; 
       [audioPlayer stop]; 
       audioPlayer = nil; 
      } 

      // 

      [btn_Mic setImage:[UIImage imageNamed:@"mic.png"] forState:UIControlStateNormal]; 
      lbl_Press.hidden = FALSE; 
      lbl_updateTime.hidden = TRUE; 
      flag_for_mic_button = 0; 
     } 
    } 

-(void)startRecording 
{ 
    AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    NSError *err = nil; 
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
    AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); 
    if(err){ 
     NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
     return; 
    } 
    [audioSession setActive:YES error:&err]; 
    err = nil; 
    if(err){ 
     NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
     return; 
    } 
    recordSetting = [[NSMutableDictionary alloc]init]; 
    [recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:44100.0f] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; 
    [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
    [recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
    [recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 
    NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0]; 
    caldate =[now description]; 
    recorderFilePath = [NSString stringWithFormat:@"%@/%@ MyRecording.caf",DOCUMENTS_FOLDER,caldate]; 
    NSURL *url = [NSURL fileURLWithPath:recorderFilePath]; 
    err=nil; 
    audioRecorder = [[AVAudioRecorder alloc]initWithURL:url settings:recordSetting error:&err]; 
    [audioRecorder setDelegate:self]; 
    [audioRecorder prepareToRecord]; 
    audioRecorder.meteringEnabled = YES; 

    [audioRecorder record]; 

    [self setTimer]; 
    [self hidePlaybackView]; 
} 

-(void)stopRecording 
{ 
    [audioRecorder stop]; 
    [start_Timer invalidate]; 
    [self showPlaybackView]; 

} 

-(void)playSound 
{ 
// [self playBackTimer]; 

    if (!recorderFilePath) 
    { 
     recorderFilePath = [NSString stringWithFormat:@"%@/%@ MyRecording.caf",DOCUMENTS_FOLDER,caldate]; 
    } 

    if(soundID) 
    { 
     AudioServicesDisposeSystemSoundID(soundID); 
    } 


    //Get a URL for the sound file 
    NSURL *filePath = [NSURL fileURLWithPath:recorderFilePath isDirectory:NO]; 

    //Use audio sevices to create the sound 
    AudioServicesCreateSystemSoundID((CFURLRef)CFBridgingRetain(filePath), &soundID); 

    //Use audio services to play the sound 
    AudioServicesPlaySystemSound(soundID); 

    audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:filePath error:nil]; 

    [audioPlayer play]; 

    audioPlayer.delegate = self; 

} 

EDIT:

-(void)showPlaybackView 
{ 
    view_playback = [[UIView alloc]initWithFrame:CGRectMake(0, 600, 320, 80)]; 
    view_playback.backgroundColor = [UIColor grayColor]; 
    [self.view addSubview:view_playback]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.4]; 
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; 
    view_playback.frame = CGRectMake(0, 325, 320, 55); 
    [UIView commitAnimations]; 

    btn_Playback = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [btn_Playback setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; 
    btn_Playback.frame = CGRectMake(10, 10, 35, 35); 
    [view_playback addSubview:btn_Playback]; 
    [btn_Playback addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside]; 

    btn_done = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [btn_done setTitle:@"Done" forState:UIControlStateNormal]; 
    btn_done.frame = CGRectMake(265, 15, 45, 30); 
    btn_done.titleLabel.font = [UIFont systemFontOfSize:14.0f]; 
    [view_playback addSubview:btn_done]; 

    [view_playback addSubview:playback_slider]; 


    [btn_done addTarget:self action:@selector(Done) forControlEvents:UIControlEventTouchUpInside]; 
} 

Любая помощь будет заметным.

Благодаря

+0

В методе '- (void) stopRecording' вы останавливаете запись, не удаляя существующую запись. Y? –

+0

если я удалю эту запись, то как прослушать записанный файл –

+0

Спасибо за помощь, но у меня есть кнопка для воспроизведения записанного файла, но в то же время я предоставляю положение записи нового файла и после записи, нажимая на кнопка воспроизведения воспроизведет недавнюю запись. и, кроме того, используя '[audioPlayer stop]', не делая никакого эффекта, он приостанавливает воспроизведение текущего файла. –

ответ

0

Я остановил аудиоплеер и не позволяйте это резюме назад, используя следующий код.

if([audioPlayer isPlaying]) 
{ 
    audioPlayer.currentTime=0; 
} 

Счастливое кодирование!

0

Попробуйте этот подход:

-(void)showStopbutton 
{ 
     if (![audioPlayer isPlaying]) 
     { 
      [audioPlayer start]; 
      // other stuff 
     } 

     if ([audioPlayer isPlaying]) 
     { 
      [audioPlayer stop]; 
      // Delete the previous recording in the delegate method of audio player  
     } 

} 
Смежные вопросы