The iOS recording time is limited to 30 seconds.
Static int myTime = 30;
@ Interface ViewController ()
@ Property (weak, nonatomic) IBOutlet UIImageView * imageView;
@ Property (weak, nonatomic) IBOutlet UIButton * btn;
@ Property (weak, nonatomic) IBOutlet UIButton * playBtn;
@ Property (nonatomic) BOOL isRecording;
-(IBAction) playPause :( id) sender;
@ Property (retain, nonatomic) AVAudioPlayer * avPlay;
@ Property (nonatomic, assign) NSInteger firstTouch;
@ Property (nonatomic, strong) nstmer * myTimer;
@ Property BOOL isOver;
@ End
@ Implementation ViewController
-(Void) viewDidLoad {
[Super viewDidLoad];
Self. isOver = NO;
Self. isRecording = NO;
[Self. playBtn setEnabled: NO];
UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc] initWithTarget: self action: @ selector (LongPressed :)];
[Self. btn addGestureRecognizer: longPress];
Self. playBtn. titleLabel. alpha = 0.5;
RecordedFile = [NSURL fileURLWithPath: [NSTemporaryDirectory () stringByAppendingString: @ "RecordedFile"];
AVAudioSession * session = [AVAudioSession sharedInstance];
NSError * sessionError;
[Session setCategory: AVAudioSessionCategoryPlayAndRecord error: & sessionError];
If (session = nil ){
NSLog (@ "Error creating session: % @", [sessionError description]);
} Else {
[Session setActive: YES error: nil];
}
}
-(Void) LongPressed :( UILongPressGestureRecognizer *) longGesture {// start timing with a long press
If (longGesture. state = UIGestureRecognizerStateBegan ){
Self. myTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0f target: self selector: @ selector (timerMove) userInfo: nil repeats: YES];
} Else if (longGesture. state = UIGestureRecognizerStateEnded) {// The End recording of a long press also ends.
[Self. myTimer invalidate];
Self. myTimer = nil;
// Stop recording
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "recording end" message: @ "up to 30 seconds allowed recording" delegate: self cancelButtonTitle: @ "know" otherButtonTitles: nil, nil];
Alert. delegate = self;
[Alert show];
Self. isRecording = NO;
[Self. btn setTitle: @ "End recording" forState: UIControlStateNormal];
[Self. playBtn setEnabled: YES];
[Self. playBtn. titleLabel setAlpha: 1];
[Recorder stop];
Recorder = nil;
NSError * playerError;
Player = [[AVAudioPlayer alloc] initWithContentsOfURL: recordedFile error: & playerError];
If (player = nil ){
NSLog (@ "ERror creating player: % @", [playerError description]);
}
Player. delegate = self;
}
}
-(Void) timerMove {
MyTime --; NSLog (@ "time: % d", myTime );
If (myTime = 0) {// stop recording
[_ MyTimer invalidate];
_ MyTimer = nil;
UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "recording end" message: @ "up to 30 seconds allowed recording" delegate: self cancelButtonTitle: @ "know" otherButtonTitles: nil, nil];
Alert. delegate = self;
[Alert show];
Self. isRecording = NO;
[Self. btn setTitle: @ "GCD End recording" forState: UIControlStateNormal];
[Self. playBtn setEnabled: YES];
[Self. playBtn. titleLabel setAlpha: 1];
[Recorder stop];
Recorder = nil;
NSError * playerError;
Player = [[AVAudioPlayer alloc] initWithContentsOfURL: recordedFile error: & playerError];
If (player = nil ){
NSLog (@ "ERror creating player: % @", [playerError description]);
}
Player. delegate = self;
} Else {
Self. isRecording = YES;
[Self. btn setTitle: @ "GCD recording" forState: UIControlStateNormal];
[Self. playBtn setEnabled: NO];
[Self. playBtn. titleLabel setAlpha: 0.5];
Recorder = [[AVAudioRecorder alloc] initWithURL: recordedFile settings: nil error: nil];
[Recorder prepareToRecord];
[Recorder record];
Player = nil;
}
}
-(Void) audioPlayerDidFinishPlaying :( AVAudioPlayer *) player successfully :( BOOL) flag {
[Self. playBtn setTitle: @ "play" forState: UIControlStateNormal];
}
-(IBAction) playPause :( id) sender {
If ([player isPlaying]) {
[Player pause];
[Self. playBtn setTitle: @ "play" forState: UIControlStateNormal];
} Else {
[Player play];
[Self. playBtn setTitle: @ "Stop playing" forState: UIControlStateNormal];
}
}
-(Void) didReceiveMemoryWarning {
[Super didReceiveMemoryWarning];
Recorder = nil;
Player = nil;
NSFileManager * fileManager = [NSFileManager defaultManager];
[FileManager removeItemAtURL: recordedFile error: nil];
RecordedFile = nil;
}
@ End