[英]Read id3 v2.4 tags with native Chrome Javascript/FileReader/DataView
[英]Javascript DataView read ID3 Tags
我正在嘗試讀取音樂文件的ID3標簽。 目前我有一個Dataview對象,其中有音頻文件的最后128位(因為ID3標簽位於音頻文件的最后128位)。 因此,在這一點上,我不知道我要怎么走,如何從音頻文件中讀取不同的部分(標題,專輯等)? (請不要回答外部腳本或庫)
window.onload = function(){
file = $("file");
reader = new FileReader();
reader.onload = function(){
length = reader.result.byteLength
dv = new DataView(reader.result, length-128, 128);
}
file.onchange = function(e){
reader.readAsArrayBuffer(e.target.files[0]);
}
}
請檢查ID3標簽格式( https://en.wikipedia.org/wiki/ID3#Layout )的結構,這是v1的格式:
| Field | Offset | Length | Value |
|--------|--------|--------|---------|
| Header | 0 | 3 | TAG |
| Title | 3 | 30 | |
| Artist | 33 | 30 | |
| ... ect |
String.fromCharCode
將緩沖區轉換為字符串。 function readString(dataView, offset, length) {
var o = '';
for (var i = offset; i < offset + length; i++) {
// keep only printable characters
if (i >= 32) o += String.fromCharCode(dataView.getUint8(i));
}
return o;
}
var file = fileElm.files[0];
var blob = file.slice(file.size - 128, file.size);
var reader = new FileReader();
reader.onload = function(evt) {
var buff = evt.target.result;
var dataView = new DataView(buff)
console.log('TAG:', readString(dataView, 0, 3));
console.log('title: ', readString(dataView, 3, 30)); // title
console.log('artist: ', readString(dataView, 33, 30)); // artist
console.log('album: ', readString(dataView, 63, 30)); // album
console.log('year: ', readString(dataView, 93, 4)); // year
}
reader.readAsArrayBuffer(blob);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.