2013-10-04 3 views
2

Привет, Мне нужно разработать приложение, которое может записывать, воспроизводить, останавливать и перезаписывать аудио. Я сделал запись с помощью AvAudioRecorder:iOS - Перезаписать конкретную запись звука В определенное время

NSDictionary *audioSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithFloat: 44100],AVSampleRateKey, 
           [NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey, 
           [NSNumber numberWithInt: 2],AVNumberOfChannelsKey, 
           [NSNumber numberWithInt: AVAudioQualityLow], AVEncoderAudioQualityKey, 
           nil]; 

self.audioRecorder = [[AVAudioRecorder alloc] 
          initWithURL:audioFileURL 
          settings:audioSettings 
          error:nil]; 
[sliderTimer invalidate]; 
[self.audioRecorder record]; 
sliderTimer = [NSTimer scheduledTimerWithTimeInterval:0.2 
               target:self  
              selector:@selector(updateSlider) 
              userInfo:nil repeats:YES]; 

... и воспроизведения осуществляется с помощью AVplayer.

Но я не знаю, как перезаписать запись. Этот контур моей перезаписи реализации:

  1. Остановить запись
  2. Перемещение позиции ползунка к конкретной точке
  3. Затем начните запись.

Это функциональность для перезаписывания предыдущих записей.

Таким образом, в соответствии с шагами я написал

[self.audioRecorder stop]; 
[[self audioSlider] setValue:self.audioSlider.value animated:YES]; 
[self.audioRecorder recordAtTime:self.audioSlider.value forDuration:self.audioSlider.maximumValue]; 

... но он не работает. Вместо этого они полностью перезаписывают файл. Может ли любой орган помочь мне в этой критической ситуации.

ответ

0

Создать объект audioSession, его Шифрование до вас, хотите ли вы включить или выключить аудио сеанс вашего приложения (AVAudioSession)

audioSession = [AVAudioSession sharedInstance]; 
    [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 

    if(err) { 

     NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
     return; 
    } 

    [audioSession setActive:YES error:&err]; 

записи Начало процес,

-startRecording 
{ 

[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; 

    // We can use 44100, 32000, 24000, 16000 or 12000 depending on sound quality 
    [recordSetting setValue:[NSNumber numberWithFloat:32000.0] forKey:AVSampleRateKey]; 

    // We can use 2(if using additional h/w) or 1 (iPhone only has one microphone) 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 

mediaPath = [[NSString stringWithFormat:@"%@/myVoice.mp3", DOCUMENTS_FOLDER] retain];//where you want to save your recorded audio. 

    NSURL *url = [NSURL fileURLWithPath:mediaPath]; 
    err = nil; 
    NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err]; 

    recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err]; 

[recorder setDelegate:self]; 
    [recorder prepareToRecord]; 
    recorder.meteringEnabled = YES; 

    BOOL audioHWAvailable = audioSession.inputAvailable; 

    if (! audioHWAvailable) { 



      UIAlertView *cantRecordAlert = [[UIAlertView alloc] initWithTitle: @"Warning" 
                     message: @"Audio input hardware not available" 
                    delegate: nil cancelButtonTitle:@"OK" 
                  otherButtonTitles:nil]; 
      [cantRecordAlert show]; 
      [cantRecordAlert release]; 
      return; 
     } 
    [recorder record]; 
} 

запись Пауза.

-pauseRecording 
{ 
    [recorder pause]; 
    //[recorder updateMeters]; 
} 

Снова возобновите процесс ..audiosession сделает это за вас ...

-resumerecording 
{ 
    [recorder record]; 
    //[recorder updateMeters]; 
} 

EDIT: [рекордер updateMeters]; должен периодически вызываться, который обновляет средние и максимальные значения мощности для всех каналов аудиомагнитофона.

Вы можете использовать таймер для этого.

Например:

NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateAudioDisplay) userInfo:NULL repeats:YES]; 

-(void)updateAudioDisplay 
{ 
if (!recorder.isRecording) 
{ 
[recorder updateMeters]; 
} 
else 
{ 
if (recorder == nil) { 

    //recording is not yet started 
} 
else 
{ 
//paused 
} 
} 
} 

Вы можете скачать образец кода из here.

+0

Спасибо за ответ, но эти вещи я сделал ранее. в настоящее время я хочу перезаписать предыдущие записи, переместив положение слайдера – dineshprasanna

+0

@dineshprasanna - вы нашли какое-либо решение? если «да», пожалуйста, дайте мне руководство для реализации этого, я сделал то, что вы сделали прямо сейчас. Мне нужно реализовать концепцию перезаписи, я не знаю, как и с чего начать. благодаря – Karuppub

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