--- /dev/null
+var ffi = require('ffi');
+var ref = require('ref');
+
+var intPtr = ref.refType('int');
+var stringPtr = ref.refType(ref.types.CString);
+
+var aubio = ffi.Library('libaubio', {
+ // beattracking / misc
+ "new_aubio_beattracking": [ "pointer", [ "int", "int", "int"]],
+ "aubio_beattracking_do": [ "void", [ "pointer", "pointer", "pointer"]],
+ "aubio_beattracking_get_bpm": [ "float", ["pointer"]],
+ "aubio_filter_do": [ "void", [ "pointer", "pointer" ]],
+ "new_aubio_filter_a_weighting": [ "pointer", [ "int" ]],
+
+ // 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_seek": [ "int", [ "pointer", "int" ]],
+ "aubio_source_close": [ "int", [ "pointer" ]],
+ "del_aubio_source": [ "void", [ "pointer" ]],
+
+
+ // fvec
+ "new_fvec": [ "pointer", [ "int" ]],
+ "del_fvec": [ "void", [ "pointer" ]],
+ "fvec_get_sample": [ "float", [ "pointer", "int" ]],
+ "fvec_set_sample": [ "void", [ "pointer", "float", "int" ]],
+ "fvec_get_data": [ "float", [ "pointer" ]],
+ "fvec_print": [ "void", [ "pointer" ]],
+ "fvec_set_all": [ "void", [ "pointer", "float" ]],
+ "fvec_zeros": [ "void", [ "pointer" ]],
+ "fvec_rev": [ "void", [ "pointer" ]],
+ "fvec_weight": [ "void", [ "pointer", "pointer" ]],
+ "fvec_copy": [ "void", [ "pointer", "pointer" ]],
+ "fvec_ones": [ "void", [ "pointer" ]],
+});
+
+module.exports = aubio;
--- /dev/null
+var aubio = require('./index.js');
+var ref = require('ref');
+
+var get_file_bpm = function(path, params) {
+
+ var source = aubio.new_aubio_source(path, params.samplerate, params.hop_s);//params.samplerate, params.hop_s);
+ var samplerate = aubio.aubio_source_get_samplerate(source);
+ console.log('samplerate: ' + samplerate);
+ var beats = [];
+ var total_frames = 0;
+ var test_fvec = aubio.new_fvec(params.hop_s);
+ var out_fvec = aubio.new_fvec(params.hop_s);
+ var tmp_read = ref.alloc('int');
+ var tempo = aubio.new_aubio_beattracking(params.hop_s, params.hop_s, params.samplerate);
+ var total_bpm = 0;
+ var count = 0;
+
+ while(true) {
+ aubio.aubio_source_do(source, test_fvec, tmp_read);
+ aubio.aubio_beattracking_do(tempo, test_fvec, out_fvec);
+ var test_sample = aubio.fvec_get_sample(test_fvec, 1);
+ console.log('test sample: ' + test_sample);
+ var read = tmp_read.deref();
+ total_frames += read;
+ count = count + 1;
+ total_bpm += aubio.aubio_beattracking_get_bpm(tempo);
+ if(read != params.hop_s) { break; }
+ }
+ console.log('total' + total_frames);
+ console.log('bpm: ' + total_bpm / count);
+ aubio.del_aubio_source(source);
+}
+
+get_file_bpm('holden.mp3', {
+ samplerate: 44100,
+ win_s : 1024,
+ hop_s : 512,
+});
+
+/*var in_fvec = aubio.new_fvec(16);
+var out_fvec = aubio.new_fvec(4);
+aubio.fvec_ones(out_fvec);
+aubio.fvec_print(in_fvec);
+aubio.fvec_print(out_fvec);
+
+var tempo = aubio.new_aubio_beattracking(16, 256, 44100);
+
+var i = 0;
+
+while(i < 10) {
+ aubio.aubio_beattracking_do(tempo, in_fvec, out_fvec);
+ console.log(aubio.aubio_beattracking_get_bpm(tempo));
+ i++
+}
+
+//var test_filt = aubio.new_aubio_filter_a_weighting(44100);
+//aubio.aubio_filter_do(test_fvec, test_filt);
+//*/