// ViewController.h
// 錄音
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
- (IBAction)clickRecordBtn:(id)sender;
- (IBAction)clickPauseBtn:(id)sender;
- (IBAction)clickResumeBtn:(id)sender;
- (IBAction)clickStopBtn:(id)sender;
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
@end
// ViewController.m
// 錄音
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()<AVAudioPlayerDelegate,AVAudioRecorderDelegate>
@property (nonatomic, strong) AVAudioPlayer *audioPlay; //音頻播放器
@property (nonatomic, strong) AVAudioRecorder *audioRecored; //音頻錄音機
@property (nonatomic, strong) NSTimer *timer;
@end
@implementation ViewController
-(NSTimer *)timer
{
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(aduioPowerChange) userInfo:nil repeats:YES];
}
return _timer;
}
#pragma mark 錄音聲波的狀態監測
-(void)aduioPowerChange
{
[self.audioRecored updateMeters];//更新測量值
float power= [self.audioRecored averagePowerForChannel:0];//取得第一個通道的音頻,注意音頻(聲音)強度範圍時-160到0 ,0代表最大輸入
NSLog(@".......... %f",power);
CGFloat progress=(1.0/50.0)*(power+50.0);
[_progressView setProgress:progress];
}
- (void)viewDidLoad
{
[super viewDidLoad];
//設置音頻會話
[self setAudioSession];
}
#pragma mark 設置音頻會話
-(void)setAudioSession
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
//設置爲播放和錄音的狀態,以便可以在錄製完成後播放
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];
}
#pragma mark 獲得音頻的URL
-(NSURL *)getAudioUrl
{
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *audioPath = [documentPath stringByAppendingPathComponent:@"test.wav"];
NSURL *url = [NSURL fileURLWithPath:audioPath];
return url;
}
#pragma mark 獲得音頻播放器
-(AVAudioPlayer *)audioPlay
{
if (!_audioPlay) {
//1. 獲得url路徑
NSURL *audioUrl = [self getAudioUrl];
NSError *error;
_audioPlay = [[AVAudioPlayer alloc] initWithContentsOfURL:audioUrl error:&error];
_audioPlay.volume = 1.0;
if (error) {
NSLog(@"創建音頻播放器的時候出現了錯誤!%@",[error localizedDescription]);
}
}
return _audioPlay;
}
#pragma mark 獲得錄音機對象
-(AVAudioRecorder *)audioRecored
{
if (!_audioRecored)
{
//1. 創建錄音後的音頻的保存路徑
NSURL *audioUrl = [self getAudioUrl];
//2. 錄音機的文件設置
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
//設置錄音的音頻格式
[dic setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
//設置錄音的採樣率 電話採樣率爲8000
[dic setObject:@(8000) forKey:AVSampleRateKey];
//設置通道
[dic setObject:@(1) forKey:AVNumberOfChannelsKey];
//採樣點位數 8、16、24、32
[dic setObject:@(8) forKey:AVLinearPCMBitDepthKey];
//是否採用浮點數採樣
[dic setObject:@(YES) forKey:AVLinearPCMIsFloatKey];
//其他設置......
//3. 創建錄音機
NSError *error;
_audioRecored = [[AVAudioRecorder alloc] initWithURL:audioUrl settings:dic error:&error];
if (error) {
NSLog(@"創建錄音機失敗");
}
_audioRecored.meteringEnabled=YES;//如果要監控聲波則必須設置爲YES
_audioRecored.delegate = self;
}
return _audioRecored;
}
#pragma mark 點擊錄音按鈕
- (IBAction)clickRecordBtn:(id)sender {
if (!self.audioRecored.isRecording) {
[_audioPlay stop];
[_audioRecored record];
self.timer.fireDate = [NSDate distantPast];
}
}
#pragma mark 點擊暫停按鈕
- (IBAction)clickPauseBtn:(id)sender {
if (self.audioRecored.isRecording) {
[_audioRecored pause];
self.timer.fireDate = [NSDate distantFuture];
}
}
#pragma mark 點擊恢復按鈕
- (IBAction)clickResumeBtn:(id)sender {
[self clickRecordBtn:nil];
}
#pragma mark 點擊停止按鈕
- (IBAction)clickStopBtn:(id)sender {
[_audioRecored stop];
self.timer.fireDate = [NSDate distantFuture];
}
#pragma mark 協議中方法,錄音結束
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
NSLog(@"錄音結束");
if (!self.audioPlay.isPlaying) {
[_audioPlay play];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
ios錄音小操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.