麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

用swift實現自動錄音器

2019-11-14 18:37:58
字體:
來源:轉載
供稿:網友

基本介紹

自動錄音一般錄音區別在:不用像微信那樣按下錄音-松手結束,而是根據說話聲音的大小自動判斷該錄音和該停止的點,然后可以做到結束錄音之后馬上播放出來。類似于達到會說話的湯姆貓那樣的效果。

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

準備工作

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

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

    // 錄音器    var recoder:AVAudioRecorder!    // 監聽器    var monitor:AVAudioRecorder!    // 播放器    var player:AVAudioPlayer!    // 定時器    var timer:NSTimer!    // 錄音器的URL    var recordURL:NSURL!    // 監聽器的URL    var 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);                

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

 

播放聲音

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

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

 

延展操作

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

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

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

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

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

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毛片免费看的 | 中文字幕在线观看二区 | 毛片在线免费视频 | 中文字幕在线播放一区 | 亚洲午夜久久久精品一区二区三区 | 国产精品三级a三级三级午夜 | 欧美成人综合视频 | 亚洲一区 国产精品 | 国产精品美女久久久久久不卡 | 在线播放视频一区二区 | 99精品视频在线看 | 激情黄页 | 国产精品一区在线看 | 男女一边摸一边做羞羞视频免费 | 国产毛片网站 | 日日草夜夜操 | 一级毛片播放 | 日本黄色免费观看视频 | 精品久久久久久成人av | 2021狠狠操 | 久草视频在线资源 | 黄色片网站免费在线观看 | 午夜小网站 | h视频在线免费看 | 久色亚洲 | 91福利免费观看 | 99ri在线| 中文字幕精品一区久久久久 | 国产精品99久久久久久大便 | 国产羞羞视频免费在线观看 | 一级大黄毛片免费观看 | 性 毛片 | a级在线 | 热re91久久精品国产99热 | 成人毛片100部 | 国产无区一区二区三麻豆 | 91久久久久久久 | 色99久久| 亚洲精品一区二区三区大胸 | 久久精品欧美电影 | 成人做爽爽爽爽免费国产软件 |