我正在计划一些HTML5 5/Javascript游戏。他们将是休闲游戏的大部分,但仍将受益于音乐和音响效果。我真的很想使用<canvas>
和<audio>
特性。我预计不需要播放任何电影文件,如.avi或.mp4。
但我遇到了一个问题。根据这张图表,不支持.wav或.ogg!而Safari不支持.ogg。
所以,现在我正在为应该使用什么浏览器的音频文件制作我自己的图表。到目前为止:
SFX Music
Desktop Chrome .wav .ogg
Desktop Firefox .wav .ogg
Desktop IE ??? ???
Desktop Safari .wav .m4a (alac)
Desktop Opera .wav .ogg
Mobile Chrome .wav .ogg
Mobile Firefox .wav .ogg
Mobile IE ??? ???
Mobile Safari .wav .m4a (alac)
Mobile Opera .wav .ogg
(我无法为Microsoft找到任何关于.wav或.ogg是否将在<audio>
标记中工作的信息。)
正如您所看到的,最大的问题在于。我应该使用什么音频格式的声音效果和音乐?
看来HTML5只支持3种类型: mp3、wav和ogg。所以对于Safari,如果可能的话,我需要一个插件或者某种方式来本地播放.m4a音乐。mp3是不可能的,因为荒谬的许可费。闪光灯/冲击波也是不可能的。
我读过一些叫做bgsound
的东西可以在IE中使用,但是它是“不标准的”。我以前从未用过它,也不知道它是什么。
那么我应该为IE使用什么样的音频格式呢?IE播放声音和音乐的“正常”方式是什么?我真的希望我不需要像Silverlight这样的插件,因为这对用户来说是一种痛苦,特别是休闲游戏用户。
发布于 2016-12-23 01:27:09
在Mozilla开发程序网站上,您可以找到以下信息:
无论如何,你需要知道让你的音频文件在所有浏览器上工作是一个真正的痛苦。首先要做的是链接3种格式,以便让浏览器选择它喜欢的一种,但即使这样,由于浏览器、版本等的高度多样性,您可能会遇到许多难以理解的问题。
注意:
尽管它没有回答这个问题,但我认为值得注意的是,一个简单的解决方案是不支持您的游戏的。大多数仍然使用IE的人要么是公司,要么是老年人。无论哪种方式,这些人不太可能玩你的游戏,所以,如果你没有陷入无用的麻烦试图使IE支持,你应该强调。
发布于 2017-01-27 20:21:04
首先问自己这个问题:为什么我要在游戏项目中使用网络技术?
如果答案与此类似:“因为我喜欢/更有效率地使用JavaScript编码”或"HTML+CSS节省了很多时间做GUI“等等。那么,今天有一些方法可以使用这些技术来开发桌面/移动应用程序。
对于桌面,您有电子和NW.js。在他们提供的所有优势中,对于你的具体问题,你只需要担心他们所支持的音频/视频格式。在玩游戏时,所有用户都将运行相同的运行时(相同的“浏览器”),不存在由不兼容的浏览器加载游戏页面的风险。
开发的处理方式与任何浏览器游戏几乎相同。兼容的html/css/JavaScript将只起作用,您甚至可以使用js库(如JQuery ),它们只会工作。另外,您可以使用浏览器中不可用的apis来使用文件系统。
现在,如果它必须是一个浏览器游戏,不管出于什么原因,那么您将不得不以通常的方式处理不同的浏览器,即提供每个媒体文件的多个版本。这篇文章浮现在脑海中:http://diveintohtml5.info/video.html
这篇文章是关于视频的,但是音频的策略是一样的。
<audio id="electric_discharge_audio">
<source src="snd/electric_discharge.ogg" type="audio/ogg" />
<source src="snd/electric_discharge.aac" type="audio/mp4" /> <!--MSIE-->
</audio>
或者使用JavaScript:
var audio = document.createElement("audio");
var source = document.createElement("source");
source.type = "audio/ogg";
source.src = "snd/electric_discharge.ogg";
audio.appendChild(source);
source = document.createElement("source");
source.type = "audio/mp4";
source.src = "snd/electric_discharge.aac";
audio.appendChild(source);
Game.Resources.Audio.ElectricDischarge = audio;
关于"wav“文件。在本地游戏中使用这种格式用于短音效的原因是,在将其编码为mp3/ogg/your_业余格式时,存储空间没有任何增益,对重要游戏音频效果中的音频伪影(子弹、魔法等)的恐惧,在较慢的机器中防止延迟解码(在某种程度上,背景音乐更容易容忍)。
“如果没人玩你的游戏,那就太可惜了,因为不是在10秒内下载,而是花了2分钟,其中1分50秒是下载WAV文件。这就像你的网站上所有的图片都是BMP格式的。没人会这么做!所以我们真的需要压缩格式。”(出发地:https://www.scirra.com/blog/44/on-html5-audio-formats-aac-and-ogg)
在使用web技术时,防止使用错误的声音效果的诀窍不是使用WAV格式。只要您没有检测到编码工件(如果您检测到编码工件,然后使用更高的比特率/质量设置),您就可以使用ogg (或它对每个浏览器的替代)。
诀窍是让音频资源在游戏/级别/区域/地图加载屏幕中预加载,并准备好在需要声音效果时播放。
这个问题将出现在真正的浏览器中,就像电子和NW.js这样的平台。根据设计,当您设置音频元素的src属性时,控制“浏览器”何时开始缓冲它是很棘手的。也许现在存在的一个JavaScript游戏引擎/媒体库可能会在这里有所帮助。
根据我自己的经验,不要相信本地存储将比网络更快。这不是一个本地存储读取速度问题,浏览器将需要缓冲一定数量的数据才能开始播放,您可能不需要关心这个背景音乐,但快速音频效果可能会使您的游戏感到尴尬和不专业,至少在第一次播放每个音频元素。而且已经缓存了它并不能使您免于这种情况,对于当前场景中将要使用的所有音频效果,您都需要有足够的缓冲数据,这样浏览器就可以在调用audio_element.play()时立即开始播放。对于简短的音频资源,预期它们将被全部缓冲,但当使用web技术时,我们对此的控制是有限的。
在这里,一个人正在使用一种技术,包括第一次播放音频,音量设置为0.00000001 (可能也只有0)。https://stackoverflow.com/questions/8375903/problems-preloading-audio-in-javascript
我认为这是可以接受的小音效。就像我说的,让背景音乐在任何时候开始。如果您想在没有奇怪的时间安排的情况下快速更改背景音乐,但同时防止一个非常大的音频文件在后台无声播放,那么您就可以使用canplay身事件来在有足够数据缓冲的情况下立即停止它。
关于非常老的IE版本(在11版之前):像大多数游戏开发人员使用非NVidia/AMD/英特尔 GPU一样(至少在桌面上是如此)。假装他们不存在。
因此,如果要支持多浏览器,您只需要关心Microsoft和11,而我对IE11并不十分确定。
我认为边缘不会给我们带来麻烦:https://blogs.windows.com/msedgedev/2016/04/18/webm-vp9-and-opus-support-in-microsoft-edge/#0SgrdYfAKrdXOpaY.97
Web :如果您决定完全忽略IE,您可以安全地使用它。我仍然需要在Edge中进行测试(如果您已经做了,可以随时编辑这个答案),但是我想它不会给我们带来麻烦。
https://gamedev.stackexchange.com/questions/134792
复制相似问题