2011-04-17 106 views
5

我查找了帖子標題的搜索條件,但唉..錄製音頻剪輯時設置時間限制?

我正在使用AVFoundation構建iPhone應用程序。

是否有正確的程序來限制將被錄製的音頻數量?我想最多10秒。

感謝您的幫助/諮詢/提示/指針..

回答

14

AVAudioRecorder有以下方法:

- (BOOL)recordForDuration:(NSTimeInterval)duration 

我認爲,將這樣的伎倆!

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

+0

完美..謝謝。 – 2011-04-18 08:28:59

+0

@DavidDelMonte是否爲你工作? – Monicka 2015-07-13 06:51:50

+0

那麼,它在4年前被回答和接受。我想它是有效的。我不知道現在是否一樣。爲什麼? – 2015-07-13 06:54:09

4

我通常不與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 
+0

謝謝你。我會等待和看到其他答覆,但我真的很感謝你的時間和精力。 – 2011-04-17 23:16:02

+0

順便說一句,你爲什麼不與AVFoundation合作?有沒有更好的方法?再次感謝.. – 2011-04-17 23:17:14

+0

不,這只是我通常不使用音頻。 – esqew 2011-04-19 00:20:51

0

這是從iOS編程食譜一個例子,我發現它是非常有用的和straigtforward。開始記錄後,您會以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"); 
}