如何給你的iOS遊戲加入動態背景音樂(泰然翻譯組出品)

來源:互聯網
上載者:User

翻譯:藍羽, benna , outman校對:Sharyu

 

還記得當索尼克開始潛水時,音樂變得戲劇化的情景嗎?很抱歉引起那些焦慮的回憶,但是這是動態背景音樂很好的一個例子。我將展示如何根據遊戲的動作增加無縫情緒變化的音樂。

 

WordSurge 一個強度上升的例子

這是我上個遊戲WordSurge的做法 隨著玩家形勢變得來越危險,音樂也逐漸層得激烈。請觀看下面的視頻

用蘋果的Garage Band 打造你自己的音樂

在你做任何事以前,你需要一些音樂。 開啟Garage Bandand,引導你內心的鐵斯托吧。註:鐵斯托,國際著名DJ。

建立相等長度的樂章

目標是建立相等長度的樂章,這樣遊戲的聲音引擎可以在它們之間無縫轉換。多長不重要,但必須相等。在WordSurge遊戲中,我用的是16秒的樂章,總共6樂章。

按順序從弱到強建立每個樂章。 當你完成後,應該像下面這樣,每個樂章越來越多的樂器使用。儲存你的項目。

 

禁用標準化

在你開始儲存你的樂章前,你需要告訴Garage Band不要調整音量。預設的設定將會調整需輸出的音軌音量,使它儘可能大聲。然而,這樣會改變本章節相對於整個歌曲的響度,在Garage Band進階參數選擇菜單內可以禁用標準化。

裁剪樂章和匯出

高亮除了你的第一樂章外的所有東西並臨時刪除它們。看起來如:

 

在Share菜單,選擇匯出歌曲到硬碟。

 

設定成The high quality高品質是合適的

 

 

 

 

 

將檔案命名為1.m4a。

注意Garage Band匯出一個音頻檔案稍微比你想象得長一些。它包含了額外的迴音和淡出效果,而且你需要讓你的背景音樂聽起來天衣無縫。因為你在播放這些音軌時它們之間會相互重疊,所以它們都必須同步,之後將會有更詳細的說明。

撤銷或者恢複到你儲存之前,重新得到你歌曲的其他部分。為每個樂章重複剪下和匯出過程。最後你將得到一系列的音樂,名字是1.m4a、2.m4a、3.m4a等等。

 

同時,返回至Xcode

我在這個遊戲中使用cocos2d,這使得定時操作非常簡單。而且它裝載了Steve Oldmeadow超級棒的CocosDenshion聲音庫。

開啟你的遊戲項目並將你的檔案拖入你項目中的Resource檔案夾。

將如下代碼放在你代碼的最上面:

  1. #import "SimpleAudioEngine.h"

在初始化方法中聲明

安排你的背景音樂管理器每X秒運行一次,X是你樂章的長度。

  1. [self schedule:@selector(backgroundMusicManager) interval:16];

預先載入你的音效檔到記憶體中

  1. [[SimpleAudioEngine sharedEngine] preloadEffect:@"1.m4a"];
  2.  
  3. [[SimpleAudioEngine sharedEngine] preloadEffect:@"2.m4a"];
  4.  
  5. [[SimpleAudioEngine sharedEngine] preloadEffect:@"3.m4a"];
  6.  
  7. [[SimpleAudioEngine sharedEngine] preloadEffect:@"4.m4a"];
  8.  
  9. [[SimpleAudioEngine sharedEngine] preloadEffect:@"5.m4a"];
  10.  
  11. [[SimpleAudioEngine sharedEngine] preloadEffect:@"6.m4a"];

最後,啟動音樂管理器,讓其第一次運行。否則,第一次運行只會在16秒之後才發生。

  1. [self backgroundMusicManager];

你的音樂管理器方法

  1. -(void) backgroundMusicManager {
  2.  
  3. float intensity;
  4.  
  5. /*用自己的代碼控制你的音樂所處的強度*/
  6.  
  7. if(intensity >=0&& intensity <0.1666f){
  8.  
  9. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"1.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  10.  
  11. }elseif(intensity >=0.1666f&& intensity <0.3333f){
  12.  
  13. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"2.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  14.  
  15. }elseif(intensity >=0.3333f&& intensity <0.5f){
  16.  
  17. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"3.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  18.  
  19. }elseif(intensity >=0.5f&& intensity <0.6666f){
  20.  
  21. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"4.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  22.  
  23. }elseif(intensity >=0.6666f&& intensity <0.8333f){
  24.  
  25. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"5.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  26.  
  27. }elseif(intensity >=0.8333f){
  28.  
  29. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"6.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  30.  
  31. }else{
  32.  
  33. lastBGSoundPlaying =[[SimpleAudioEngine sharedEngine] playEffect:@"1.m4a" pitch:1.0f pan:0.0f gain:0.35f];
  34.  
  35. }
  36.  
  37. }

記得為什麼這些音軌都稍長於16秒嗎?因為它們包含了回聲和淡出效果。這就是我為什麼用playEffect方法來替代cocosDenshion播放背景音樂方法。這樣可以使音軌在精確的時間依次重疊,從而得到不錯的無縫拼接效果。

你在運行這段代碼前,你需要寫一個新的方法來判斷你的遊戲目前所處的強度。在 wordSurge裡,我使用了玩家剩餘生命值和螢幕中氣泡的數量結合因素來判斷。使用玩家的生命值是合理的選擇,但你的遊戲是獨特的,你可以在這充分發揮創造力。

補充的小竅門

你需要關注記憶體使用量情況。如果預先載入音樂後遇到了記憶體限制,你可能需要降低混音到單聲道,或者更低的音樂採樣率(kHz),比如22.050. 確保通過setMixSampleRate方法讓cocosDenshion運行在該採樣率上。

如需完整的最佳化,要確保所有的音效檔使用相同的採樣率。

調整增益設定,使你的背景音樂與其他聲音很好的融合在一起。一般來說,你需要讓背景音樂安靜一些。如果播放多種音效的時候聽到砰啪的聲音,你背景音樂的增益就過大了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.