部分代码位置Github-VoiceDemo
Pre
与图片中默认的格式为PNG格式一样,iOS开发中声音的格式也有默认格式,为wav格式,本文中的产生的格式均为wav格式,其他格式则需要转换。有第三方的框架,进行转换成amr等格式
一、声音录制
要先引入AVFoundation的框架
#import <AVFoundation/AVFoundation.h>
self.voiceRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:self.voicePath] settings:self.recorderSetting error:nil];
if ([self.voiceRecorder prepareToRecord]){
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
//开始录音
[self.voiceRecorder record];
}
录制声音主要设置两个参数,Path和Setting
Path:声音文件录制后存储的路径
Setting:一个录制参数的字典,设置一些录制的必要的参数,需要进行调整到合适的值
_recorderSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithFloat: 8000.0],AVSampleRateKey, //采样率
[NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
[NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,//采样位数 默认 16
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,//通道的数目
nil];
AVAudioRecorder
在录制的时候可以暂停和恢复
暂停
- (void)pause; /* pause recording */
恢复/开始
- (void)record;
录制完成
- (void)stop;
二、声音播放
先引入MediaPlayer
#import <MediaPlayer/MediaPlayer.h>
@import AVFoundation;
@import AudioToolbox;
设置好录音文件路径就可以播放。注意:如果在播上一段录音,同时再点播放的话,两个声音会一起播放
if (_player) { // 如果正在播放上一段录音,则停止
[_player stop];
}
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
if (path&& [self fileSizeAtPath:path]) {
self.player = [self.player initWithContentsOfURL:[NSURL URLWithString:path] error:nil];
self.player.delegate = self;
[self.player play];
NSLog(@"开始播放");
}else{
NSLog(@"no voice");
}
声音播放也可以暂停恢复和停止
完整代码位置Github-VoiceDemo