iOS 录音及播放 音波图波形
#pragma mark -錄音設置配置
- (void)initRecordConfig{
//錄音設置
NSMutableDictionary*recordSetting = [[NSMutableDictionaryalloc]init];
//設置錄音格式AVFormatIDKey==kAudioFormatLinearPCM
[recordSettingsetValue:[NSNumbernumberWithInt:kAudioFormatLinearPCM]forKey:AVFormatIDKey];
//設置錄音采樣率(Hz)如:AVSampleRateKey==8000/44100/96000(影響音頻的質(zhì)量),采樣率必須要設為11025才能使轉化成mp3格式后不會失真
[recordSettingsetValue:[NSNumbernumberWithFloat:11025.0]forKey:AVSampleRateKey];
//錄音通道數(shù)1或2,要轉換成mp3格式必須為雙通道
[recordSettingsetValue:[NSNumbernumberWithInt:2]forKey:AVNumberOfChannelsKey];
//線性采樣位數(shù)8、16、24、32
[recordSettingsetValue:[NSNumbernumberWithInt:16]forKey:AVLinearPCMBitDepthKey];
//錄音的質(zhì)量
[recordSettingsetValue:[NSNumbernumberWithInt:AVAudioQualityHigh]forKey:AVEncoderAudioQualityKey];
//存儲錄音文件
_recordUrl= [NSURLURLWithString:[NSTemporaryDirectory()stringByAppendingString:@"selfRecord.caf"]];
//初始化
_audioRecorder= [[AVAudioRecorderalloc]initWithURL:_recordUrlsettings:recordSettingerror:nil];
//開啟音量檢測
_audioRecorder.meteringEnabled=YES;
_audioRecorder.delegate=self;
}
錄音長按按鈕
#pragma mark- UILongPressGestureRecognizer
//添加手勢操作,長按按鈕
- (void)handSpeakBtnPressed:(UILongPressGestureRecognizer*)gestureRecognizer {
UIView*view= gestureRecognizer.view;
UIImageView*imageView = (UIImageView*)view.superview;
if(gestureRecognizer.state==UIGestureRecognizerStateBegan) {
if(self.typeIndex==2||self.typeIndex==4) {
[selfplayVoiceBtnAction];
return;
}
[imageViewstartAnimating];
[selfstartRecordVoice];
self.remindLabel.text=@"松開結束";
}
if(gestureRecognizer.state==UIGestureRecognizerStateEnded) {
[imageViewstopAnimating];
[selfstopRecordVoice];
self.remindLabel.text=@"按住說話";
}
}
#pragma mark --------開始錄音
- (void)startRecordVoice{
[self.sendkBtnsetUserInteractionEnabled:NO];
_audioSession= [AVAudioSessionsharedInstance];//得到AVAudioSession單例對象
[self.audioSessionsetCategory:AVAudioSessionCategoryPlayAndRecorderror:nil];//設置類別,表示該應用同時支持播放和錄音
[self.audioSessionsetActive:YESerror:nil];//啟動音頻會話管理,此時會阻斷后臺音樂的播放.
[self.audioRecorderprepareToRecord];
[self.audioRecorderpeakPowerForChannel:1.0];
[self.audioRecorderrecord];
self.second=0;
self.timer= [NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(timeAnim)userInfo:nilrepeats:YES];
}
#pragma mark -定時器
- (void)timeAnim{
if(self.second>=TOTAL_SECOND){
[selfstopRecordVoice];
[self.timerinvalidate];
}
self.second++;
if(self.second<10) {
self.timeLabel.textColor= [UIColorcolorWithHexString:@"818C9E"];
self.timeLabel.text= [NSStringstringWithFormat:@"0:0%ld",(long)self.second];
}else{
self.timeLabel.textColor= [UIColorcolorWithHexString:@"818C9E"];
self.timeLabel.text= [NSStringstringWithFormat:@"0:%ld",(long)self.second];
}
}
#pragma mark --------停止錄音
- (void)stopRecordVoice{
if(self.typeIndex!=1) {
return;
}
[self.recordBtnImageViewstopAnimating];
if(self.second<5) {
self.timeLabel.text=@"0:00";
[self.timerinvalidate];
[self.audioRecorderstop];//錄音停止
[self.audioSessionsetActive:NOerror:nil];//一定要在錄音停止以后再關閉音頻會話管理(否則會報錯),此時會延續(xù)后臺音樂播放
self.timeLabel.textColor= [UIColorcolorWithHexString:@"E6E8EB"];
[MBProgressHUDshowError:@"說話時間不得低于5秒"toView:self.view];
}else{
[selftransformCAFToMP3];
[self.timerinvalidate];
[self.audioRecorderstop];//錄音停止
[self.audioSessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil];//此處需要恢復設置回放標志,否則會導致其它播放聲音也會變小
[self.audioSessionsetActive:NOerror:nil];//一定要在錄音停止以后再關閉音頻會話管理(否則會報錯),此時會延續(xù)后臺音樂播放
if(self.playerView==nil){
NSString*videoStr = [NSTemporaryDirectory()stringByAppendingPathComponent:@"myselfRecord.mp3"];
NSURL*fileURL = [NSURLfileURLWithPath:videoStr];
AVURLAsset*asset = [AVURLAssetURLAssetWithURL:fileURLoptions:nil];
//錄音完的時候調(diào)用,顯示音波圖
self.playerView= [[SYWaveformPlayerViewalloc]initWithFrame:CGRectMake(0,116,self.view.frame.size.width,82)asset:assetcolor:[UIColorlightGrayColor]progressColor:[UIColorcolorWithHexString:@"818C9E"]];
[self.WaveformViewaddSubview:self.playerView];
}
self.timeLabel.font= [UIFontsystemFontOfSize:32];
[self.timeLabelsetFont:[UIFontfontWithName:@"Helvetica-Bold"size:32]];
self.timeLabel.frame=CGRectMake(0,221,WIDTH,32);
self.remindLabel.hidden=YES;
self.typeIndex=2;
self.recordBtnImageView.image=kImageWithName(@"btn_recording_play");
//基于現(xiàn)有的一個值,再進行平移
self.sendkBtn.hidden=NO;
//基于現(xiàn)有的一個值,再進行平移
self.delectVoiceBtn.hidden=NO;
self.delectVoiceBtn.alpha=0;
self.sendkBtn.alpha=0;
[UIViewanimateWithDuration:0.5animations:^{
self.delectVoiceBtn.transform=CGAffineTransformTranslate(self.delectVoiceBtn.transform, -(WIDTH/2-55),0);
self.sendkBtn.transform=CGAffineTransformTranslate(self.sendkBtn.transform,WIDTH/2-55,0);
self.delectVoiceBtn.alpha=1;
self.sendkBtn.alpha=1;
}];
}
}
總結
以上是生活随笔為你收集整理的iOS 录音及播放 音波图波形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘和机器学习
- 下一篇: 3GPP 5G协议下载地址