一个特别基础的 js 问题

2016-11-13 10:39:22 +08:00
 starvedcat

(先别急着关窗口,我的问题和这个库的细节无关)

我现在想用这个库: https://github.com/goldfire/howler.js ,去得到 AudioContext (在这个 github 页面上搜索“ ctx ”即可找到相应内容)

网上搜到的用法是“ Howler.ctx ”,然而我连样例都跑不通,“ Howler.ctx ”是 null

MCVE 如下:

    <html>
    <body>
    <script src="js/howler.min.js"></script>
    <script>
        var context = Howler.ctx;
        console.log(context);           // console 中输出“ null ”
    </script>
    </body>
    </html>

已知上面的网页中, js 路径,引用的 js 内容均正确。firefox chrome都试了

到底哪儿出问题了呢?

1602 次点击
所在节点    问与答
11 条回复
starvedcat
2016-11-13 10:45:21 +08:00
在 webstorm 里,输入“ Howler.”,弹出的联想菜单里,是有 ctx 的……(这证明引用的 js 路径、内容都没问题)
sun1991
2016-11-13 10:49:31 +08:00
改个名,不要用 context 做变量名
starvedcat
2016-11-13 10:50:20 +08:00
@sun1991 谢谢,我改成“ fffff ”了,还是输出 null
starvedcat
2016-11-13 10:57:35 +08:00
关键是, google 搜索“ Howler.ctx null ”,啥也没有啊!!!
smallpath
2016-11-13 10:57:51 +08:00
万一这玩意就是 null 呢, 先把 Holwer 的成员全部打印出来吧
Biwood
2016-11-13 11:18:51 +08:00
Howler.ctx 只是一个配置项,而不是 API ,你需要给这个项赋值,值的类型是 Boolean ,也就是说当给 Howler.ctx 赋值 true 的时候才能暴露 AudioContext 接口。打印出来的 null 是这一项的默认值,所以默认不暴露 AudioContext 接口。
starvedcat
2016-11-13 11:25:54 +08:00
@Biwood 但是网上找到的代码片段都是:
····
var context = Howler.ctx;
var oscillator = context.createOscillator();
····
直接就把 Howler.ctx 给用上了啊。。
starvedcat
2016-11-13 11:28:47 +08:00
@Biwood 想请教一下,如果按你说的, 先 Howler.ctx = true;,然后该怎么操作?
Biwood
2016-11-13 11:44:25 +08:00
@starvedcat 我只是根据文档来理解的: https://github.com/goldfire/howler.js#ctx-boolean-web-audio-only ,不过按照你给的代码片段,似乎跟我的理解有冲突,这个 ctx 看起来像是需要手动赋值,但是根据源代码,如果没有手动赋值应该会有其他处理的: https://github.com/goldfire/howler.js/blob/1f7f411171439f52aad8e5edf1aa9e9a743814da/dist/howler.js#L67-L69 ,这里的 setupAudioContext 函数找不到定义的地方,你可以通过源代码继续研究一下
oott123
2016-11-13 12:09:30 +08:00
看了一下源码,你至少需要先 init 一个 Howl 对象,才能取到 ctx 。

console.log(Howler.ctx) // null
new Howl(src: ['sound.mp3']).init()
console.log(Howler.ctx) // AudioContext
oott123
2016-11-13 12:11:10 +08:00
这个设计应该是方便你自己传入一个 AudioContext 。

btw ,你问的问题就是这个库的细节,不知道你为啥觉得和这个库的细节无关。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX