Published
Edited
May 10, 2020
9 stars
Insert cell
Insert cell
Insert cell
Insert cell
viewof sensitivity = slider({ value: .2 })
Insert cell
vlData = {
const vlData = []
const windowSize = sampleRate / 100
let movingSum = 0
let maxValue = 0
let maxSample
for (let sample = 0; sample < 55000; sample++) {
const value = rawData[sample]
vlData.push({sample, value})
movingSum += Math.abs(value)
if (sample < windowSize) {
continue
}
movingSum -= Math.abs(vlData[sample - windowSize].value)
const avg = movingSum / windowSize
if (avg > maxValue) {
maxValue = avg
maxSample = sample - windowSize / 2
}
vlData[sample - windowSize / 2].avg = avg
if (sample % samplesPerTone == samplesPerTone - 1) {
let beatSample
for (beatSample = maxSample; beatSample > 0; beatSample--) {
if (Math.abs(vlData[beatSample].avg - maxValue) > sensitivity * maxValue) {
break
}
}
vlData[beatSample].beat = true
maxValue = 0
maxSample = null
}
}
return vlData
}
Insert cell
Insert cell
sampleRate = 48000
Insert cell
samplesPerTone = Math.floor(sampleRate * 60 / 105)
Insert cell
rawData = await FileAttachment("lowpassdump.json").json()
Insert cell
import {vl} from '@vega/vega-lite-api'
Insert cell
import {slider} from '@jashkenas/inputs'
Insert cell
_ = require('lodash')
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more