Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chrvadala/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.
https://github.com/chrvadala/music-beat-detector
beat-detection javascript mp3 music nodejs
Last synced: 14 days ago
JSON representation
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.
- Host: GitHub
- URL: https://github.com/chrvadala/music-beat-detector
- Owner: chrvadala
- License: mit
- Created: 2018-11-10T20:41:45.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-09-09T14:07:24.000Z (about 2 years ago)
- Last Synced: 2024-10-18T21:52:25.720Z (26 days ago)
- Topics: beat-detection, javascript, mp3, music, nodejs
- Language: JavaScript
- Homepage:
- Size: 573 KB
- Stars: 254
- Watchers: 4
- Forks: 25
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# 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](https://img.shields.io/npm/v/music-beat-detector.svg?maxAge=2592000?style=plastic)](https://www.npmjs.com/package/music-beat-detector)
[![Downloads](https://img.shields.io/npm/dm/music-beat-detector.svg)](https://www.npmjs.com/package/music-beat-detector)
[![Donate](https://img.shields.io/badge/donate-PayPal-green.svg)](https://www.paypal.me/chrvadala/25)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](https://github.com/chrvadala/music-beat-detector/blob/master/example-graph.png?raw=true)
## Example
```javascript
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](https://github.com/chrvadala/create-music-stream).
*Note: The beat detection performs better on mp3 files than YouTube video.*
```javascript
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 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
- [chrvadala](https://github.com/chrvadala) (author)