Skip to content

Instantly share code, notes, and snippets.

@qgustavor
Created May 10, 2020 17:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qgustavor/90add651badf21a4db941e66a559aa62 to your computer and use it in GitHub Desktop.
Save qgustavor/90add651badf21a4db941e66a559aa62 to your computer and use it in GitHub Desktop.
Jumpcutter, like carykh's.
(function () {
let a = new AudioContext
let V = document.querySelector('video')
let v = a.createMediaElementSource(V)
let SP = a.createScriptProcessor(256, 1, 1)
let counter = 0
let scriptName = 'JUMPCUTTER'
window[scriptName] = {
threshold: 0.001,
silentSpeed: 4,
talkingSpeed: 1.5,
silentDebounceLimit: 100,
talkingDebounceLimit: 3,
volumeGain: 1,
delay: 0
}
let isTalking = true
SP.onaudioprocess = evt => {
const scriptInfo = window[scriptName]
const threshold = scriptInfo.threshold
const silentSpeed = scriptInfo.silentSpeed
const talkingSpeed = scriptInfo.talkingSpeed
const silentDebounceLimit = scriptInfo.silentDebounceLimit
const talkingDebounceLimit = scriptInfo.talkingDebounceLimit
if (V.paused) {
counter = -100
if (V.playbackRate !== talkingSpeed) {
V.playbackRate = talkingSpeed
}
return
}
let data = evt.inputBuffer.getChannelData(0)
let total = 0
let len = data.length
for (let i = 0; i < len; i++) total += Math.abs(data[i])
total = total / len
isTalking = total > threshold
const speed = isTalking ? talkingSpeed : silentSpeed
if (V.playbackRate !== speed) {
counter++
} else if (isTalking) {
counter = 0
}
const debounceLimit = isTalking ? talkingDebounceLimit : silentDebounceLimit
if (counter > debounceLimit){
if (V.playbackRate !== speed) {
console.log('New speed:', speed)
V.playbackRate = speed
}
counter = 0
}
g.gain.value = scriptInfo.volumeGain
d.delayTime.value = scriptInfo.delay
}
d = a.createDelay(30)
v.connect(d)
g = a.createGain()
d.connect(g)
g.connect(a.destination)
v.connect(SP)
SP.connect(a.destination)
}())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment