music-beat-detector
music-beat-detector copied to clipboard
music-beat-detector is a library that analyzes a music stream and detects any beat. It can be used to control lights or any magic effect by the music wave.
music-beat-detector
music-beat-detector is a library that analyzes a music stream and detects any beat. It can be used to control lights or any magic effect by the music wave.
Bundled with this library there are three components:
-
MusicBeatDetector
is able to analyze any PCM 16bit Little Endian audio stream. It detects music peaks and realtime bpm. -
MusicBeatScheduler
is able to sync any detected peak with the listened audio. It's useful to control some lights or any other effect. -
MusicGraph
generates an SVG graph that displays every detected peak. It's useful to tune the peak detection.
Example
const fs = require('fs')
const Speaker = require('speaker')
const createMusicStream = require('create-music-stream') //read this https://github.com/chrvadala/create-music-stream#faq
const {MusicBeatDetector, MusicBeatScheduler, MusicGraph} = require('music-beat-detector')
const musicSource = process.argv[2] //get the first argument on cli
const musicGraph = new MusicGraph()
const musicBeatScheduler = new MusicBeatScheduler(pos => {
console.log(`peak at ${pos}ms`) // your music effect goes here
})
const musicBeatDetector = new MusicBeatDetector({
plotter: musicGraph.getPlotter(),
scheduler: musicBeatScheduler.getScheduler(),
})
createMusicStream(musicSource)
.pipe(musicBeatDetector.getAnalyzer())
.on('peak-detected', (pos, bpm) => console.log(`peak-detected at ${pos}ms, detected bpm ${bpm}`))
.on('end', () => {
fs.writeFileSync('graph.svg', musicGraph.getSVG())
console.log('end')
})
.pipe(new Speaker())
.on('open', () => musicBeatScheduler.start())
Usage
You can play any music sound supported by the library create-music-stream. Note: The beat detection performs better on mp3 files than YouTube video.
node example.js ./track.mp3
node example.js https://www.youtube.com/watch?v=qeMFqkcPYcg
node example.js https://www.youtube.com/watch?v=Zi_XLOBDo_Y
node example.js https://www.youtube.com/watch?v=n_GFN3a0yj0
node example.js https://www.youtube.com/watch?v=59Q_lhgGANc
Reference
new MusicBeatDetector(options)
Param | Default | Description |
---|---|---|
options.sensitivity | 0.6 | Response to the music wave (value from 0.5 to 1) |
options.plotter | - | Instance of MusicGraph |
options.scheduler | - | Instance of MusicBeatScheduler |
options.minThreashold | 1638 | Peaks under this level are ignored (usually they're noise) |
options.debugFilter | false | Stream the filtered music throught the lowpass filter (for debug purpose) |
-
getAnalyzer()
- Returns a transformer stream that analyze the music
new MusicBeatScheduler(effectCallback)
-
getScheduler()
- returns an instance used byMusicBeatDetector
-
start()
- start effects (usually controlled by speaker events)
new MusicGraph(secondWidth, secondHeight)
-
getPlotter()
- returns an instance used byMusicBeatDetector
-
getSVG()
- returns a string with the SVG that displays the analyzed music
Contributors
- chrvadala (author)