V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
starvedcat
V2EX  ›  问与答

一个特别基础的 js 问题

  •  
  •   starvedcat · 2016-11-13 10:39:22 +08:00 · 1659 次点击
    这是一个创建于 2932 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我现在想用这个库: 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都试了

    到底哪儿出问题了呢?

    第 1 条附言  ·  2016-11-13 11:26:24 +08:00
    已改用 https://github.com/Tonejs/Tone.js ………………
    11 条回复    2016-11-13 12:11:10 +08:00
    starvedcat
        1
    starvedcat  
    OP
       2016-11-13 10:45:21 +08:00
    在 webstorm 里,输入“ Howler.”,弹出的联想菜单里,是有 ctx 的……(这证明引用的 js 路径、内容都没问题)
    sun1991
        2
    sun1991  
       2016-11-13 10:49:31 +08:00 via Android   ❤️ 1
    改个名,不要用 context 做变量名
    starvedcat
        3
    starvedcat  
    OP
       2016-11-13 10:50:20 +08:00
    @sun1991 谢谢,我改成“ fffff ”了,还是输出 null
    starvedcat
        4
    starvedcat  
    OP
       2016-11-13 10:57:35 +08:00
    关键是, google 搜索“ Howler.ctx null ”,啥也没有啊!!!
    smallpath
        5
    smallpath  
       2016-11-13 10:57:51 +08:00   ❤️ 1
    万一这玩意就是 null 呢, 先把 Holwer 的成员全部打印出来吧
    Biwood
        6
    Biwood  
       2016-11-13 11:18:51 +08:00   ❤️ 1
    Howler.ctx 只是一个配置项,而不是 API ,你需要给这个项赋值,值的类型是 Boolean ,也就是说当给 Howler.ctx 赋值 true 的时候才能暴露 AudioContext 接口。打印出来的 null 是这一项的默认值,所以默认不暴露 AudioContext 接口。
    starvedcat
        7
    starvedcat  
    OP
       2016-11-13 11:25:54 +08:00
    @Biwood 但是网上找到的代码片段都是:
    ····
    var context = Howler.ctx;
    var oscillator = context.createOscillator();
    ····
    直接就把 Howler.ctx 给用上了啊。。
    starvedcat
        8
    starvedcat  
    OP
       2016-11-13 11:28:47 +08:00
    @Biwood 想请教一下,如果按你说的, 先 Howler.ctx = true;,然后该怎么操作?
    Biwood
        9
    Biwood  
       2016-11-13 11:44:25 +08:00   ❤️ 1
    @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
        10
    oott123  
       2016-11-13 12:09:30 +08:00   ❤️ 1
    看了一下源码,你至少需要先 init 一个 Howl 对象,才能取到 ctx 。

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

    btw ,你问的问题就是这个库的细节,不知道你为啥觉得和这个库的细节无关。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:52 · PVG 08:52 · LAX 16:52 · JFK 19:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.