Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.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 getChannelData有些超出范围_Javascript_Html5 Audio_Web Audio Api - Fatal编程技术网

Javascript getChannelData有些超出范围

Javascript getChannelData有些超出范围,javascript,html5-audio,web-audio-api,Javascript,Html5 Audio,Web Audio Api,当我执行audioBuffer.getChannelData时,我希望得到一个Float32Array,其中所有元素都在-1和1之间。但对于某些文件,某些元素高达1.018 根据web文档,它“需要在[-1.0;1.0]中” 这破坏了我的压缩算法,我想知道为什么会发生这种情况,以及是否可以安全地钳制-1和1之间的所有元素。或者,对于某些音频文件来说,这将是一个更加不受限制的问题 这是一个我没有创建的mp3示例。 我能够在Firefox for Windows上复制它。不确定为什么您可能会得到这

当我执行audioBuffer.getChannelData时,我希望得到一个Float32Array,其中所有元素都在-1和1之间。但对于某些文件,某些元素高达1.018

根据web文档,它“需要在[-1.0;1.0]中”

这破坏了我的压缩算法,我想知道为什么会发生这种情况,以及是否可以安全地钳制-1和1之间的所有元素。或者,对于某些音频文件来说,这将是一个更加不受限制的问题

这是一个我没有创建的mp3示例。


我能够在Firefox for Windows上复制它。不确定为什么您可能会得到这些超出范围的值,但是

任何音频的目标节点上所有音频信号的范围 图名义上是[-1,1]。信号值的音频格式 超出此范围,或值NaN、正无穷大或 负无穷大,本规范未定义


未定义意味着在这种情况下,您可以做任何您喜欢的事情。箝位似乎是一个合理的解决方案。

不要求音频缓冲区中的数据必须在范围[-1,1]内。但是,最终进入输出设备的数据应该在该范围内,否则可能会出现不必要的失真。(发生的情况取决于浏览器,但大多数浏览器可能只会钳制在该范围内。)

由于您是从文件中获取数据,因此我建议只对数据应用比例因子。比方说,把一切都乘以0.99。或者将所有内容除以您看到的最大值


剪裁可能会导致失真,尽管在您的示例中这可能无关紧要。缩放不会扭曲,但会丢失信号中非常安静的部分。

对于该示例,我的浏览器(Linux上的Firefox和Chromium)中只记录了缓冲区对象。你在使用什么平台/浏览器?哦,哇,我的Chrome浏览器和Firefox浏览器的解码方式必须与你的不同。必须只是Windows 10与Google Chrome版本67.0.3396.99(官方版本)(64位)的一个微小变化。在我的Firefox Quantum 61.0.1(64位)上,数字略有不同,但数量和变化大致相同。正如旁注:如果您有一系列处理,那么您确实希望这些值超出范围,以便将动态范围保留到最后(尽管很少需要超出范围;您希望根据需要的处理在最佳点级别工作)。夹紧是一种方式,但我建议改为使用限制器,也就是在最末端使用快速(攻击)。
<html>
    <body>
        <script>
            var AudioContext = window.AudioContext || window.webkitAudioContext
            var gaudiocontext = new AudioContext()

            var ajax = new XMLHttpRequest()
            ajax.open("GET", 'nightmare.mp3', true)
            ajax.responseType = "arraybuffer"
            ajax.onload = function()
            {
                gaudiocontext.decodeAudioData(
                    ajax.response,
                    function(buffer)
                    {
                        console.log(buffer)
                        var a = buffer.getChannelData(0)
                        for(var i=0; i<a.length; i++)
                        {
                            var v = a[i]
                            if(v > 1 || v < -1)
                            {
                                document.write(i+": "+v+"<br>")
                                console.log(i, v)
                            }
                        }
                    }
                )
            }
            ajax.send()

        </script>
    </body>
</html>
275074: -1.0023564100265503
275298: 1.0011343955993652
390369: -1.0034352540969849
406446: 1.0043694972991943
406966: 1.001240611076355
464391: -1.0022114515304565
473795: -1.0013331174850464
473796: -1.0011906623840332
489287: 1.0000232458114624
489288: 1.0015380382537842
505246: 1.0035203695297241
538104: 1.0000414848327637
538105: 1.0010102987289429
538654: 1.0025116205215454
669162: 1.0007333755493164
669163: 1.0028942823410034
768849: -1.0007946491241455
777504: -1.007991909980774
801369: 1.008617639541626
869400: 1.0121995210647583
870947: 1.0112541913986206
1040100: 1.0010311603546143
1040104: 1.0021687746047974
1065010: -1.0000600814819336
1067414: -1.0003679990768433
1133228: -1.002819299697876
1133230: -1.0011301040649414
1195266: 1.0021108388900757
1195496: -1.000971794128418
1262475: -1.0009863376617432
1262744: 1.001728892326355
1262854: 1.005579948425293
1266068: -1.0022647380828857
1270317: -1.0008227825164795
1270322: -1.0015367269515991
1279046: -1.0031969547271729
1279070: -1.0004109144210815
1279080: -1.0048373937606812
1279233: 1.0006334781646729
1281418: -1.0135412216186523
1283600: -1.010787010192871
1285748: 1.0044399499893188
1288197: 1.0003455877304077
1294381: 1.0324506759643555
1294399: 1.0016738176345825
1295138: 1.0029387474060059
1295170: 1.0082039833068848
1295417: -1.0360995531082153
1295447: -1.0007649660110474
1295448: -1.0020323991775513
1295451: -1.0009381771087646
1295488: -1.0024218559265137
1295511: -1.0012314319610596
1296859: 1.0096046924591064
1299037: 1.0260592699050903
1299277: 1.005500078201294
1299449: -1.0101513862609863
1299473: -1.0100860595703125
1299475: -1.004179835319519
1301302: -1.0012340545654297
1302846: -1.0252602100372314
1303408: 1.0005576610565186
1303409: 1.0025590658187866
1303915: 1.009533405303955
1304102: -1.0001871585845947
1304307: -1.0025089979171753
1304586: 1.0183976888656616
1304694: 1.0019795894622803
1305746: 1.018847107887268
1306249: 1.0039864778518677
1306252: 1.001012921333313
1306272: 1.0042804479599
1306431: -1.0356990098953247
1306439: -1.0191256999969482
1307601: -1.0156844854354858
1310684: -1.0025532245635986
1311639: 1.020194172859192
1312099: 1.00885009765625
1312975: -1.0107345581054688
1313035: -1.0103509426116943
1313209: 1.0090372562408447
1313229: 1.014164686203003
1313473: -1.0009111166000366
1314270: -1.0130990743637085
1314990: -1.0097541809082031
1314995: -1.0220547914505005
1315724: -1.0092028379440308
1317747: -1.0046861171722412
1318425: -1.00058913230896
1318898: -1.0501095056533813
1319753: -1.0026195049285889
1319967: 1.001883864402771
1320248: -1.0159223079681396