Skip to content

Instantly share code, notes, and snippets.

@tonnylitao
Last active July 5, 2022 05:15
Show Gist options
  • Save tonnylitao/72203f84581e4b5319ed78d0202c680b to your computer and use it in GitHub Desktop.
Save tonnylitao/72203f84581e4b5319ed78d0202c680b to your computer and use it in GitHub Desktop.
Smart Speed like Overcast. Smart Speed means shorten the silence of audio for saving time.
do {
try audioPlayer = AVAudioPlayer(contentsOf: url)
audioPlayer.isMeteringEnabled = true
audioPlayer.enableRate = true
audioPlayer.prepareToPlay()
} catch let error as NSError {
print("audioPlayer error \(error.localizedDescription)")
}
audioPlayer.play()
//
timer = DispatchSource.makeTimerSource(queue: DispatchQueue(label: "com.domain.app.timer"))
timer.scheduleRepeating(deadline: .now(), interval: .milliseconds(100))
timer.setEventHandler { [unowned self] in
self.audioPlayer.updateMeters()
let peakPower = self.audioPlayer.peakPower(forChannel: 0)
var newRate: Float = 1.0
//increase rate if peak power is low
let silentPower: Float = -9
if peakPower < silentPower {
let k: Float = 0.06
newRate = 1 + min((silentPower - peakPower)*k, 1) //speed up (1 ... 2]
}
self.audioPlayer.rate = newRate
}
timer.resume()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment