262 lines
5.6 KiB
JavaScript
262 lines
5.6 KiB
JavaScript
(function ( w, d, PKAE ) {
|
|
'use strict';
|
|
|
|
var db;
|
|
var db_name = 'audiomass';
|
|
var db_version = 1;
|
|
var db_ready = false;
|
|
|
|
var compressors = {
|
|
'l4z' : {
|
|
ready: false,
|
|
loading: false,
|
|
compress: null,
|
|
decompress: null,
|
|
init : function ( callback ) {
|
|
|
|
var q = this;
|
|
q.loading = true;
|
|
|
|
var lz4BlockWASM;
|
|
|
|
lz4BlockCodec.createInstance('wasm').then(instance => {
|
|
lz4BlockWASM = instance;
|
|
|
|
q.ready = true;
|
|
q.loading = false;
|
|
q.compress = function( input, offset ) {
|
|
if (!lz4BlockWASM) {
|
|
if (input instanceof ArrayBuffer)
|
|
return new Uint8Array(input);
|
|
else
|
|
return input;
|
|
}
|
|
|
|
return lz4BlockWASM.encodeBlock(input, 0);
|
|
};
|
|
q.decompress = function( input, offset, size ) {
|
|
if (!lz4BlockWASM) {
|
|
if (input instanceof ArrayBuffer)
|
|
return new Uint8Array(input);
|
|
else
|
|
return input;
|
|
}
|
|
|
|
return lz4BlockWASM.decodeBlock(input, 0, size);
|
|
};
|
|
|
|
callback && callback ();
|
|
});
|
|
// ---
|
|
}
|
|
}
|
|
};
|
|
|
|
var compression = 'l4z';
|
|
|
|
function SaveLocal ( app ) {
|
|
var q = this;
|
|
q.on = false;
|
|
|
|
this.Init = function ( callback ) {
|
|
if (q.on) {
|
|
callback && callback ();
|
|
return ;
|
|
}
|
|
|
|
if (!window.indexedDB) {
|
|
callback && callback ('err');
|
|
return ;
|
|
}
|
|
|
|
var request = indexedDB.open (db_name, db_version);
|
|
|
|
request.onerror = function(e) {
|
|
callback && callback ('err');
|
|
// console.error('Unable to open database.');
|
|
};
|
|
|
|
request.onupgradeneeded = function(e) {
|
|
var db = e.target.result;
|
|
db.createObjectStore('sessions', {keyPath:'id'});
|
|
};
|
|
|
|
request.onsuccess = function(e) {
|
|
db = e.target.result;
|
|
|
|
db.onerror = function( e ) {
|
|
console.log( e );
|
|
};
|
|
|
|
setTimeout(function() {
|
|
db_ready = true;
|
|
q.on = true;
|
|
|
|
callback && callback ();
|
|
app.fireEvent ('DidOpenDB', q);
|
|
},120);
|
|
};
|
|
};
|
|
|
|
this.SaveSession = function ( buffer, id, name ) {
|
|
var q = this;
|
|
|
|
var comp = compressors[ compression ];
|
|
if (!comp.loading && !comp.ready) {
|
|
comp.init (function() {
|
|
q.SaveSession (buffer, id, name);
|
|
});
|
|
|
|
return ;
|
|
}
|
|
|
|
var chans = buffer.numberOfChannels;
|
|
var arr_buffs = [];
|
|
var arr_buffs2 = [];
|
|
var arr;
|
|
var tmp;
|
|
|
|
var sample_rate = buffer.sampleRate;
|
|
|
|
for (var i = 0; i < chans; ++i) {
|
|
arr = buffer.getChannelData ( i );
|
|
|
|
arr_buffs2.push (arr.buffer.byteLength);
|
|
tmp = comp.compress ( arr.buffer, 0);
|
|
arr_buffs.push ( tmp.buffer.slice (tmp.byteOffset, tmp.byteLength + tmp.byteOffset));
|
|
}
|
|
|
|
tmp = null;
|
|
|
|
var ob = {
|
|
id : id,
|
|
name: name,
|
|
created: new Date().getTime(),
|
|
data: arr_buffs,
|
|
data2: arr_buffs2,
|
|
durr: buffer.duration.toFixed(3)/1,
|
|
chans: chans,
|
|
comp: compression,
|
|
thumb: PKAudioEditor.engine.GetWave (buffer),
|
|
samplerate: sample_rate
|
|
};
|
|
|
|
var trans = db.transaction(['sessions'], 'readwrite');
|
|
var addReq = trans.objectStore('sessions').add(ob);
|
|
|
|
addReq.onerror = function(e) {
|
|
app.fireEvent ('ErrorDB', e);
|
|
|
|
console.log('error storing data');
|
|
console.error(e);
|
|
};
|
|
|
|
trans.oncomplete = function ( e ) {
|
|
app.fireEvent ('DidStoreDB', ob, e );
|
|
// console.log( 'data stored', id, e );
|
|
};
|
|
};
|
|
|
|
this.GetSession = function ( id, callback ) {
|
|
var trans = db.transaction(['sessions'], 'readonly');
|
|
//hard coded id
|
|
var req = trans.objectStore('sessions').get(id);
|
|
|
|
req.onsuccess = function(e) {
|
|
// console.log( e.target.result );
|
|
|
|
|
|
var record = e.target.result;
|
|
|
|
if (record && record.comp)
|
|
{
|
|
var comp = compressors[ compression ];
|
|
if (!comp.loading && !comp.ready) {
|
|
comp.init (function() {
|
|
|
|
var data_arr = [];
|
|
var tmp = null;
|
|
|
|
for (var i = 0; i < record.data.length; ++i) {
|
|
tmp = comp.decompress (record.data[i], 0, record.data2[i]);
|
|
data_arr.push (
|
|
tmp.buffer.slice (tmp.byteOffset, tmp.byteLength + tmp.byteOffset)
|
|
);
|
|
}
|
|
|
|
tmp = null;
|
|
record.data = data_arr;
|
|
|
|
callback && callback ( record );
|
|
});
|
|
|
|
return ;
|
|
}
|
|
|
|
var data_arr = [];
|
|
var tmp = null;
|
|
|
|
for (var i = 0; i < record.data.length; ++i) {
|
|
tmp = comp.decompress (record.data[i], 0, record.data2[i]);
|
|
data_arr.push (
|
|
tmp.buffer.slice (tmp.byteOffset, tmp.byteLength + tmp.byteOffset)
|
|
);
|
|
}
|
|
|
|
tmp = null;
|
|
record.data = data_arr;
|
|
}
|
|
|
|
callback && callback ( record );
|
|
};
|
|
};
|
|
|
|
this.DelSession = function ( id, callback ) {
|
|
var trans = db.transaction(['sessions'], 'readwrite');
|
|
|
|
var req = trans.objectStore('sessions').delete (id);
|
|
req.onsuccess = function (e) {
|
|
callback && callback ( id );
|
|
};
|
|
};
|
|
|
|
this.ListSessions = function ( callback ) {
|
|
var trans = db.transaction(['sessions'], 'readonly');
|
|
var object_store = trans.objectStore('sessions');
|
|
var req = object_store.openCursor();
|
|
var ret = [];
|
|
|
|
req.onerror = function(event) {
|
|
console.err("error fetching data");
|
|
};
|
|
req.onsuccess = function(event) {
|
|
var cursor = event.target.result;
|
|
if (cursor) {
|
|
var key = cursor.primaryKey;
|
|
var value = cursor.value;
|
|
|
|
ret.push (value);
|
|
cursor.continue();
|
|
}
|
|
else {
|
|
var rr = ret.sort(function compare( a, b ) {
|
|
if ( a.created > b.created ){
|
|
return -1;
|
|
}
|
|
if ( a.created < b.created ){
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
|
|
callback && callback (rr);
|
|
// no more results
|
|
}
|
|
};
|
|
};
|
|
// ---
|
|
};
|
|
|
|
PKAudioEditor._deps.fls = SaveLocal;
|
|
|
|
})( window, document, PKAudioEditor ); |