AVFoundation을 이용한 녹음 재생하기
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
//녹음버튼 + 멈춤
@property (strong, nonatomic) IBOutlet UIButton *recordPauseButton;
//정지 버튼
@property (strong, nonatomic) IBOutlet UIButton *stopButton;
//플레이 버튼
@property (strong, nonatomic) IBOutlet UIButton *playButton;
//녹음 버튼 + 멈춤버튼 눌렀을때
- (IBAction)recordPauseTapped:(id)sender;
//정지버튼 눌렀을때
- (IBAction)stopTapped:(id)sender;
//작동버튼 눌렀을때
- (IBAction)playTapped:(id)sender;
@end
.m
/*
1.라이브러리 추가
2. 라이브러리 임포트
3.델리게이트 프로토콜 상속
4. url지정 , 오디오세션 설정, 오디오 레코더 초기상태 구현
5. 코드작성
*/
#import <AVFoundation/AVFoundation.h>
#import "ViewController.h"
@interface ViewController () <AVAudioRecorderDelegate,AVAudioPlayerDelegate>
{
AVAudioRecorder *recorder;
AVAudioPlayer *player;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//앱이 로드될때 플레이/스탑 버튼 사용불가
[self.stopButton setEnabled:NO];
[self.playButton setEnabled:NO];
//오디오 파일 셋
//녹음을 저장하기 위한 파일 url
NSArray *pathComponents = [NSArray arrayWithObjects:
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], @"MyAudioMemo.m4a",
nil];
NSURL *outputFileURL = [NSURL fileURLWithPathComponents:pathComponents];
//오디오 세션 셋업
AVAudioSession *session = [AVAudioSession sharedInstance];
//오디오 입력과 출력 모두 허용
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
//레코더 정의
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc]init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
//레코더 초기화 + 준비
recorder = [[AVAudioRecorder alloc] initWithURL:outputFileURL settings:recordSetting error:NULL];
recorder.delegate = self;
recorder.meteringEnabled = YES;
[recorder prepareToRecord];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//녹음
- (IBAction)recordPauseTapped:(id)sender {
//플레이어가 작동 중이면 멈춤
if (player.playing) {
[player stop];
}
//레코딩 상태가 아니면
if (!recorder.recording) {
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
//레코드 시작
[recorder record];
[_recordPauseButton setTitle:@"정지" forState:UIControlStateNormal];
}else{
[recorder pause];
[_recordPauseButton setTitle:@"녹음" forState:UIControlStateNormal];
}
[_stopButton setEnabled:YES];
[_playButton setEnabled:NO];
}
//정지
- (IBAction)stopTapped:(id)sender {
[recorder stop];
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setActive:NO error:nil];
}
//작동
- (IBAction)playTapped:(id)sender {
if (!recorder.recording) {
player = [[AVAudioPlayer alloc]initWithContentsOfURL:recorder.url error:nil];
[player setDelegate:self];
[player play];
}
}
//델리게이트 메소드 - 녹음 완료
//녹음이 끝나면 녹음을 다시 할수 있게 녹음 버튼 활성화 + 플레이 버튼 활성화
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{
[_recordPauseButton setTitle:@"녹음" forState:UIControlStateNormal];
[_stopButton setEnabled:NO];
[_playButton setEnabled:YES];
}
//델리게이트 메소드 - 플레이완료
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"완료!"
message:@"녹음파일 재생완료!"
delegate:nil cancelButtonTitle:@"확인"
otherButtonTitles:nil];
[alert show];
}
@end
'ios 뽀개기 > objective-c' 카테고리의 다른 글
ios audiosessionqueue 파일 재생 시간 구하는 두가지 방법 (0) | 2018.12.19 |
---|---|
coreAudio recording (0) | 2018.12.19 |
이미지 자르기 + 제스쳐 + transparentview 예제 (0) | 2018.12.14 |
objective c block에 대한 이해 (0) | 2018.12.10 |
UIImagePickerController를 이용한 비디오 (0) | 2018.12.07 |
댓글