一 iOS本地錄音
- 準(zhǔn)備工作
NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc]init];
//設(shè)置錄音格式 AVFormatIDKey==kAudioFormatLinearPCM
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
//設(shè)置錄音采樣率(Hz) 如:AVSampleRateKey==8000/44100/96000(影響音頻的質(zhì)量)
[recordSetting setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey];
//錄音通道數(shù) 1 或 2
[recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
//線性采樣位數(shù) 8购岗、16、24、32
[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
//錄音的質(zhì)量
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/aaa"];
NSURL* url = [NSURL fileURLWithPath:path];
_recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:nil];
//準(zhǔn)備錄音
[_recorder prepareToRecord];
加上點(diǎn)擊事件之后(可設(shè)置按鈕次舌,可添加手勢(shì))
[_recorder record];-
點(diǎn)擊事件結(jié)束之后記得,停止錄音
[_recorder record];
將錄音文件寫(xiě)入目錄中,方便下次播放
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/aaa"];
NSURL* url = [NSURL fileURLWithPath:path];
NSData *data = [NSData dataWithContentsOfURL:url];
[data writeToFile:[NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp/aaa"] atomically:YES];
到此疙咸,錄音結(jié)束,但注意风科,如果要上傳錄音文件撒轮,因?yàn)閕OS默認(rèn)錄音格式不支持amr格式音頻文件乞旦。所以,此時(shí)上傳的是wav格式的MP3文件题山,文件比較大兰粉。
一般來(lái)說(shuō),上傳的時(shí)候顶瞳,我們會(huì)將音頻文件轉(zhuǎn)成amr格式的音樂(lè)文件玖姑,這樣,既支持安卓默認(rèn)播放格式慨菱,文件也會(huì)小很多焰络,服務(wù)端處理也方便。
后面會(huì)介紹如何轉(zhuǎn)換符喝。
二 播放本地音頻文件
- 之前錄音寫(xiě)入了文件中闪彼,且地址是
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"tmp/aaa"];
NSURL* url = [NSURL fileURLWithPath:path]; - 創(chuàng)建播放器,并播放
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[_player prepareToPlay];
[_player play];
三 本地錄音WAV轉(zhuǎn)AMR
- 首先我們需要使用一個(gè)三方庫(kù)DeviceHelper:VoiceConvert
使用VoiceConvert 錄音:
NSString* path = [NSHomeDirectory() stringByAppendingPathComponent:@"download/aaa"];
[[EMCDDeviceManager sharedInstance] asyncStartRecordingWithFileName:path completion:^(NSError *error)
{
if (error) {
NSLog(@"%@",NSEaseLocalizedString(@"message.startRecordFail", @"failure to start recording"));
}
}];
注意這里錄制的音頻文件可是是 AMR格式协饲,可直接上傳了畏腕。
使用VoiceConvert 停止錄音:
[[EMCDDeviceManager sharedInstance] asyncStopRecordingWithCompletion:^(NSString *recordPath, NSInteger aDuration, NSError *error) {
if (!error) {
//獲取到的錄音地址,自己存起來(lái)囱稽。也可以寫(xiě)入FileManage中郊尝,這里我寫(xiě)入了沙盒中。
dispatch_async(dispatch_get_main_queue(), ^{
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:recordPath forKey:@"music"];
[user setObject:[NSNumber numberWithInteger:aDuration] forKey:@"musicTime"];
});
}
}];
使用VoiceConvert 播放錄音:
[[EMCDDeviceManager sharedInstance] asyncPlayingWithPath:model.fileLocalPath completion:^(NSError *error) {
//這里做一些播放結(jié)束的其他操作
[[EaseMessageReadManager defaultManager] stopMessageAudioModel];
dispatch_async(dispatch_get_main_queue(), ^{
[[EMCDDeviceManager sharedInstance] disableProximitySensor];
});
}];
使用VoiceConvert 播放網(wǎng)絡(luò)下載的AMR錄音:
先將AMR轉(zhuǎn)成WAV格式战惊,因?yàn)閕OS 不支持播放AMR格式音頻文件流昏。
//獲取鏈接數(shù)據(jù)轉(zhuǎn)成Data
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[IimageUrlPre stringByAppendingString:[cur user_info_mp3]]]];
//把data寫(xiě)入文件中,取名AudioTempFile
[data writeToFile:[NSTemporaryDirectory() stringByAppendingPathComponent:@"AudioTempFile"] atomically:YES];
//將數(shù)據(jù)amr格式的Data轉(zhuǎn)成wav
[EMVoiceConverter amrToWav:[NSTemporaryDirectory() stringByAppendingPathComponent:@"AudioTempFile"] wavSavePath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"AudioTempConvertFile"]];
//讀取新的wav格式音頻文件
NSData* convertData = [NSData dataWithContentsOfFile:[NSTemporaryDirectory() stringByAppendingPathComponent:@"AudioTempConvertFile"]];
//初始化播放器吞获,播放converData
self.player = [[AVAudioPlayer alloc] initWithData:convertData error:NULL];
[self.player prepareToPlay];
[self.player play];
到此况凉,整個(gè)錄音功能的本地播放,上傳各拷,讀取網(wǎng)絡(luò)音頻刁绒。以及amr與wav互相轉(zhuǎn)換。 三方庫(kù)還有其他方法烤黍,知市,有興趣的朋友,可以下載之后速蕊,自己再研究嫂丙,下載的時(shí)候,請(qǐng)給Star规哲。謝謝