Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.62 KB | None | 0 0
  1. /**
  2. * @param silencePointPercent (float) Percent into duration to set the point
  3. */
  4. function silencePoints(silenceRanges, silencePointPercent) {
  5. let silencePoints = []
  6. for (let i = 0; i < silenceRanges.length; i++) {
  7. let range = silenceRanges[i];
  8. let point = range[0] + range[1] * silencePointPercent
  9. silencePoints.push(point)
  10. }
  11. return silencePoints
  12. }
  13.  
  14. /**
  15. * Input: PCM data list
  16. * Output: List of [silence start offset (sec), duration (sec)]
  17. */
  18. function silenceRanges(pcmData, sampleRate) {
  19. const silenceThreshold = .1
  20.  
  21. let silenceStartIndex = -1
  22. let silenceRanges = []
  23. for (let i = 0; i <= pcmData.length; i++) {
  24. let pcmVal = (i < pcmData.length ? pcmData[i] : silenceThreshold)
  25. if (pcmVal < silenceThreshold) {
  26. if (silenceStartIndex === -1) {
  27. silenceStartIndex = i
  28. }
  29. } else { // pcmVal >= silenceThreshold
  30. if (silenceStartIndex !== -1) {
  31. silenceStartOffset = silenceStartIndex / sampleRate
  32. silenceDurationIndexCount = i - silenceStartIndex
  33. silenceDuration = silenceDurationIndexCount / sampleRate
  34. silenceRanges.push([silenceStartOffset, silenceDuration])
  35. silenceStartIndex = -1
  36. }
  37. }
  38. }
  39. return silenceRanges
  40. }
  41.  
  42. const input = [
  43. 0.1, 0.1, 0.1, 0.1, 0.1,
  44. 0, 0, 0, 0, 0,
  45. 0.1, 0.1, 0.1, 0.1, 0.1,
  46. 0, 0, 0, 0, 0,
  47. 0, 0, 0, 0, 0,
  48. 0.1, 0.1, 0.1, 0.1, 0.1,
  49. 0.1, 0.1, 0.1, 0.1, 0.1,
  50. 0.1, 0.1, 0.1, 0.1, 0.1,
  51. 0, 0, 0, 0, 0,
  52. 0, 0, 0, 0, 0,
  53. ]
  54.  
  55. let ranges = silenceRanges(input, 1)
  56. let points = silencePoints(ranges, .5)
  57. console.log(`ranges:`, ranges)
  58. console.log(`points:`, points)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement