【问题标题】:can't play sound in JS无法在 JS 中播放声音
【发布时间】:2011-11-29 13:12:06
【问题描述】:

这是新代码。还是没有声音。

这个在外部js文件中 功能播放声音(颜色){ var mySound = new buzz.sound("/sounds/"+color, { 格式:[“ogg”、“mp3”、“acc”] });

                    mySound.play()

这在头脑中:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">
</script>

<script type="text/javascript" src="/sounds/buzz.js">
</script>

<script type="text/javascript" src="sound.js">
</script>

<script type="text/javascript" src="hoverBubbles.js">
</script>

我已经对我的网站进行了编程,以便在用户单击图像时播放声音。我用 JS 做到了这一点。但有一个问题。在您单击图像之后,声音播放前有大约 5 秒的长时间延迟。我该怎么做才能使声音播放不延迟?另外,当我试图解决上述问题时,我做了一些事情(我不知道它是什么),我现在根本无法播放声音。

有什么想法吗?

function playSound(color) {
    $("#wavLoader").html("<embed src='/sounds/" + color + ".wav' hidden=true starttime='00:00' autostart=true loop=false>");
    }); 

}

<title>Colors</title>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js">
</script>

<script type="text/javascript" src="hoverBubbles.js"></script>

<script type="text/javascript" src="sound.js"></script>

<link rel="stylesheet" type="text/css" href="heading.css">

<link rel="stylesheet" type="text/css" href="fish.css">

<link rel="stylesheet" type="text/css" href="fishText.css">

<link rel="stylesheet" type="text/css" href="fishBubbles.css">

<style type='text/css'>


</style>

$(document).ready(function() {

            $('#fishBlack').mouseover(function() {
                $('#bubblesBlack').toggle('slow');
                $('#textBlack').toggle('slow');
            });

            $('#fishBlack').mouseout(function() {
                $('#bubblesBlack').hide('slow');
                $('#textBlack').toggle('slow');
            });
}

$(document).ready(function() {

            $('#fishBlack').click(function() {
                    playSound('black');
            });

}       
<!--the sound-->    

<span id="wavLoader" style="position:fixed; top:-100px;"></span>

【问题讨论】:

  • playSound() 在哪里定义?看来不是。
  • 唯一相关的代码很可能在你的sound.js... 这个问题不能以目前的形式真正得到回答
  • 另外5秒的延迟可能是由于加载音频文件造成的。文件有多大,你打算如何播放它们(这也是 James 的要求)?
  • 您检查过您的控制台吗?该代码至少有 3 个语法错误,playSound 中的额外 });...,在两个文档就绪调用后缺少 });...
  • playSound() 在那里,但在我的问题中没有很好地复制。很抱歉。

标签: javascript


【解决方案1】:

我建议使用现有的库,如 Buzz 用它自己的话来说:

Buzz 是一个小巧但功能强大的 Javascript 库,可让您 轻松利用新的 HTML5 音频元素。它会退化 在非现代浏览器上优雅地运行。

API 示例:

var mySound = new buzz.sound( "/sounds/myfile", {
    formats: [ "ogg", "mp3", "acc" ]
});

mySound.play()
    .fadeIn()
    .loop()
    .bind( "timeupdate", function() {
       var timer = buzz.toTimer( this.getTime() );
       document.getElementById( "timer" ).innerHTML = timer;
    });

工作示例jsFiddle

【讨论】:

  • 请漂亮请不要使用innerHTML来设置textpastie.org/2938683
  • 每次滥用.innerHTML作为跨浏览器.textContent,就应该被枪杀
  • 我已经用新代码编辑了我的问题。我仍然需要帮助!
  • 如果您使用 Buzz,您需要将 playSound() 函数更新为以下内容:function playSound(color) { var sound = new sound('/sounds/' + color + '.wav'); sound.play(); }
  • 仍然无法正常工作。我在 Peter 的上述代码中尝试了 new sound 和 new buzz.sound。你认为这是我从他们的网站下载的buzz.js。当我下载它时,它是一个 zip 文件。当我打开 zip 时,有三个文件/项目。我只将第一个说 buzz.js 的文件下载到了我的服务器上,然后我在我的索引文件中引用了它,如我的问题所示。你认为问题出在这个问题上吗。
【解决方案2】:

您的脚本正在返回一个嵌入标签,该标签反过来调用安装在用户系统上的该类型媒体的默认播放器(可能是某种形式的 Windows Media Player、QuickTime 等)。加载播放器需要一些时间,具体取决于客户端计算机的速度以及(可能)页面上已经打开的播放器数量。

您可能希望实现某种形式的预缓冲或使用像 Peter 提到的那样的第三方库。 Or this one,在浏览器不支持 HTML5 时提供 Flash 后备。

使用像 jQuery 这样的 JavaScript 框架,还有一些现成的插件,例如jPlayer

【讨论】:

  • function playSound(color) { var mySound = new buzz.sound( "/sounds"+color, { 格式: [ "ogg", "mp3", "acc" ] }); mySound.play()
  • 我也确实在我的服务器上上传了buzz.js文件。
  • 最好用反映您所做更改的新代码更新您的问题。此外,您是否使用 JavaScript 调试器(如 Firebug for Firefox)检查了脚本的输出?控制台上是否打印了任何消息?
  • 尝试:function playSound(color) { var mySound = new buzz.sound( "/sounds/"+color, { formats: [ "ogg", "mp3", "acc" ] }); mySound.play() 你的路径中缺少 /
  • 我已经用新代码编辑了我的问题。我仍然需要帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多