Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 206部分内容请求中的内容范围和内容长度不正确_Javascript_Html_Blob_Html5 Audio_Web Audio Api - Fatal编程技术网

Javascript 206部分内容请求中的内容范围和内容长度不正确

Javascript 206部分内容请求中的内容范围和内容长度不正确,javascript,html,blob,html5-audio,web-audio-api,Javascript,Html,Blob,Html5 Audio,Web Audio Api,我有一个Html音频标签,其中src设置为一个用WebAudioAPI记录的wav文件的BLOBURL。当寻找音频的不同部分时,206部分内容响应头填充了不正确的内容长度和内容范围 如果我有一个约5秒的音频剪辑,长度为483371字节,并在音频元素上搜索到2.4秒,我会看到请求中填充了内容长度/范围,如果我搜索到4.8秒(或两倍于我搜索的长度/范围) 我得到的是: 内容长度:24620 内容范围:字节458752-483371/483372 内容类型:音频/wav 我应该得到的是: 内容长度

我有一个Html音频标签,其中src设置为一个用WebAudioAPI记录的wav文件的BLOBURL。当寻找音频的不同部分时,206部分内容响应头填充了不正确的内容长度和内容范围

如果我有一个约5秒的音频剪辑,长度为483371字节,并在音频元素上搜索到2.4秒,我会看到请求中填充了内容长度/范围,如果我搜索到4.8秒(或两倍于我搜索的长度/范围)


我得到的是:

内容长度:24620

内容范围:字节458752-483371/483372

内容类型:音频/wav


我应该得到的是:

内容长度:232019

内容范围:字节251353-483371/483372

内容类型:音频/wav


如果我试图超过一半的音频长度,我的音频不会播放,播放器会被发送回0。如果我尝试5秒剪辑的1秒,它将获得音频的最后3秒,直观地显示它从1秒播放到4秒,然后停止播放(因为出于某种原因,它是字节范围起始位置的两倍,我得到的字节是2-5秒,而不是1-5秒。)

我正在谷歌chrome中调试,是否有其他人遇到过这个问题,或者对它可能是什么有任何想法?用正确的响应头编写自己的GET请求会更容易吗

想法: 这是一个单通道.Wav文件,它可能正在计算双通道.Wav文件的开始时间吗

页面上没有其他音频元素,因此不会产生任何干扰


我将在哪里调试或覆盖此206部分内容请求?

更新:这是因为它是一个单通道WAV文件。将录制更改为双通道后,播放效果良好。我最初这样做是为了减小文件大小,所以为了补偿,我在双通道中记录,并将采样率从48000降低到18000

所以,过了一段时间,我又重新审视了这个问题,因为我正在重做我的项目中需要单声道音频的一部分,我对这个奇怪的问题做了噩梦。原来Recorder.js中有一个错误,它会扰乱单声道录制的编码。在recorder.js的EncodeWav函数中,我必须更改行 视图设置32(28,采样器*4,真); 到 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;
}

干得好,这也太疯狂了。