前言
比较喜欢的播客应用 pocketcast 前段时间出了一个 trim silence 功能, 就是播放音频的时候可以跳过其中静音的部分,目前除了 overcast,没有在其他同类应用中见过,这个功能对常听 podcast 的人很有用,可惜 pocketcast 不支持导入自己的音频,于是自己写了一个本地版的。
基本思路:
苹果自带录音软件在录制声音时,可以根据声音大小显示出声音图像的波动。在播放声音的时候,我们也可以根据声音的大小(分贝),来调整播放速度(采样率)。即在声音低于一定值的时候,进行快速播放,在大于该值时,使用正常速度播放。
核心代码如下:
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: 立体声 没有什么区别
if let averagePower = player?.averagePower(forChannel: 1),
averagePower < decibelMin {
/// rate 参数不要超过 8
player?.rate = 3
} else {
player?.rate = 1
}
}
网友评论