亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

用Swift編寫自動錄音器

2020-03-09 17:50:07
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了用Swift編寫自動錄音器,有需要的朋友可以借鑒下
 

用swift編寫自動錄音器,自動錄音和一般錄音的不同點在于:不需要像微信里面需要按下錄音然后松手結束,而是根據說話聲音的大小自動判斷該錄音和該停止的點,然后可以等到錄音結束之后馬上播放出來。此效果很像會說話的湯姆貓那樣。

在自動錄音的初始化階段需要建立兩個錄音對象,一個需要一直錄音充當監聽器的功能,另一個用來在需要的時刻錄音。具體流程大致如下

用Swift編寫自動錄音器

準備工作
這個項目使用swift寫的,設置的成員變量如下

如果你不是在董鉑然博客園看到本文請點擊查看原文。

// 錄音器var recoder:AVAudioRecorder!// 監聽器var monitor:AVAudioRecorder!// 播放器var player:AVAudioPlayer!// 定時器var timer:NSTimer!// 錄音器的URLvar recordURL:NSURL!// 監聽器的URLvar monitorURL:NSURL!

當然這些屬性不能直接敲出來需要先引入一個橋接文件并導入#import <AVFoundation/AVFoundation.h>

導入如果出現問題可以看下此文 : 怎么讓OC與swift混合開發

在程序啟動時應將錄音器,監聽器,定時器一同初始化。

在那之前需要先設置好音頻的保存質量,這其中會用到很多庫里自帶的key,AVSampleRateKey,AVFormatIDKey,AVNumberOfChannelsKey,AVEncoderAudioQualityKey這些key對應的值一般為double類型或int類型。一一解釋沒有必要,大概意思就是保存聲音的Hertz(類似于QQ音樂的無損和普通),轉化率,保存的聲道,聲音品質等等。有興趣的可以仔細去頭文件里研究研究。我就查了下所有參數的最高品質發現錄完之后大小也可以接受就用最高品質了。(但是微信說話那種發的應該是中下品質,省流量且時效性為主)

 

復制代碼代碼如下:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, error:nil)
var recoderSetting:NSDictionary = NSDictionary(objectsAndKeys: 14400.0,AVSampleRateKey,kAudioFormatAppleIMA4,AVFormatIDKey,2,AVNumberOfChannelsKey,0x7F,AVEncoderAudioQualityKey)

 


這其中有個參數應該是AVAudioQuality.Max類型但是swift不能識別,就直接查看里面的常量用十六進制填進去了。總的來說就是先用一個字典把所有的鍵值對都存好然后這個字典會用在后面實例化錄音器中的一個參數。

初始化錄音器的方法如下,監聽器完全相似只需要另改一個URL

 

復制代碼代碼如下:

// 實例化錄音器
var recordPath = NSTemporaryDirectory().stringByAppendingPathComponent("record.caf")
recordURL = NSURL.fileURLWithPath(recordPath)
recoder = AVAudioRecorder(URL: recordURL, settings:recoderSetting as [NSObject : AnyObject], error: nil)

 

 
開始錄音
核心功能是錄音,錄音的原理是監聽聲音分貝的大小,自己設置臨界點開啟和關閉錄音。

如果聲音一直很小不作處理。
如果聲音大了先判斷現在是否在錄音如果沒有則開始錄音。
如果聲音小了先判斷現在是否在錄音如果在錄音則停止錄音。

