Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions examples/aubiotrack.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
const aubio = require('../')
const ref = require('ref-napi')

const buffer_size = 1024
const hop_size = 512; // number of samples to be read at each aubio_source_do call
const tempo_method = "default"
const onset_threshold = 0.0
const silence_threshold = -90.

let inputfile
if (process.argv[2]) {
inputfile = process.argv[2]
} else {
console.error('a command line is required.')
console.log('usage examples:')
console.log(' ' + process.argv[0] + ' ' + process.argv[1] + ' <mediafile>')
return
}

const source = aubio.new_aubio_source(inputfile, 0, hop_size)
try {
source.readPointer()
} catch (e) {
console.error('failed opening ' + inputfile + ' for reading')
return
}
const samplerate = aubio.aubio_source_get_samplerate(source); // 采样率

const tempo_out = aubio.new_fvec(2)
const tempo = aubio.new_aubio_tempo(tempo_method, buffer_size, hop_size, samplerate)
if (onset_threshold != 0.) aubio_tempo_set_threshold(tempo, onset_threshold)
const wavetable = aubio.new_aubio_wavetable(samplerate, hop_size)
aubio.aubio_wavetable_set_freq(wavetable, 2450.)
const input_buffer = aubio.new_fvec(hop_size)
const readPtr = ref.alloc('int')
let total_read = 0
let blocks = 0
do {
aubio.aubio_source_do(source, input_buffer, readPtr)
aubio.aubio_tempo_do(tempo, input_buffer, tempo_out)
let is_beat = 0.
let is_silence = 0
is_beat = aubio.fvec_get_sample(tempo_out, 0)
if (silence_threshold != -90.)
is_silence = aubio.aubio_silence_detection(input_buffer, silence_threshold)
if (is_beat && !is_silence) {
aubio.aubio_wavetable_play(wavetable)
} else {
aubio.aubio_wavetable_stop(wavetable)
}
if (is_beat && !is_silence) {
console.log(aubio.aubio_tempo_get_last(tempo) / samplerate)
}
blocks++
total_read += readPtr.deref()
} while (readPtr.deref() == hop_size)

aubio.del_aubio_source(source)
aubio.del_fvec(input_buffer)
aubio.del_aubio_tempo(tempo)
aubio.del_aubio_wavetable(wavetable)
aubio.del_fvec(tempo_out)
2 changes: 1 addition & 1 deletion examples/filter_source.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var aubio = require('../');
var ref = require('ref');
var ref = require('ref-napi');

