2015-05-10 8 views
2

Я пытаюсь прочитать теги ID3 музыкального файла. В настоящее время у меня есть объект Dataview с последними 128 бит аудиофайла в нем (потому что теги ID3 находятся на последних 128 бит в звуковом файле). Итак, на данный момент я не знаю, как я продвигаюсь дальше, как я могу читать другую часть (название, альбом и т. Д.) Из аудиофайла? (Пожалуйста, не ответ с внешними скриптами или библиотеке)Javascript DataView read ID3 Tags

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]); 
    } 
} 
+0

возможно дубликат [читать id3 теги из mp3, используя JavaScript] (http://stackoverflow.com/questions/6332384/read-id3-tags-from-mp3-using-javascript) – jcubic

+1

нет его не дублируется, потому что я прошу разрешение на ванильное разрешение, и на ваш вопрос отвечает внешняя библиотека – Nimmi

ответ

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       | 
  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); 
+0

эй, спасибо за ответ. Но это действительно не работает, потому что новые песни используют версию id3v2.x. – Nimmi

 Смежные вопросы

  • Нет связанных вопросов^_^