首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML5 MP3 <audio>未正确加载

HTML5 MP3 <audio>未正确加载
EN

Stack Overflow用户
提问于 2012-11-10 22:49:59
回答 2查看 2.6K关注 0票数 0

好的,我的新网站刚刚通过Google现场发布。在云雀上,我决定包括一个javascript / HTML5月球登陆者克隆人(火星登陆者),这是我不久前作为练习而写的。当我在本地打开游戏时,它工作得很好,但是当它通过GAE传递时,声音似乎并不会加载到每个系统上。在机动狩猎中,他们都没有装载。在桌面的safari中,它们都可靠地加载在我的计算机上,而不是在其他计算机上。在Chrome中(在桌面上),它似乎能工作,但在iOS中,只有一个声音负载。在桌面上,它似乎总是相同的声音,失败加载(explode1.mp3),这是最小的声音,我正在加载。如你所见,如果你点击那个链接,声音可以从服务器下载.

起初,这个问题似乎与区分大小写有关,所以我在文件名中切换了大小写,但是这个修复程序没有继续工作。这是一个问题,因为我的加载栏与加载了多少资源直接相关,所以它只是坐在那里等待GET请求而没有回复.是否有人经历过这样的情况: GET没有收到对特定资源的答复,但是直接加载资源很好?

我应该说,我对大多数这些技术都很陌生,所以我很可能只是犯了一些新手的错误。不幸的是,我不知道这些新手会犯什么错误,因为我是个新手!

下面是我用来加载声音的代码:

代码语言:javascript
复制
function loadSound(soundName) {
    var newElement = document.createElement("audio");
    newElement.addEventListener("canplaythrough", assetLoaded, false);
    document.body.appendChild(newElement);

    var audioType = supportedAudioFormat(newElement);
    if (audioType == "") {
        alert("no audio support");
        return;
    }
    newElement.setAttribute("src", "lander/sounds/" + soundName + "." + audioType);

    console.log("loading sound " + newElement.src + "...");

    return newElement;
}

还有..。

代码语言:javascript
复制
function assetLoaded() {
    var assetName = this.src;

    numAssetsLoaded++;

    console.log("loaded asset " + numAssetsLoaded + " (" + assetName + ")");

    if (numAssetsLoaded >= numAssetsToLoad) {
        shipSpriteSheet.removeEventListener("load", assetLoaded, false);
        pointImage.removeEventListener("load", assetLoaded, false);

        thrustAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
        explosionAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
        victoryAudioElement.removeEventListener("canplaythrough", assetLoaded, false);
        musicTrackElement.removeEventListener("canplaythrough", assetLoaded, false);

        gameState = GAME_STATE_INIT;
    }
}

如果您查看控制台输出,您将看到所有声音都开始加载(特别是爆炸式1.mp3),但不一定要完成并调用assetLoaded.

更新:

大家的共识似乎是,我不应该使用mp3 (顺便说一句,我已经在使用mp3、AAC和ogg,但默认使用mp3),而且我应该使用Web。这些都是受欢迎的投入,我将作出必要的修改。然而,对于最初的问题,我仍然没有一个答案,那就是“为什么一个特定的声音不能可靠地加载到桌面上,而其他声音却没有问题?”有人想试试那个吗?或者,答案将是,“这些事情是高度不可预测的,没有办法解决它,除非切换到一个更可靠的方法,如Web”?

UDATE:

以下是我的app.yaml文件的摘录,据我所知,这有助于GAE设置服务器。

代码语言:javascript
复制
- url: /(.*\.(mp3|ogg|wav))
  static_files: \1
  upload: (.*\.(mp3|ogg|wav))
EN

回答 2

Stack Overflow用户

发布于 2012-11-11 13:54:19

一些需要注意的事情:

  • 不应该将MP3用于HTML5游戏
  • 您将需要双重编码您的所有声音到AAC (.m4a)和Ogg (.ogg),以确保他们可以在任何地方播放,因为没有一种格式可以在任何地方播放。
  • 您必须确保您的服务器对音频文件具有正确的MIME类型。一些浏览器会很高兴地播放音频,如果服务器说它有错误的MIME类型;另一些则会默默地失败。对于AAC和Ogg,类型分别为音频/MP4和音频/ogg。
  • 大多数移动设备一次只能播放一种声音,而iOS通常不允许播放音频,除非是在用户发起的输入事件(如touchstart)中。
  • 您可能希望使用支持的Web (Chrome和iOS 6+),因为即使在iOS上播放也更加可靠和多音--但请注意,iOS仍然是静音Web音频API,直到用户输入事件
票数 1
EN

Stack Overflow用户

发布于 2012-11-11 12:39:50

这不是一个直接回答你的问题,为什么声音没有被播放,但更像你应该如何处理你的游戏声音效果。

对于游戏的声音效果,我建议您使用HTML5网络音频API,它能更好地控制声音的播放方式(音效的音调、播放的延迟等):

http://www.html5rocks.com/en/tutorials/webaudio/intro/

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

https://stackoverflow.com/questions/13326829

复制
相关文章

相似问题

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