亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

206 部分內容請求中的 Content-Range 和 Content-Length 不正確

206 部分內容請求中的 Content-Range 和 Content-Length 不正確

慕哥9229398 2021-09-04 17:39:26
我有一個 Html 音頻標簽,其中 src 設置為使用 WebAudio Api 記錄的 wav 文件的 Blob Url。當尋找音頻的不同部分時,206 Partial Content 響應標頭填充了不正確的 Content-Length 和 Content-Range。如果我有一個大約 5 秒的音頻剪輯,它的長度為 483,371 字節并在音頻元素上尋求 2.4 秒,我會看到請求填充了內容長度/范圍,如果我尋求 4.8 秒(或加倍我想要的)。我得到了什么:內容長度:24620內容范圍:字節 458752-483371/483372內容類型:音頻/wav我應該得到什么:內容長度:232019內容范圍:字節 251353-483371/483372內容類型:音頻/wav如果我尋求超過一半的音頻長度,我的音頻不會播放并且播放器被發送回 0。如果我尋求 5 秒剪輯的 1 秒,它將獲得音頻的最后 3 秒,直觀地顯示它從 1 秒播放到 4 秒,然后停止播放(因為出于某種原因將字節范圍的起始位置加倍,我得到的是 2-5 秒而不是 1-5 秒的字節。)我正在 google chrome 中調試,有沒有其他人遇到過這個問題或者對它可能是什么有任何想法?使用正確的響應標頭編寫我自己的 GET 請求會更容易嗎?想法:這是一個單聲道.wav文件,它可能是在計算雙聲道.wav文件的開始時間嗎?頁面上沒有其他音頻元素,因此不會受到任何干擾。我應該去哪里調試或覆蓋這個 206 部分內容請求?
查看完整描述

2 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

所以,一段時間后我重新審視了這個,因為我正在重做我的項目中需要單聲道音頻的部分,而且我對這個奇怪的問題做了噩夢。結果發現 Recorder.js 中存在一個錯誤,該錯誤會弄亂單聲道錄音的編碼。在 recorder.js 的 EncodeWav 函數中,我不得不更改 line view.setUint32(28, sampleRate * 4, true); 到 view.setUint32(28, sampleRate * numChannels * 2, true);


這使得音頻文件的搜索變得完美,允許我將文件大小減半,并使我不必在路上將其更改為單聲道。


function encodeWAV(samples) {

var buffer = new ArrayBuffer(44 + samples.length * 2);

var view = new DataView(buffer);

var numChannels = 1;

var sampleRate = 18000;


/* RIFF identifier */

writeString(view, 0, 'RIFF');

/* RIFF chunk length */

view.setUint32(4, 36 + samples.length * 2, true);

/* RIFF type */

writeString(view, 8, 'WAVE');

/* format chunk identifier */

writeString(view, 12, 'fmt ');

/* format chunk length */

view.setUint32(16, 16, true);

/* sample format (raw) */

view.setUint16(20, 1, true);

/* channel count */

view.setUint16(22, numChannels, true);

/* sample rate */

view.setUint32(24, sampleRate, true);

/* byte rate (sample rate * block align) */

//view.setUint32(28, sampleRate * 4, true);

view.setUint32(28, sampleRate * numChannels * 2, true);

/* block align (channel count * bytes per sample) */

view.setUint16(32, numChannels * 2, true);

/* bits per sample */

view.setUint16(34, 16, true);

/* data chunk identifier */

writeString(view, 36, 'data');

/* data chunk length */

view.setUint32(40, samples.length * 2, true);


floatTo16BitPCM(view, 44, samples);


return view;

}



查看完整回答
反對 回復 2021-09-04
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

更新:這是因為它是一個單通道 WAV 文件。將錄音更改為雙通道后,播放效果很好。我最初這樣做是為了減小文件大小,因此為了補償我在雙通道中錄制并將采樣率從 48000 降低到 18000。


查看完整回答
反對 回復 2021-09-04
  • 2 回答
  • 0 關注
  • 844 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號