列举一点:有些游戏的BGM做得很流畅,有些做得就断断续续的,很明显可以听出两首音乐连接的地方。游戏不同于电影,玩家进行游戏的时间常常是不可预知的,那么如何设置一段「足够长」的背景音乐,是不是常常用「循环」的方式?如果一首音乐还没有放完,切换场景后另一首音乐又是如何流畅地跟上的?


国外大作多有大神配乐师坐镇,质量没的说。像COD就是请到为盗梦空间,加勒比海盗配乐的Hans Zimmer 来为游戏配乐。国内多数公司都是外包制作,bgm质量与外包团队质量还有跟进质量相关。很多游戏都是bgm凑合能听就过了,没有像其他功能那样精益求精。少部分大型公司自己拥有音效团队,这样交接起来会更方便,质量也更高。
http://inpla.net/forum.php?mod=viewthreadtid=5852

说到游戏BGM,不免想到月之门。很多游戏公司都把BGM外包给他。

月之门简介:月之门游戏音乐制作室隶属于月之门配乐工作室,其前身是位于演音大楼的广东省歌舞剧院录音室。2001年原录音室主创人员成立月之门配乐工作室,经过7年的发展,月之门已经成为目前国内最专业的游戏音乐制作室之一,集游戏音乐创作、数码音乐制作、器乐录制、后期合成于一体,在过去的几年时间里,已为国内20多部游戏及相关行业创作了大量优秀的游戏背景、片头CG和宣传广告音乐,风格涵盖古典武侠、上古神幻、休闲益智、近代民族等类别。

官网:游戏音乐制作,游戏音乐外包,游戏背景音乐制作,网页游戏音乐外包,最好的游戏音乐工作室--月之门游戏音乐制作室官方网站

这里有一篇月之门为某游戏创作BGM相关专访:

专访:月之门的国风情结游戏BGM循环或衔接,感觉现在采用音乐音量逐渐减弱淡出,再逐渐增大淡入来平缓过渡并无明显不流畅感 >。<

谢邀(第一次收到邀请的说)

题主问的问题主要是针对过渡。游戏内背景音乐的过渡,基本都是用淡入淡出的方式来做的。另外游戏本身内置的音乐是不会很多的,所以循环播放的情况很正常

所以东方projectr系列

几乎由ZUN一手包办游戏制作、发行全事宜的那几代(基本上扣掉格斗游戏就是了)大多都是采取弹幕游戏(大多采纵轴卷动的射击游戏)的做法

因为这样比较能控制玩家游玩时间与背景音乐的契合度

(2016/11/23 21:09补充

也就是说,弹幕游戏在打王前(在东方project的话,术语是叫"道中"啦),是采取拖时间的做法其实RPG或其它游戏也可以考虑用自己拖时间的方式拖到让音乐转换顺利些但这是弹幕游戏天生的优势,比较能拖时间脱得不著痕迹但另一方面就是,这样做是先做好音乐之后再开始著手设计弹幕具体内容而绝大多数的游戏都是先做好之后再找适合的音乐开发流程略有不同!!)

不过上述那是ZUN的事情

我们可以考虑用以下的方法来做

首先,背景音乐或音效不一定要从头开始播放

当然如果会剪接的话其实都可以把头调整成想要的可是那样在循环时就会有麻烦以下是示范HTML5与javascript的做法基本上就是利用音乐(audio标签)的currentTime属性来调整音乐的开头

但纯粹示范这个实在没太大意义

那来介绍两首歌吧

品冠、梁静茹的《明明很爱你》

与张智成的《May I love you》

为什么要提这两首歌呢?

因为《明明很爱你》的 「有人捧花总是拥挤」与《May I love you》的「一步一步华丽到荒芜」有点像所以两首理论上唱到那句时可以切到另一首歌的下一句

用的音乐档案是这两首

《明明很爱你》↓

https://www.youtube.com/watch?v=m-7XThAMdSo

「有人捧花总是拥挤」差不多是在1分06秒结束

《May I love you》↓

https://www.youtube.com/watch?v=iBI4ONlz9Os「华丽到荒芜」的下一句差不多是从1分52秒开始唱

虽然我认真的重听了两首以后感觉好像不太一样

但我记得有句旋律跟华丽到荒芜很像的另一首歌不过一时想不起来就先死马当活马医了(2016/11/24想起来了,是同一首歌「没勇气的人忧郁(犹豫,不过唱起来像)的瞬间」)

但总之

有了这些资讯与那两个音乐档之后我们可以开始写程式模拟两背景音乐间的切换

HTML5与javascript的程式码(或者说HTML档内容)如下

---------------------------------------------------

&

& &&

&

&

&

var timer_id = setInterval(check_music,1000);

function check_music()

{ //console.log(music_element.currentTime);

if (music_element.currentTime&>=66)

{ clearInterval(timer_id); //清空计时器,不然可能会有两首歌循环播放的现象产生 music_element.setAttribute("src","May_I_Love_You.mp3"); music_element.currentTime=112;

music_element.play();

} } &&&

---------------------------------------------------

把上述两段

「------------------------------------------------- --」之间的内容复制贴上到Notepad(记事本)另存新档,把档案类型选成 全部类型 (*.*)再随便打个 档名.htm或 档名.html存档后把两个音乐档拉到相同路径底下(音乐档名要一致,可以考虑改程式码或者是改音乐档名)再执行就有效果了虽然以目前的写法要等个一分钟才有感觉

嗯,时间用66跟112的原因是因为

以秒为单位虽然currentTime的值可能是 XXX.XXXXXX 秒这样(也就是虽然是以秒为单位,但是其实值是有带小数的,可以做到更精准的音乐片段定位)

因此在判断式中写的判断条件是 &>=

(所以这样实际运作时也许会有点破绽,这算偷懒的做法)然后这程式没写淡入淡出(也就是音乐逐渐大声、音乐逐渐小声)因为我觉得写那个比较没意思应该是查下W3Cschools的&
相关文章