Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @param silencePointPercent (float) Percent into duration to set the point
- */
- function silencePoints(silenceRanges, silencePointPercent) {
- let silencePoints = []
- for (let i = 0; i < silenceRanges.length; i++) {
- let range = silenceRanges[i];
- let point = range[0] + range[1] * silencePointPercent
- silencePoints.push(point)
- }
- return silencePoints
- }
- /**
- * Input: PCM data list
- * Output: List of [silence start offset (sec), duration (sec)]
- */
- function silenceRanges(pcmData, sampleRate) {
- const silenceThreshold = .1
- let silenceStartIndex = -1
- let silenceRanges = []
- for (let i = 0; i <= pcmData.length; i++) {
- let pcmVal = (i < pcmData.length ? pcmData[i] : silenceThreshold)
- if (pcmVal < silenceThreshold) {
- if (silenceStartIndex === -1) {
- silenceStartIndex = i
- }
- } else { // pcmVal >= silenceThreshold
- if (silenceStartIndex !== -1) {
- silenceStartOffset = silenceStartIndex / sampleRate
- silenceDurationIndexCount = i - silenceStartIndex
- silenceDuration = silenceDurationIndexCount / sampleRate
- silenceRanges.push([silenceStartOffset, silenceDuration])
- silenceStartIndex = -1
- }
- }
- }
- return silenceRanges
- }
- const input = [
- 0.1, 0.1, 0.1, 0.1, 0.1,
- 0, 0, 0, 0, 0,
- 0.1, 0.1, 0.1, 0.1, 0.1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1,
- 0.1, 0.1, 0.1, 0.1, 0.1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- ]
- let ranges = silenceRanges(input, 1)
- let points = silencePoints(ranges, .5)
- console.log(`ranges:`, ranges)
- console.log(`points:`, points)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement