2015-10-30 45 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 –