首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript getChannelData有些越界

Javascript getChannelData有些越界
EN

Stack Overflow用户
提问于 2018-07-10 03:25:56
回答 1查看 252关注 0票数 1

当我执行audioBuffer.getChannelData时,我期望所有元素都在-1到1之间的Float32Array。

根据网络文档,它“需要在-1.0;1.0”https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer/getChannelData

这破坏了我的压缩算法,我想知道为什么会发生这种情况,以及夹住-1和1之间的所有元素是否安全。或者对于一些音频文件来说,这会不会更加越界?

下面是一个不是我创建的带有mp3的示例。http://curtastic.com/testdecode.html

代码语言:javascript
复制
<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>

在我的chrome和firefox上的结果

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-07-10 23:01:40

不要求AudioBuffer中的数据必须在-1,1范围内。但是,最终进入输出设备的数据必须在该范围内,否则可能会产生不必要的失真。(具体会发生什么取决于浏览器,但估计大多数浏览器都会限制在这个范围内。)

由于您是从文件中获取数据,因此我建议您简单地对数据应用比例因子。比方说,将所有内容乘以.99。或者除以你看到的最大值。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51252732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档