• Stars
    star
    559
  • Rank 79,412 (Top 2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 8 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A beat detection utility which is using the Web Audio API.

logo

web-audio-beat-detector

A beat detection utility which is using the Web Audio API.

version

This module is based on the technique explained by Joe Sullivan in his article Beat Detection Using JavaScript and the Web Audio API. It retrieves the beats as BPM of a given AudioBuffer. The algorithm used is not as complex (and expensive to compute) as many others. But it yields surprisingly good results especially for electronic music.

Usage

The web-audio-beat-detector module is available on npm and can be installed as usual.

npm install web-audio-beat-detector

You can then import its public function analyze() like this:

import { analyze } from 'web-audio-beat-detector';

The analyze() function expects an AudioBuffer as its first parameter and it returns a Promise which eventually resolves with the tempo of that buffer as a number. An example usage might look like this:

analyze(audioBuffer)
    .then((tempo) => {
        // the tempo could be analyzed
    })
    .catch((err) => {
        // something went wrong
    });

Additionally you can also import the guess() function like this:

import { guess } from 'web-audio-beat-detector';

The guess() function expects an AudioBuffer as well and also returns a Promise. The Promise will resolve with an object containing the estimated BPM (the rounded tempo) and the offset of the first beat in seconds.

guess(audioBuffer)
    .then(({ bpm, offset, tempo }) => {
        // the bpm and offset could be guessed
        // the tempo is the same as the one returned by analyze()
    })
    .catch((err) => {
        // something went wrong
    });

analyze() and guess() do both support offset and duration as optional arguments. When specified these two values are used to select only a part of the given AudioBuffer. There usage is the same as described in the documentation of the AudioBufferSourceNode.start() method.

Acknowledgement

A more comprehensive implementation has been done by José M. Pérez. It comes with an UI to search for tracks on Spotify which can then be analyzed. He also wrote a blog post (Detecting tempo of a song using browser's Audio API) about it.

More Repositories

1

standardized-audio-context

A cross-browser wrapper for the Web Audio API which aims to closely follow the standard.
JavaScript
662
star
2

worker-timers

A replacement for setInterval() and setTimeout() which works in unfocused windows.
JavaScript
566
star
3

extendable-media-recorder

An extendable drop-in replacement for the native MediaRecorder.
JavaScript
253
star
4

angular-prerender

A command line tool to prerender Angular Apps.
JavaScript
125
star
5

midi-json-parser

This module is parsing midi files into a human-readable JSON object.
JavaScript
111
star
6

subscribable-things

A collection of reactive wrappers for various browser APIs.
JavaScript
42
star
7

json-midi-encoder

This module encodes a JSON representation of MIDI data into a binary MIDI file.
JavaScript
40
star
8

timing-object

An implementation of the timing object specification.
JavaScript
37
star
9

extendable-media-recorder-wav-encoder

A Wave file encoder for the extendable-media-recorder package.
JavaScript
36
star
10

timingsrc

A library to synchronize a MediaElement with a TimingObject.
JavaScript
31
star
11

timing-provider

An implementation of the timing provider specification.
JavaScript
30
star
12

midi-player

A MIDI player which sends MIDI messages to connected devices.
JavaScript
27
star
13

rxjs-broker

An RxJS message broker for WebRTC DataChannels and WebSockets.
JavaScript
24
star
14

dynamo-converters

A collection of converter functions to get good old JavaScript key/value objects into a DynamoDB friendly schema and back again.
JavaScript
24
star
15

recorder-audio-worklet

This module provides a loader for the RecorderAudioWorkletProcessor and the corresponding RecorderAudioWorkletNode.
JavaScript
24
star
16

angular-audio-context

An Angular wrapper for the Web Audio API's AudioContext.
JavaScript
21
star
17

standardized-audio-context-mock

A mocked version of the standardized-audio-context module.
JavaScript
20
star
18

limiter-audio-worklet

This module provides a loader for the LimiterAudioWorkletProcessor and the corresponding LimiterAudioWorkletNode.
JavaScript
17
star
19

audio-context-timers

A replacement for setInterval() and setTimeout() which works in unfocused windows.
JavaScript
15
star
20

timing-provider-server

A command line tool to spin up a server which can be used with the timing-provider.
JavaScript
15
star
21

video-synchronization-demo

A website to demo usage of the media-sync package with a TimingObject and a TimingProvider.
JavaScript
13
star
22

dynamo-db-local

A wrapper around Amazon's DynamoDB Local to start and stop it from Node.js.
JavaScript
13
star
23

automation-events

A module which provides an implementation of an automation event list.
JavaScript
12
star
24

audio-fingerprinting-file-reader

A reader for files created by audfprint.
JavaScript
11
star
25

web-audio-beat-detector-worker

The worker which is used by the web-audio-beat-detector package.
JavaScript
8
star
26

midi-file-slicer

This module is slicing a midi representation into parts.
JavaScript
7
star
27

web-codecs

A (not yet) extendable and (not yet) complete drop-in replacement for the native WebCodecs API.
JavaScript
7
star
28

limiter-audio-worklet-processor

The AudioWorkletProcessor which is used by the limiter-audio-worklet package.
JavaScript
7
star
29

recorder-audio-worklet-processor

The AudioWorkletProcessor which is used by the recorder-audio-worklet package.
JavaScript
6
star
30

metadata-detector

A tool to locate and strip metadata from files.
JavaScript
6
star
31

midi-json-parser-worker

The worker which is used by the midi-json-parser package.
TypeScript
6
star
32

karma-virtualbox-ie11-launcher

!!! DEPRECATED !!! A Karma launcher for Internet Explorer 11 on VirtualBox.
JavaScript
6
star
33

web-audio-beat-detector-broker

The broker which is used by the web-audio-beat-detector package.
JavaScript
5
star
34

worker-timers-broker

The broker which is used by the worker-timers package.
JavaScript
4
star
35

metadata-detector-streams

A tool to locate and strip metadata from files.
TypeScript
4
star
36

karma-virtualbox-edge-launcher

!!! DEPRECATED !!! A Karma launcher for Edge on VirtualBox.
JavaScript
4
star
37

standardized-audio-context-demo

A demo page to show how to use standardized-audio-context.
JavaScript
4
star
38

timed-audio-buffer-source-node-audio-worklet

This module provides a loader for the TimedAudioBufferSourceNodeAudioWorkletProcessor and the corresponding TimedAudioBufferSourceNodeAudioWorkletNode.
JavaScript
3
star
39

multi-buffer-data-view

A wrapper around the native DataView which can handle multiple ArrayBuffers.
JavaScript
3
star
40

demuxed-2022

My talk at Demuxed 2022.
HTML
3
star
41

worker-timers-worker

The worker which is used by the worker-timers package.
JavaScript
3
star
42

analog4all-client

This is the client for analog4all.
TypeScript
2
star
43

extendable-media-recorder-wav-encoder-worker

The worker which is used by the extendable-media-recorder-wav-encoder package.
JavaScript
2
star
44

web-timing-demo

A website to demo the Web Timing Object.
JavaScript
2
star
45

web-audio-conference-2017

My talk at the Web Audio Conference 2017.
TypeScript
2
star
46

media-encoder-host

This is a module to load and manage media encoders.
JavaScript
2
star
47

fast-unique-numbers

A module to create a set of unique numbers as fast as possible.
JavaScript
2
star
48

json-midi-message-encoder

This module encodes a JSON representation of a MIDI event into a binary MIDI event.
TypeScript
2
star
49

tonejs-synchronization-demo

A website to demo how to connect Tone.js to a Timing Object.
JavaScript
2
star
50

audio-developer-conference-2022

My talk at the Audio Developer Conference in 2022.
TypeScript
2
star
51

broker-factory

A little factory function to create a broker for a JSON-RPC based Web Worker.
JavaScript
2
star
52

analog4all-provider

This is the provider for analog4all.
TypeScript
2
star
53

web-audio-metronome-demo

A website to demo a Web Audio metronome connected to a Web Timing Object.
JavaScript
2
star
54

user-media-audio-visualizer

A super basic visualizer of user media's audio input.
JavaScript
2
star
55

here-maps-type-guards

A guarded version of the TypeScript type definitions for HERE Maps.
TypeScript
2
star
56

create-s3-object-write-stream

Creates a writable stream which uses Amazon's Multipart Upload API under the hood.
JavaScript
2
star
57

rxjs-connector

A module to accept WebRTC DataChannel connections by using WebSockets.
TypeScript
2
star
58

tpac-2022

My talk at the TPAC 2022.
TypeScript
1
star
59

karma-yakbak-preprocessor

!!! DEPRECATED !!! A Karma preprocessor for yakbak.
JavaScript
1
star
60

dynamo-db-provisioner

A lightweight and promise-based wrapper of the AWS SDK to create and delete tables.
JavaScript
1
star
61

worker-factory

A little factory function to create a JSON-RPC based Web Worker implementation.
JavaScript
1
star
62

synchsafe

A module to decode and encode synchsafe integers.
JavaScript
1
star
63

web-audio-meetup-march-2017

My talk at the Web Audio meetup in March 2017.
TypeScript
1
star
64

timed-audio-buffer-source-node-audio-worklet-processor

The AudioWorkletProcessor which is used by the timed-audio-buffer-source-node-audio-worklet package.
JavaScript
1
star
65

tsconfig-holy-grail

This is my personal collection of tsconfig files.
JavaScript
1
star
66

mse-tests

A collection of MSE tests.
JavaScript
1
star
67

web-audio-meetup-may-2019

My talk at the Web Audio meetup in May 2019.
TypeScript
1
star
68

metadata-detector-broker

The broker which is used by the metadata-detector package.
JavaScript
1
star
69

angular-consistent-contenteditable

AngularJS directive to overcome browser inconsisteny when using line breaks in contenteditable.
JavaScript
1
star
70

extendable-media-recorder-wav-encoder-broker

The broker which is used by the extendable-media-recorder-wav-encoder package.
JavaScript
1
star