2.0.6 • Published 2 years ago

@qgustavor/stream-audio-fingerprint v2.0.6

Weekly downloads
-
License
MPL-2.0
Repository
-
Last release
2 years ago

Audio landmark fingerprinting as a JavaScript module

This module is module that converts a PCM audio signal into a series of audio fingerprints. It works with audio tracks as well as with unlimited audio streams, e.g. broadcast radio.

It's based on lpolito/stream-audio-fingerprint which is based adblockradio/stream-audio-fingerprint which is one of the foundations of the Adblock Radio project.

Credits and description

Check the original project.

Usage

npm install @qgustavor/stream-audio-fingerprint

The algorithm is in src/codegen_landmark.ts.

A demo usage is proposed below. It requires the executable ffmpeg and Deno to run.

import Codegen from './codegen_landmark.ts'

const decoder = Deno.run({
  cmd: [
    'ffmpeg',
    '-i', 'pipe:0',
    '-acodec', 'pcm_s16le',
    '-ar', '22050',
    '-ac', '1',
    '-f', 's16le',
    '-v', 'fatal',
    'pipe:1'
  ],
  stdout: 'piped',
  stdin: 'inherit'
})

const fingerprinter = new Codegen()
for await (const audioData of decoder.stdout.readable) {
  const data = fingerprinter.process(audioData)
  for (let i = 0; i < data.tcodes.length; i++) {
    console.log(`time=${data.tcodes[i]} fingerprint=${data.hcodes[i]}`)
  }
}

and then we pipe audio data, either a stream or a file

curl http://radiofg.impek.com/fg | deno run --allow-run=ffmpeg codegen_demo.mjs
deno run --allow-run=ffmpeg codegen_demo.mjs < awesome_music.mp3

Type definitions are not included because Deno can load TypeScript files directly and because this TypeScript issue.

License

See LICENSE file.