日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AVFoundation之录音及播放

發(fā)布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AVFoundation之录音及播放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

錄音

在開始錄音前,要把會話方式設置成AVAudioSessionCategoryPlayAndRecord

//設置為播放和錄音狀態(tài),以便可以在錄制完之后播放錄音AVAudioSession *session = [AVAudioSession sharedInstance];NSError *setCategoryError = nil;[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError];NSError *activationError = nil; [session setActive:YES error:&activationError];

創(chuàng)建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是電話采樣率,對于一般錄音已經(jīng)夠了 [dicM setObject:@(8000) forKey:AVSampleRateKey]; //設置通道,這里采用單聲道 [dicM setObject:@(1) forKey:AVNumberOfChannelsKey]; //每個采樣點位數(shù),分為8、16、24、32 [dicM setObject:@(8) forKey:AVLinearPCMBitDepthKey]; //是否使用浮點數(shù)采樣 [dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey]; recorder = [[AVAudioRecorder alloc]initWithURL:recorderUrl settings:dicM error:&err]; recorder.delegate = self; 如果要監(jiān)控聲波則必須設置為YES recorder.meteringEnabled = YES; [recorder updateMeters]; if (err) { NSLog(@"創(chuàng)建錄音機對象時發(fā)生錯誤,錯誤信息:%@",err.localizedDescription); recorder = nil; return ; } [recorder prepareToRecord]; [recorder record]; }

錄制暫停

//暫停錄音,且可以繼續(xù)錄音[recorder pause];//[recorder record];

錄制結束

//錄制結束,錄音文件關閉,會執(zhí)行代理方法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(@”錄音出錯!”);

}

播放錄音

創(chuàng)建AVAudioPlayer,AVAudioPlayer播放本地音頻。

NSError *err =nil;player = [[AVAudioPlayer alloc]initWithContentsOfURL:recorderUrl error:&err];player.delegate = self;//設置音樂播放次數(shù) -1為一直循環(huán) player.numberOfLoops = 0; //開啟儀表計數(shù)功能 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); // //根據(jù)實際情況播放完成可以將會話關閉,其他音頻應用繼續(xù)播放 // [[AVAudioSession sharedInstance]setActive:NO error:nil]; AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); playBtn.selected = NO; }

轉載于:https://www.cnblogs.com/Free-Thinker/p/9582660.html

總結

以上是生活随笔為你收集整理的AVFoundation之录音及播放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。