【问题标题】:Javascript DataView read ID3 TagsJavascript DataView 读取 ID3 标签
【发布时间】:2015-07-21 03:26:26
【问题描述】:

我正在尝试读取音乐文件的 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]);
  }
}

【问题讨论】:

标签: javascript bit-manipulation filereader dataviewwebpart


【解决方案1】:

请检查ID3标签格式的结构(https://en.wikipedia.org/wiki/ID3#Layout),这是v1的格式:

    | Field  | Offset | Length | Value   |
    |--------|--------|--------|---------|
    | Header | 0      | 3      | TAG     |
    | Title  | 3      | 30     |         |
    | Artist | 33     | 30     |         |
    | ... ect                            |
  1. 将文件中的 128 个字节读入 blob。
  2. 创建一个阅读器来读取 Blob。
  3. 创建一个 DataView 来读取 ArrayBuffer。
  4. 对于每个字段,将缓冲区转换为带有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);

【讨论】:

  • 嘿,谢谢你的回答。但它并没有真正奏效,因为新歌使用的是 id3v2.x 版本。
猜你喜欢
  • 2013-12-11
  • 2011-09-14
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
相关资源
最近更新 更多