列舉一點:有些遊戲的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的&
相关文章