前言
比較喜歡的播客應(yīng)用 pocketcast 前段時間出了一個 trim silence 功能政模, 就是播放音頻的時候可以跳過其中靜音的部分,目前除了 overcast耗式,沒有在其他同類應(yīng)用中見過,這個功能對常聽 podcast 的人很有用刊咳,可惜 pocketcast 不支持導(dǎo)入自己的音頻儡司,于是自己寫了一個本地版的。
基本思路:
蘋果自帶錄音軟件在錄制聲音時捕犬,可以根據(jù)聲音大小顯示出聲音圖像的波動。在播放聲音的時候探孝,我們也可以根據(jù)聲音的大小(分貝)誉裆,來調(diào)整播放速度(采樣率)顿颅。即在聲音低于一定值的時候足丢,進(jìn)行快速播放庇配,在大于該值時绍些,使用正常速度播放。
核心代碼如下:
var trimTimer: Timer?
var player: AVAudioPlayer?
let decibelMin: Float = -40
let updateTime = 0.05
func trimSilence(filePath: String) {
player = try? AVAudioPlayer(contentsOf: URL.init(string: filePath)!)
player?.isMeteringEnabled = true
player?.enableRate = true
player?.delegate = self
player?.play()
trimTimer = Timer.scheduledTimer(timeInterval: updateTime, target: self, selector: #selector(updateRate), userInfo: nil, repeats: true)
}
func updateRate() {
guard player?.isPlaying == true else { return }
player?.updateMeters()
/// channel 1: 單聲道 2: 立體聲 沒有什么區(qū)別
if let averagePower = player?.averagePower(forChannel: 1),
averagePower < decibelMin {
/// rate 參數(shù)不要超過 8
player?.rate = 3
} else {
player?.rate = 1
}
}