我为游戏开发了一个简单的自定义chromecast接收器。
在其中我使用以下方式播放来自接收器javascript的短音:
this.bounceSound = new Audio("paddle.ogg");
在加载游戏时创建音频对象,然后使用:
this.bounceSound.play();
在游戏中需要时播放声音。
我的笔记本电脑上的Chrome工作正常,但在我的chromecast中运行接收器时,有些声音无法播放,有些则会延迟。
我选择音频文件的声音格式(.ogg)会不会有问题?
如果没有,还有什么可能是问题。
他们是否有关于声音文件细节(频率,位深度等)的最佳实践。
由于
答案 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的内存非常有限。确保这些声音很小并且都适合记忆。