func updateTimer(){  // 更新測量器 self.monitor.updateMeters() // 獲得說話的分貝 var power = self.monitor.peakPowerForChannel(0);  println("-----》/(power)")  if (power > -30){ if(!self.recoder.recording){  println("開始錄音")  self.recoder.record() } }else { if(self.recoder.recording){  println("結束錄音")  self.recoder.stop()  self.play() }  }

嘗試的結果如下打印,其中數值就是一直監聽分貝數。極安靜的情況下是-160 嘈雜環境一般是-40起。

用Swift編寫自動錄音器

播放聲音
錄音完成后可以直接設置馬上播放聲音

func play(){ timer.invalidate() monitor.stop() // 刪除錄音緩存 monitor.deleteRecording() player = AVAudioPlayer(contentsOfURL: recordURL, error: nil) player.delegate = self player.play()}

上面圖中的定時器停止-監聽器停止-刪除監聽器的緩存 在這塊代碼中都有體現。這里建議設置一下代理,因為即使是播放一次在播放完成后也很可能會做一些額外操作,并且此項目的期望是能夠循環的錄音播放。即播放完打開定時器,監聽器重新開始總流程。

 
延展操作
代理遵守的是AVAudioPlayerDelegate 。并實現代理方法,在代理方法中調用之前開啟的方法

func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) { // 重新開啟定時器 self.setupTimer()}func setupTimer(){ self.monitor.record() self.timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "updateTimer", userInfo: nil, repeats: true)}

到此為止一個完整的錄音流程就結束了。

也可以做一些特殊操作就是類似于會說話的湯姆貓并不是把你說的話原話說出,而是對聲音做了一定的處理再說出的。如果想實現此功能需要再聲音播放前,先開啟聲音預播放,并且設置一些更改聲音的操作最后再播放以達到目的。大部分的屬性在修改前都需要打開一個BOOL值才能操作。舉例如下(把上面的play()換成下面代碼

 

復制代碼代碼如下:

// 允許更改速度
player.enableRate = true
// 設置速度
player.rate = 2
player.play()

 

這個屬性rate的取值范圍是0.5到2.0。原生的好像就找到這一個其他的改聲調等應該還需要引用第三方庫。

以上內容就是用Swift實現自動錄音的功能,希望大家能夠喜歡



注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影中文字幕在线| 国产精品十八以下禁看| 亚洲激情 国产| 色综合色综合久久综合频道88| 欧美夫妻性视频| 亚洲国产精品久久久| 国产精品香蕉在线观看| 91精品久久久久久久久久入口| 久久久久久久久久久成人| 亚洲国产精久久久久久| 亚洲第一男人天堂| 国产精品入口夜色视频大尺度| 亚洲成色777777在线观看影院| 欧美精品久久久久久久| 日本久久久久久| 欧美亚洲视频在线看网址| 久久天天躁夜夜躁狠狠躁2022| 日韩电影中文 亚洲精品乱码| 日韩亚洲精品电影| 久久久久久国产精品久久| 亚洲第一中文字幕在线观看| 日韩影视在线观看| 精品久久国产精品| 俺去了亚洲欧美日韩| 国产亚洲精品美女久久久久| 欧美一级视频免费在线观看| 欧美成人激情图片网| 久久免费高清视频| 欧美特黄级在线| 97在线精品国自产拍中文| 欧洲精品在线视频| 久久久久久久久中文字幕| 亚洲电影免费在线观看| 亚洲系列中文字幕| 久久男人av资源网站| 久久久精品国产一区二区| 5252色成人免费视频| 啊v视频在线一区二区三区| 欧美成人免费观看| 一区二区三区黄色| 在线性视频日韩欧美| 91精品国产777在线观看| 国产精品久久久久久久久久久不卡| 一本一本久久a久久精品综合小说| 一本大道亚洲视频| 成人在线视频福利| 国产成一区二区| 国产精品欧美日韩一区二区| 97国产精品视频| 欧美精品18videos性欧| 色综合久久悠悠| 中文字幕日韩av综合精品| 欧美激情亚洲综合一区| 91精品国产高清自在线看超| 不卡av在线网站| 国产精品99一区| 亚洲xxxx妇黄裸体| 2020久久国产精品| 成人国内精品久久久久一区| 精品亚洲国产视频| 97**国产露脸精品国产| 一区二区亚洲精品国产| 国产精品男人爽免费视频1| 日韩中文字幕亚洲| 久久综合九色九九| 欧美激情一区二区三区久久久| 日韩视频永久免费观看| 亚洲电影免费观看高清| 精品久久久999| 日韩av一卡二卡| 欧美性猛交xxxx免费看| 正在播放国产一区| 欧美亚洲另类视频| 91在线观看免费高清完整版在线观看| 热re91久久精品国99热蜜臀| 国产精品女主播视频| 精品国偷自产在线视频99| 久久天堂av综合合色| 国产视频精品在线| 日韩av免费在线观看| 欧美日韩精品国产| 国产一区二区三区日韩欧美| 69久久夜色精品国产7777| 黄色成人av网| 日韩中文在线视频| 亚洲第一视频在线观看| 亚洲最大激情中文字幕| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲成**性毛茸茸| 国产视频亚洲精品| 色综合色综合网色综合| 国产精品美乳在线观看| 国产一区二区三区在线| 国产精品一区二区久久精品| 亚洲无线码在线一区观看| 亚洲精品视频中文字幕| 97人人爽人人喊人人模波多| 在线看日韩欧美| 亚洲精品suv精品一区二区| 亚洲аv电影天堂网| 91九色综合久久| 亚洲影视九九影院在线观看| 国产精品久久久久国产a级| 欧美国产日韩二区| 精品久久久久久国产| 欧美一级高清免费播放| 日韩乱码在线视频| 欧美大片在线影院| 欧美成人免费在线视频| 高清一区二区三区日本久| 欧美性一区二区三区| 一区二区国产精品视频| 97色在线视频| 日韩精品中文字| 欧美成年人在线观看| 国产日韩欧美在线| 成人黄色短视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 欧美猛交免费看| 亚洲精选在线观看| 欧美最顶级的aⅴ艳星| 国内精品400部情侣激情| 91久久久久久久一区二区| 成人免费观看网址| 亚洲精品按摩视频| 久久精品小视频| 国产精品网红福利| 亚洲的天堂在线中文字幕| 精品中文字幕乱| 国产香蕉一区二区三区在线视频| 亚洲欧美综合另类中字| 亚洲a成v人在线观看| 亚洲情综合五月天| 亚洲欧美精品中文字幕在线| 久久亚洲精品中文字幕冲田杏梨| 色婷婷**av毛片一区| 日韩一区二区欧美| 国模精品系列视频| 欧美日韩国产精品专区| 日韩精品在线观看视频| 日韩精品欧美国产精品忘忧草| 久久久精品中文字幕| 国内精品久久久久久久久| 欧美激情在线一区| 国产日韩欧美电影在线观看| 久久精品国产69国产精品亚洲| 欧美成人精品xxx| 久久亚洲精品小早川怜子66| 亚洲人成网站777色婷婷| 一级做a爰片久久毛片美女图片| 久久久久久国产| 中文字幕亚洲色图| 亚洲第一精品夜夜躁人人躁| 美女扒开尿口让男人操亚洲视频网站| 欧美日韩国产成人高清视频| 亚洲精品国产精品乱码不99按摩| 精品电影在线观看| 91精品国产电影| 色婷婷综合久久久久| 精品福利在线视频| 欧美精品xxx| 粉嫩av一区二区三区免费野| 日韩成人中文电影| 成人久久久久爱|