2015-10-30 1 views
2

В javascript я конвертирую mp3-данные в виде буфера массива в URL-адрес объекта с помощью window.URL.createObjectURL ... как я могу определить частоту дискретизации mp3-файла?Определение частоты дискретизации большого аудиофайла в javascript?

Я мог бы использовать веб-аудио API, чтобы загрузить образцы аудио в памяти, но mp3 файл 300MB ...

Может аудио API веб определить частоту дискретизации звукового элемента без создания AudioBuffer?

ответ

1

Установите заголовок Range, чтобы вернуть достаточно байтов, чтобы прочитать sampleRate. Это все равно создает AudioBuffer, но весь файл не загружается.

var audioContext = new AudioContext(); 
var req = new XMLHttpRequest(); 
var url = 'http://example.com/file.mp3'; 
req.open('GET', url); 
req.setRequestHeader('Range', 'bytes=0-640'); // enough bytes to read meta data 
req.responseType = 'arraybuffer'; 
req.onload = function(event) { 
    audioContext.decodeAudioData(this.response, function(decodedBuffer) { 
    console.log(decodedBuffer.sampleRate); 
    }, function(error) { 
    console.log(error); 
    }); 
}; 
req.send(); 

DEMO: http://jsfiddle.net/oxv5ykvn/

+2

К сожалению, это не работает. decodeAudioData всегда рецессирует результат на частоту дискретизации аудиоконтента. Однако см. Также https://github.com/WebAudio/web-audio-api/issues/30 –