0.1.1 • Published 5 years ago

music-beat-detector v0.1.1

Weekly downloads
3
License
MIT
Repository
github
Last release
5 years ago

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.

npm Downloads Donate

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.

music-beat-detector

Example

const fs = require('fs')
const Speaker = require('speaker')
const createMusicStream = require('create-music-stream')
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 then YouTube videos.

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)

ParamDefaultDescription
options.sensitivity0.6Response to the music wave (value from 0.5 to 1)
options.plotter-Instance of MusicGraph
options.scheduler-Instance of MusicBeatScheduler
options.minThreashold1638Peaks under this level are ignored (usually they're noise)
options.debugFilterfalseStream 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 by MusicBeatDetector
  • start() - start effects (usually controlled by speaker events)

new MusicGraph(secondWidth, secondHeight)

  • getPlotter() - returns an instance used by MusicBeatDetector
  • getSVG() - returns a string with the SVG that displays the analyzed music

Contributors