作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:812157648,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
導入框架:
#import <AVFoundation/AVFoundation.h>
聲明全局變量:
@interface ViewController ()<AVAudioRecorderDelegate>
{
AVAudioRecorder *audioRecorder;
}
@end
在ViewDidLoad中:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(100, 100, 100, 100);
[button setTitle:@ "TICK" forState:UIControlStateNormal];
button.backgroundColor = [UIColor brownColor];
[button addTarget:self action:@selector(startAudioRecoder:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
按鈕的觸發事件:
sender.selected = !sender.selected;
if (sender.selected != YES) {
[_audioRecorder stop];
return ;
}
// URL是本地的URL AVAudioRecorder需要一個存儲的路徑
NSString *name = [NSString stringWithFormat:@ "%d.aiff" ,( int )[NSDate date].timeIntervalSince1970];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:name];
NSError *error;
// 錄音機 初始化
_audioRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:path] settings:@{AVNumberOfChannelsKey:@2,AVSampleRateKey:@44100,AVLinearPCMBitDepthKey:@32,AVEncoderAudioQualityKey:@(AVAudioQualityMax),AVEncoderBitRateKey:@128000} error:&error];
[_audioRecorder prepareToRecord];
[_audioRecorder record];
_audioRecorder.delegate = self;
/*
1.AVNumberOfChannelsKey 通道數 通常為雙聲道 值2
2.AVSampleRateKey 采樣率 單位HZ 通常設置成44100 也就是44.1k
3.AVLinearPCMBitDepthKey 比特率 8 16 24 32
4.AVEncoderAudioQualityKey 聲音質量
① AVAudioQualityMin = 0, 最小的質量
② AVAudioQualityLow = 0x20, 比較低的質量
③ AVAudioQualityMedium = 0x40, 中間的質量
④ AVAudioQualityHigh = 0x60,高的質量
⑤ AVAudioQualityMax = 0x7F 最好的質量
5.AVEncoderBitRateKey 音頻編碼的比特率 單位Kbps 傳輸的速率 一般設置128000 也就是128kbps
*/
NSLog(@ "%@" ,path);
代理方法:
- ( void )audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:( BOOL )flag{
NSLog(@ "錄音結束" );
// 文件操作的類
NSFileManager *manger = [NSFileManager defaultManager];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// 獲得當前文件的所有子文件subpathsAtPath
NSArray *pathlList = [manger subpathsAtPath:path];
// 需要只獲得錄音文件
NSMutableArray *audioPathList = [NSMutableArray array];
// 遍歷所有這個文件夾下的子文件
for (NSString *audioPath in pathlList) {
// 通過對比文件的延展名(擴展名 尾綴) 來區分是不是錄音文件
if ([audioPath.pathExtension isEqualToString:@ "aiff" ]) {
// 把篩選出來的文件放到數組中
[audioPathList addObject:audioPath];
}
}
NSLog(@ "%@" ,audioPathList);
}
原文作者:復雜化
原文地址:https://blog.csdn.net/m0_46110288/article/details/110572498?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160743835219725211951213%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160743835219725211951213&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-6-110572498.pc_search_result_cache&utm_term=iOS%E5%BC%80%E5%8F%91