我在Chrome上做了一些web音頻的東西,我注意到buffer.length屬性與我在Sonar中看到的不匹配。網絡音頻聲稱我的文件長度爲1391324個樣本,或約31.6秒。聲納向我展示1278279個樣本,或約29秒。窗口中的文件屬性也確認Sonar的數字。它是一個普通的16位,44.1k的wav文件。這裏可能會發生什麼?Web音頻API誤報緩衝區的長度?
編輯:看起來鉻重新採樣音頻48K。爲什麼???我想要我的同一個wav文件,謝謝。 Firefox不會這樣做,並給我正確的長度。
使用本撥弄嘗試在Chrome和Firefox:http://jsfiddle.net/kV7aV/2/ 和使用本文件:https://dl.dropboxusercontent.com/u/75652364/amp.wav
小提琴代碼,以使太高興了:
HTML:
<input type="file" id="audio_file" accept="audio/wav" multiple />
<p id="output"></p>
<p id="output2"></p>
JS:
var fileInput = document.getElementById("audio_file");
var output = document.getElementById("output");
var output2 = document.getElementById("output2");
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
fileInput.onchange = function (evt) {
var files = evt.target.files; // FileList object
for (var f = 0; f < files.length; f++) {
var reader = new FileReader();
reader.onload = function (e) {
context.decodeAudioData(e.target.result, function (buffer) {
console.log(buffer.length);
output.innerHTML = buffer.length;
var data = buffer.getChannelData(0);
// undefined in firefox
console.log(data[1391323]);
output2.innerHTML = data[1391323];
});
};
reader.readAsArrayBuffer(files[f]);
}
};
有趣的是,你的鏈接中的一條評論說firefox重新採樣音頻到48K。首先,他們爲什麼會這樣做?我認爲網絡音頻是關於準確性和性能的。這樣做需要額外的計算能力並導致意想不到的結果。其次,我的測試也會讓我相信firefox *不會那樣做,因爲它是我測試過的兩個精確的瀏覽器.... hmmmmmmm –
看看這個,Chrome * *重新採樣到48k和firefox *不*:http://jsfiddle.net/kV7aV/6/。我根本就不喜歡這個... –
[SoundJS](http://www.createjs.com/#!/SoundJS)我們發現很多瀏覽器在默認編碼之外都有問題,所以這並不讓我感到意外。 – OJay