var filter_source = function(inputfile, outputfile, params) {

Expand Down
2 changes: 1 addition & 1 deletion examples/mfcc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var aubio = require('../');
var ref = require('ref');
var ref = require('ref-napi');

var extract_mfcc = function(inputfile, params) {

Expand Down
2 changes: 1 addition & 1 deletion examples/source_reader.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var aubio = require('../');
var ref = require('ref');
var ref = require('ref-napi');

if (process.argv[2]) {
var inputfile = process.argv[2];
Expand Down
100 changes: 86 additions & 14 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var ffi = require('ffi');
var ref = require('ref');
var ffi = require('ffi-napi');
var ref = require('ref-napi');

var intPtr = ref.refType('int');
//var stringPtr = ref.refType(ref.types.CString);
Expand All @@ -14,16 +14,19 @@ var aubio = ffi.Library('libaubio', {
"fvec_print": [ "void", [ "pointer" ]],
"fvec_set_all": [ "void", [ "pointer", "float" ]],
"fvec_zeros": [ "void", [ "pointer" ]],
"fvec_ones": [ "void", [ "pointer" ]],
"fvec_rev": [ "void", [ "pointer" ]],
"fvec_weight": [ "void", [ "pointer", "pointer" ]],
"fvec_copy": [ "void", [ "pointer", "pointer" ]],
"fvec_ones": [ "void", [ "pointer" ]],
"fvec_weighted_copy": [ "void", [ "pointer", "pointer", "pointer" ]],

// cvec
"new_cvec": [ "pointer", [ "int" ]],
"del_cvec": [ "void", [ "pointer" ]],
"cvec_norm_get_sample": [ "float", [ "pointer", "int" ]],
"cvec_norm_set_sample": [ "void", [ "pointer", "float", "int" ]],
"cvec_phas_set_sample": [ "void", [ "pointer", "float", "int" ]],
"cvec_norm_get_sample": [ "float", [ "pointer", "int" ]],
"cvec_phas_get_sample": [ "float", [ "pointer", "int" ]],
"cvec_norm_get_data": [ "float", [ "pointer" ]],
"cvec_phas_get_data": [ "float", [ "pointer" ]],
"cvec_print": [ "void", [ "pointer" ]],
Expand All @@ -35,15 +38,16 @@ var aubio = ffi.Library('libaubio', {
"cvec_phas_zeros": [ "void", [ "pointer" ]],
"cvec_phas_ones": [ "void", [ "pointer" ]],
"cvec_zeros": [ "void", [ "pointer" ]],
"cvec_logmag": [ "void", [ "pointer", "float" ]],

// source
"new_aubio_source": [ "pointer", [ "string", "int", "int" ]],
"aubio_source_do": [ "void", [ "pointer", "pointer", intPtr ]],
"aubio_source_do_multi": [ "void", [ "pointer", "pointer", intPtr ]],
"aubio_source_get_samplerate": [ "int", [ "pointer" ]],
"aubio_source_get_channels": [ "int", [ "pointer" ]],
"aubio_source_get_duration": [ "int", [ "pointer" ]],
"aubio_source_seek": [ "int", [ "pointer", "int" ]],
"aubio_source_get_duration": [ "int", [ "pointer" ]],
"aubio_source_close": [ "int", [ "pointer" ]],
"del_aubio_source": [ "void", [ "pointer" ]],

Expand All @@ -59,17 +63,24 @@ var aubio = ffi.Library('libaubio', {
"del_aubio_sink": [ "void", [ "pointer" ]],

// filter
"new_aubio_filter": [ "pointer", [ "int" ]],
// new shortcuts
"new_aubio_filter_a_weighting": [ "pointer", [ "int" ]],
"new_aubio_filter_c_weighting": [ "pointer", [ "int" ]],
// general do
"aubio_filter_do": [ "void", [ "pointer", "pointer" ]],
// variations
"aubio_filter_do_outplace": [ "void", [ "pointer", "pointer", "pointer" ]],
"aubio_filter_do_filtfilt": [ "void", [ "pointer", "pointer" ]],
"aubio_filter_get_feedback": [ "pointer", [ "pointer" ]],
"aubio_filter_get_feedforward": [ "pointer", [ "pointer" ]],
"aubio_filter_get_order": [ "int", [ "pointer" ]],
"aubio_filter_get_samplerate": [ "int", [ "pointer" ]],
"aubio_filter_set_samplerate": [ "int", [ "pointer", "int" ]],
"aubio_filter_do_reset": [ "void", [ "pointer", "pointer" ]],
"new_aubio_filter": [ "pointer", [ "int" ]],
"del_aubio_filter": [ "void", [ "pointer" ]],
// new shortcuts
"new_aubio_filter_a_weighting": [ "pointer", [ "int" ]],
"aubio_filter_set_a_weighting": [ "int", [ "pointer", "int" ]],
"new_aubio_filter_c_weighting": [ "pointer", [ "int" ]],
"aubio_filter_set_c_weighting": [ "int", [ "pointer", "int" ]],

// phase vocoder
"new_aubio_pvoc": [ "pointer", [ "int", "int" ]],
Expand All @@ -78,13 +89,18 @@ var aubio = ffi.Library('libaubio', {
"aubio_pvoc_rdo": [ "void", [ "pointer", "pointer", "pointer" ]],
//"aubio_pvoc_get_win": [ "int", [ "pointer" ]],
//"aubio_pvoc_get_hop": [ "int", [ "pointer" ]],
"aubio_pvoc_set_window": [ "int", [ "pointer", "string" ]],

// onset
"new_aubio_onset": [ "pointer", [ "string", "int", "int", "int"]],
"aubio_onset_do": [ "void", [ "pointer", "pointer", "pointer"]],
"aubio_onset_get_last": [ "int", ["pointer"]],
"aubio_onset_get_last_s": [ "float", ["pointer"]],
"aubio_onset_get_last_ms": [ "float", ["pointer"]],
"aubio_onset_set_awhitening": [ "int", [ "pointer", "int" ]],
"aubio_onset_get_awhitening": [ "float", [ "pointer" ]],
"aubio_onset_set_compression": [ "int", [ "pointer", "float" ]],
"aubio_onset_get_compression": [ "float", [ "pointer" ]],
"aubio_onset_set_silence": [ "int", ["pointer", "float"]],
"aubio_onset_get_silence": [ "float", ["pointer"]],
"aubio_onset_get_descriptor": [ "float", ["pointer"]],
Expand All @@ -103,21 +119,23 @@ var aubio = ffi.Library('libaubio', {
"aubio_onset_get_delay_s": [ "float", ["pointer"]],
"aubio_onset_get_delay_ms": [ "float", ["pointer"]],
"aubio_onset_get_threshold": [ "float", ["pointer"]],
"aubio_onset_set_default_parameters": [ "int", [ "pointer", "string" ]],
"aubio_onset_reset": [ "void", [ "pointer" ]],
"del_aubio_onset": [ "void", ["pointer"]],

// pitch
"new_aubio_pitch": [ "pointer", [ "string", "int", "int", "int"]],
"aubio_pitch_do": ["void", ["pointer", "pointer", "pointer"]],
"aubio_pitch_set_tolerance": [ "int", ["pointer", "int"]],
"aubio_pitch_set_tolerance": [ "int", ["pointer", "float"]],
"aubio_pitch_get_tolerance": [ "float", ["pointer"]],
"del_aubio_pitch": [ "void", ["pointer"]],
"new_aubio_pitch": [ "pointer", [ "string", "int", "int", "int"]],
"aubio_pitch_set_unit": ["int", ["pointer", "string"]],
"aubio_pitch_set_silence": ["int", ["pointer", "float"]],
"aubio_pitch_get_silence": ["float", ["pointer"]],
"aubio_pitch_get_confidence": ["float", ["pointer"]],
"del_aubio_pitch": [ "void", ["pointer"]],

// tempo
"new_aubio_tempo": [ "pointer", [ "string", "int", "int", "int"]],
"del_aubio_tempo": [ "void", ["pointer"]],
"aubio_tempo_do": [ "void", [ "pointer", "pointer", "pointer"]],
"aubio_tempo_get_last": [ "int", ["pointer"]],
"aubio_tempo_get_last_s": [ "float", ["pointer"]],
Expand All @@ -130,11 +148,65 @@ var aubio = ffi.Library('libaubio', {
"aubio_tempo_get_period_s": [ "float", ["pointer"]],
"aubio_tempo_get_bpm": [ "float", ["pointer"]],
"aubio_tempo_get_confidence": [ "float", ["pointer"]],
"aubio_tempo_set_tatum_signature": [ "int", [ "pointer", "int" ]],
"aubio_tempo_was_tatum": [ "int", [ "pointer" ]],
"aubio_tempo_get_last_tatum": [ "float", [ "pointer" ]],
"aubio_tempo_get_delay": [ "int", [ "pointer" ]],
"aubio_tempo_get_delay_s": [ "float", [ "pointer" ]],
"aubio_tempo_get_delay_ms": [ "float", [ "pointer" ]],
"aubio_tempo_set_delay": [ "int", [ "pointer", "int" ]],
"aubio_tempo_set_delay_s": [ "int", [ "pointer", "float" ]],
"aubio_tempo_set_delay_ms": [ "int", [ "pointer", "float" ]],
"del_aubio_tempo": [ "void", ["pointer"]],

// mfcc
"new_aubio_mfcc": [ "pointer", [ "int", "int", "int", "int"]],
"aubio_mfcc_do": ["void", ["pointer", "pointer", "pointer"]],
"del_aubio_mfcc": [ "void", ["pointer"]],
"aubio_mfcc_do": ["void", ["pointer", "pointer", "pointer"]],
"aubio_mfcc_set_power": [ "int", [ "pointer", "float" ]],
"aubio_mfcc_get_power": [ "float", [ "pointer" ]],
"aubio_mfcc_set_scale": [ "int", [ "pointer", "float" ]],
"aubio_mfcc_get_scale": [ "float", [ "pointer" ]],
"aubio_mfcc_set_mel_coeffs": [ "int", [ "pointer", "float", "float" ]],
"aubio_mfcc_set_mel_coeffs_htk": [ "int", [ "pointer", "float", "float" ]],
"aubio_mfcc_set_mel_coeffs_slaney": [ "int", [ "pointer" ]],

// wavetable
"new_aubio_wavetable": [ "pointer", [ "int", "int" ]],
"aubio_wavetable_load": [ "int", [ "pointer", "string" ]],
"aubio_wavetable_do": [ "void", [ "pointer", "pointer", "pointer" ]],
"aubio_wavetable_do_multi": [ "void", [ "pointer", "pointer", "pointer" ]],
"aubio_wavetable_get_playing": [ "int", [ "pointer" ]],
"aubio_wavetable_set_playing": [ "int", [ "pointer", "int" ]],
"aubio_wavetable_play": [ "int", [ "pointer" ]],
"aubio_wavetable_stop": [ "int", [ "pointer" ]],
"aubio_wavetable_set_freq": [ "int", [ "pointer", "float" ]],
"aubio_wavetable_get_freq": [ "float", [ "pointer" ]],
"aubio_wavetable_set_amp": [ "int", [ "pointer", "float" ]],
"aubio_wavetable_get_amp": [ "float", [ "pointer" ]],
"del_aubio_wavetable": [ "void", [ "pointer" ]],

// musicutils
"new_aubio_window": [ "pointer", [ "string", "int" ]],
"fvec_set_window": [ "int", [ "pointer", "string" ]],
"aubio_unwrap2pi": [ "float", [ "float" ]],
"aubio_bintomidi": [ "float", [ "float", "float", "float" ]],
"aubio_miditobin": [ "float", [ "float", "float", "float" ]],
"aubio_bintofreq": [ "float", [ "float", "float", "float" ]],
"aubio_freqtobin": [ "float", [ "float", "float", "float" ]],
"aubio_hztomel": [ "float", [ "float" ]],
"aubio_meltohz": [ "float", [ "float" ]],
"aubio_hztomel_htk": [ "float", [ "float" ]],
"aubio_meltohz_htk": [ "float", [ "float" ]],
"aubio_freqtomidi": [ "float", [ "float" ]],
"aubio_miditofreq": [ "float", [ "float" ]],
"aubio_cleanup": [ "void", []],
"aubio_zero_crossing_rate": [ "float", [ "pointer" ]],
"aubio_level_lin": [ "float", [ "pointer" ]],
"aubio_db_spl": [ "float", [ "pointer" ]],
"aubio_silence_detection": [ "int", [ "pointer", "float" ]],
"aubio_level_detection": [ "float", [ "pointer", "float" ]],
"fvec_clamp": [ "void", [ "pointer", "float" ]],
});

module.exports = aubio;
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
},
"homepage": "https://github.com/aubio/node-aubio",
"dependencies": {
"ffi": "^2.0.0",
"ref": "^1.3.2"
"ffi-napi": "^4.0.3",
"ref-napi": "^3.0.2"
}
}
2 changes: 1 addition & 1 deletion test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
var aubio = require('./index.js');
var ref = require('ref');
var ref = require('ref-napi');

var get_features = function(path, params) {

Expand Down