1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > iOS 仿微信发送语音消息按钮 - 语音录音机(二)

iOS 仿微信发送语音消息按钮 - 语音录音机(二)

时间:2018-12-23 22:12:47

相关推荐

iOS 仿微信发送语音消息按钮 - 语音录音机(二)

#Part 2 :语音录音机

其实网上很多录音的文章,这里主要说明的是网络传输音频相关的内容.

基本流程就是录音结束后获取一个wav格式的录音,转换为amr格式文件,转成NSData格式,用于传输.

amr格式的文件大小是wav格式文件大小的十分之一左右,更适合传输.

先创建两个音频文件到沙盒的Tmp文件夹中(Tmp存储临时数据,iCloud 不会备份这些文件)

//创建缓存录音文件到TmpNSString *wavRecordFilePath = [NSTemporaryDirectory()stringByAppendingPathComponent:@"WAVtemporaryRadio.wav"];NSString *amrRecordFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"AMRtemporaryRadio.amr"];if (![[NSFileManager defaultManager]fileExistsAtPath:wavRecordFilePath]) {[[NSData data] writeToFile:wavRecordFilePath atomically:YES];}if (![[NSFileManager defaultManager]fileExistsAtPath:amrRecordFilePath]) {[[NSData data] writeToFile:amrRecordFilePath atomically:YES];}复制代码

WAVtemporaryRadio.wav文件是录音后的临时存储文件

AMRtemporaryRadio.amr文件是用于网络传输的文件

懒加载AVAudioRecorder

- (AVAudioRecorder *)audioRecorder{if (!_audioRecorder) {//暂存录音文件路径NSString *wavRecordFilePath = [NSTemporaryDirectory()stringByAppendingPathComponent:@"WAVtemporaryRadio.wav"];NSDictionary *recordSetting = @{ AVSampleRateKey : @8000.0, // 采样率AVFormatIDKey: @(kAudioFormatLinearPCM),// 音频格式AVLinearPCMBitDepthKey : @16,// 采样位数 默认 16AVNumberOfChannelsKey : @1 // 通道的数目};_audioRecorder = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:wavRecordFilePath] settings:recordSetting error:nil];_audioRecorder.delegate = self;_audioRecorder.meteringEnabled = YES;}return _audioRecorder;}复制代码

开始录音

[self.audioRecorder prepareToRecord];[self.audioRecorder record];复制代码

开启音频值测量

double lowPassResults = pow(10, (0.05 * [_self->_audioRecorder peakPowerForChannel:0]));复制代码

完成录音后,会进入到AVAudioRecorder的代理方法中,(wave_file_to_amr_file类demo中会有)

- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{//暂存录音文件路径NSString *wavRecordFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"WAVtemporaryRadio.wav"];NSString *amrRecordFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"AMRtemporaryRadio.amr"];//重点:把wav录音文件转换成amr文件,用于网络传输.amr文件大小是wav文件的十分之一左右wave_file_to_amr_file([wavRecordFilePath cStringUsingEncoding:NSUTF8StringEncoding],[amrRecordFilePath cStringUsingEncoding:NSUTF8StringEncoding], 1, 16);//返回amr音频文件Data,用于传输或存储NSData *cacheAudioData = [NSData dataWithContentsOfFile:amrRecordFilePath];if ([self.delegate respondsToSelector:@selector(audioRecorderDidFinishRecordingWithData:)]) {[self.delegate audioRecorderDidFinishRecordingWithData:cacheAudioData];}}复制代码

Demo 地址 :/XL-Andrew/C…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。