12

我正在写一个html页面。我希望它在运行时发出一些 javascript 指定的声音。

在 html 中,正如我在此处阅读的答案中所建议的那样,我有一行

<embed src="wavs/beep.wav" autostart="true" width="0" height="0" id="beep" 
  enablejavascript="true">

这会在加载时播放声音,所以我确信我已经给出了有效 .wav 文件的有效路径。(一旦一切正常,我会将自动启动设置为 false。)

我有一个功能

function playSound ( soundname )   
  {
    var thissound = document.getElementById( soundname );
    thissound.Play();
    alert( "Played " + soundname );
  }

我称之为使用

  playSound( "beep" );

但是当那个电话被打出来时,没有声音,尽管警报发生了。在我看来,好像我正在按照推荐的方式做所有事情,但我一定是做错了什么。接下来我应该检查什么?

4

4 回答 4

21

使用原生 HTML5 音频 API

在 Chrome 的控制台中尝试创建一个 Audio 元素的新实例,传入你想要缓冲的声音的路径。例如,如果我们想要打字机的声音,我们可以这样做:

const typeWriter = new Audio("https://www.freesound.org/data/previews/256/256458_4772965-lq.mp3");

注意:要让这个确切的声音缓冲并避免 CSRF 问题,您必须在www.freesound.org的控制台中工作

typeWriter现在代表一个 html 音频标签。

尝试通过设置来制作声音循环typeWriter.loop = true

typeWriter.play()最后,用&播放/暂停声音typeWriter.pause()

于 2014-12-09T07:02:49.990 回答
5

试过这段代码,在大多数使用下面js方法的浏览器中运行良好

function playSound(soundfile_ogg, soundfile_mp, soundfile_ma) {
    if ("Audio" in window) {
        var a = new Audio();
        if (!!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"')
                .replace(/no/, '')))
            a.src = soundfile_ogg;
        else if (!!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/,
                '')))
            a.src = soundfile_mp;
        else if (!!(a.canPlayType && a.canPlayType(
                'audio/mp4; codecs="mp4a.40.2"').replace(/no/, '')))
            a.src = soundfile_ma;
        else
            a.src = soundfile_mp;

        a.autoplay = true;
        return;
    }
}
于 2013-12-28T23:32:42.613 回答
2

您收到错误,因为 getElementById 为您提供了嵌入元素而不是音频元素。embed element不知道怎么玩。也就是说,embed element中没有播放方法。使用以下代码正常播放。

<html>
<script>
function playSound ( soundname )
  {
    var thissound = document.getElementById( soundname );
    thissound.play();
    alert( "Played " + soundname );
  }
</script>
<body>
  <audio src="wavs/beep.wav" id="beep" autostart="false"></audio>
  <input type=button onclick="playSound('beep')">play</input>
  </body>
  </html>

再来一注。根据您可能想要支持的浏览器,您需要定义多个版本的音频源。有关详细信息,请参阅

于 2013-09-11T12:09:15.057 回答
1

不应该是 .play() - 带有小写的“p”吗?

根据您想要支持的浏览器,您可能需要考虑用<embed>HTML5<audio>标记替换您的:http: //www.storiesinflight.com/html5/audio.html。这个页面也有一些工作的 js 示例!

于 2013-09-11T11:53:38.260 回答