AVFoundation之录音及播放
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                AVFoundation之录音及播放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                錄音
在開始錄音前,要把會話方式設置成AVAudioSessionCategoryPlayAndRecord
//設置為播放和錄音狀態,以便可以在錄制完之后播放錄音AVAudioSession *session = [AVAudioSession sharedInstance];NSError *setCategoryError = nil;[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError];NSError *activationError = nil; [session setActive:YES error:&activationError];創建AVAudioRecorder
給出錄音存放的地址,錄音的設置等
//錄音存放位置 -(NSURL *) getRecordAudioPath{NSString *urlStr=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];//#define kRecordAudioFile @"myRecord.caf"urlStr=[urlStr stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.caf",[[NSUUID UUID]UUIDString]]];NSLog(@"save file path at:%@",urlStr);NSURL *url=[NSURL fileURLWithPath:urlStr];return url; } - (void) startRecord{if (recorder.isRecording) {return;}recorderUrl = [self getRecordAudioPath]; NSError *err =nil; NSMutableDictionary *dicM=[NSMutableDictionary dictionary]; // [dicM setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; //設置錄音格式 [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey]; //設置錄音采樣率,8000是電話采樣率,對于一般錄音已經夠了 [dicM setObject:@(8000) forKey:AVSampleRateKey]; //設置通道,這里采用單聲道 [dicM setObject:@(1) forKey:AVNumberOfChannelsKey]; //每個采樣點位數,分為8、16、24、32 [dicM setObject:@(8) forKey:AVLinearPCMBitDepthKey]; //是否使用浮點數采樣 [dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey]; recorder = [[AVAudioRecorder alloc]initWithURL:recorderUrl settings:dicM error:&err]; recorder.delegate = self; 如果要監控聲波則必須設置為YES recorder.meteringEnabled = YES; [recorder updateMeters]; if (err) { NSLog(@"創建錄音機對象時發生錯誤,錯誤信息:%@",err.localizedDescription); recorder = nil; return ; } [recorder prepareToRecord]; [recorder record]; }錄制暫停
//暫停錄音,且可以繼續錄音[recorder pause];//[recorder record];錄制結束
//錄制結束,錄音文件關閉,會執行代理方法audioRecorderDidFinishRecording/* stops recording. closes the file. */[recorder stop];代理方法
pragma mark — AVAudioRecorderDelegate
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag 
 { 
 NSLog(@”錄音完成!”);
} 
 -(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder )recorder error:(NSError )error 
 { 
 NSLog(@”錄音出錯!”);
}
播放錄音
創建AVAudioPlayer,AVAudioPlayer播放本地音頻。
NSError *err =nil;player = [[AVAudioPlayer alloc]initWithContentsOfURL:recorderUrl error:&err];player.delegate = self;//設置音樂播放次數 -1為一直循環 player.numberOfLoops = 0; //開啟儀表計數功能 player.meteringEnabled = YES; [player updateMeters]; // player.enableRate = YES; //設置左右聲道 left:-1,center:0.0,right =1; player.pan = 0.0; //設置音量,其值0.0~1.0 player.volume = 0.6; [player prepareToPlay]; [player play];播放代理AVAudioPlayerDelegate
#pragma mark- AVAudioPlayerDelegate-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error {NSLog(@"player 播放失敗%@",error); } -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSLog(@"player:%@ 播放完成%d",player,flag); // //根據實際情況播放完成可以將會話關閉,其他音頻應用繼續播放 // [[AVAudioSession sharedInstance]setActive:NO error:nil]; AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); playBtn.selected = NO; }轉載于:https://www.cnblogs.com/Free-Thinker/p/9582660.html
總結
以上是生活随笔為你收集整理的AVFoundation之录音及播放的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: codeforces 1027 B -
- 下一篇: Integer的==问题
