什么是从自定义chromecast接收器中的javascript播放音频的最佳音频文件格式

时间:2015-01-21 14:42:57

标签: javascript audio chromecast

我为游戏开发了一个简单的自定义chromecast接收器。

在其中我使用以下方式播放来自接收器javascript的短音:

 this.bounceSound = new Audio("paddle.ogg");

在加载游戏时创建音频对象,然后使用:

 this.bounceSound.play();

在游戏中需要时播放声音。

我的笔记本电脑上的Chrome工作正常,但在我的chromecast中运行接收器时,有些声音无法播放,有些则会延迟。

我选择音频文件的声音格式(.ogg)会不会有问题?

如果没有,还有什么可能是问题。

他们是否有关于声音文件细节(频率,位深度等)的最佳实践。

由于

2 个答案:

答案 0 :(得分:2)

仅为了记录,以避免其他开发人员同时试图加载和播放多个短声音的混淆:

  

在Chromecast上,HTML视频和音频标记仅支持   单个活动媒体元素一次。

(来源:https://plus.google.com/+LeonNicholls/posts/3Fq5jcbxipJ - 请务必阅读其余部分,其中还包含有关限制的重要信息)

只会加载一个音频元素,其他音频元素会收到错误代码4(至少在我的调试会话期间)。加载和播放几个短音的正确方法是使用网络音频API,正如Leon Nicholls在我上面链接的Google+帖子中所解释的那样。

简单的Web音频API包装器

我为JavaScript中的HTMLAudioElement添加了一个基于Web Audio API的粗略替代品:

function WebAudio(src) {
    if(src) this.load(src);
}

WebAudio.prototype.audioContext = new AudioContext;

WebAudio.prototype.load = function(src) {
    if(src) this.src = src;
    console.log('Loading audio ' + this.src);
    var self = this;
    var request = new XMLHttpRequest;
    request.open("GET", this.src, true);
    request.responseType = "arraybuffer";
    request.onload = function() {
        self.audioContext.decodeAudioData(request.response, function(buffer) {
            if (!buffer) {
                if(self.onerror) self.onerror();
                return;
            }

            self.buffer = buffer;

            if(self.onload)
                self.onload(self);
        }, function(error) {
            self.onerror(error);
        });
    };
    request.send();
};

WebAudio.prototype.play = function() {
    var source = this.audioContext.createBufferSource();
    source.buffer = this.buffer;
    source.connect(this.audioContext.destination);
    source.start(0);
};

可以按如下方式使用:

var audio1 = new WebAudio('sounds/sound1.ogg');
audio1.onload = function() {
    audio1.play();
}

var audio2 = new WebAudio('sounds/sound2.ogg');
audio2.onload = function() {
    audio2.play();
}

答案 1 :(得分:1)

您应该在开始游戏之前预先下载声音。另请注意,这些声音将存储在内存中,而Chromecast的内存非常有限。确保这些声音很小并且都适合记忆。