Установка ограничения по времени при записи аудиоклипа? - PullRequest
5 голосов
/ 17 апреля 2011

Я искал условия поиска по строкам заголовка сообщения, но увы ..

Я создаю приложение для iPhone с использованием AVFoundation.

Существует ли правильная процедура для ограничения суммыаудио, которое будет записано?Я хотел бы максимум 10 секунд.

Спасибо за любую помощь / совет / советы / указатели ..

Ответы [ 3 ]

14 голосов
/ 18 апреля 2011

AVAudioRecorder имеет следующий метод:

- (BOOL)recordForDuration:(NSTimeInterval)duration

Я думаю, что все получится!

http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/doc/uid/TP40008238

4 голосов
/ 18 апреля 2011

Обычно я не работаю с AVFoundation, поэтому я не знаю точных названий методов / классов (я заполнил свое собственное), но обходной путь для этого будет иметь повторяющееся NSTimer начало, когда запись изначально начинается. Примерно так:

@interface blahblah
...
int rec_time;
NSTimer *timer;
Recorder *recorder;
...
@end

@implementation blahblah
...
-(void)beginRecording {
    [recorder startRecording];
    timer = [NSTimer scheduledTimerWithTimeInterval:1.0
    target:self
    selector:@selector(recordingTime)
    userInfo:nil
    repeats:YES];
}

-(int)recordingTime {
    if (rec_time >= 10) {
        [recorder endRecording];
        [timer invalidate];
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"You recorded for too long!"...;
        return;
    }

    rec_time = rec_time + 1;

}
...
@end
1 голос
/ 12 июля 2015

Это пример из поваренной книги по программированию на iOS, я нашел ее очень полезной и прямой. После начала записи вы вызываете функцию остановки с задержкой в ​​10 секунд, когда она останавливает запись, она автоматически вызывает метод делегата audioRecorderDidFinishRecording:successfully.

@implementation ViewController{

   AVAudioRecorder *recorder;
   AVAudioPlayer *player;
}   

- (IBAction)recordPauseTapped:(id)sender {
// Stop the audio player before recording
   if (player.playing) {
     [player stop];
   }

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

      // Start recording
      [recorder record];

     [recordPauseButton setBackgroundImage:recordingImage forState:UIControlStateNormal];
     [self performSelector:@selector(stopRecording)
               withObject:self afterDelay:10.0f];

     } else {
       [recorder stop];

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

- (void)stopRecording {
  [recorder stop];

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

 - (void) audioRecorderDidFinishRecording:(AVAudioRecorder *)avrecorder    successfully:(BOOL)flag{
    NSLog(@"after 10 sec");
}
...