audio-metadata
Version:
Extract metadata from audio files
69 lines (57 loc) • 1.6 kB
JavaScript
function toArrayBuffer(buffer) {
var arrayBuffer = new ArrayBuffer(buffer.length);
var view = new Uint8Array(arrayBuffer);
for (var i = 0; i < buffer.length; ++i) {
view[i] = buffer[i];
}
return arrayBuffer;
}
module.exports = {
trimNull: function(s) {
return s.replace(/\u0000+$/, '');
},
createView: function(buffer) {
if (typeof(Buffer) !== 'undefined' && buffer instanceof Buffer) {
//convert nodejs buffers to ArrayBuffer
buffer = toArrayBuffer(buffer);
}
if (!(buffer instanceof ArrayBuffer)) {
throw new Error('Expected instance of Buffer or ArrayBuffer');
}
return new DataView(buffer);
},
readBytes: function(view, offset, length, target) {
if (offset + length < 0) {
return [];
}
var bytes = [];
var max = Math.min(offset + length, view.byteLength);
for (var i = offset; i < max; i++) {
var value = view.getUint8(i);
bytes.push(value);
if (target) {
target.setUint8(i - offset, value);
}
}
return bytes;
},
readAscii: function(view, offset, length) {
if (view.byteLength < offset + length) {
return '';
}
var s = '';
for (var i = 0; i < length; i++) {
s += String.fromCharCode(view.getUint8(offset + i));
}
return s;
},
readUtf8: function(view, offset, length) {
if (view.byteLength < offset + length) {
return '';
}
var buffer = view.buffer.slice(offset, offset + length);
//http://stackoverflow.com/a/17192845 - convert byte array to UTF8 string
var encodedString = String.fromCharCode.apply(null, new Uint8Array(buffer));
return decodeURIComponent(escape(encodedString));
}
};