国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

游戲音樂與音效的播放

游戲音樂與音效的播放

更新時間:2021-11-16 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

在Win32環(huán)境下,播放音樂音效的方法太多了,而且有一個共同點(diǎn)就是:你不需要花很大的心力就可以得到你需要的東西。延續(xù)主題式的探討,這一期我們著重在音樂與音效的播放。

□ 游戲的配樂

我相信很多人一定同意音樂在游戲里面所占的地位,回想一下國內(nèi)RPG的經(jīng)典「仙劍奇?zhèn)b傳」,剝掉音樂這一個層面,整個游戲?qū)d色不少,尤其適當(dāng)?shù)膱鼍按钆溥m當(dāng)?shù)囊魳罚茏屚婕胰谌雱∏楫?dāng)中。該哭的時候哭,該笑的時候笑,大概就很切中要領(lǐng)了。RPG剩下的音效部份,并不特別突出,大抵上知道砍人的時候有揮劍的聲音就可以了,所以在音效的表現(xiàn)方面,通常比較不那麼注重。而即時戰(zhàn)斗的游戲著重在廝殺的音效表現(xiàn)上,一大片人馬,一片混雜的聲音,這其中牽涉到混音的部份,我們底下也會探討到。讀完這篇文章,你會學(xué)習(xí)到什麼時候該用什麼樣的程式作法來表現(xiàn)游戲的另一個生命:音樂與音效。

□ 從MIDI開始

早期DOS下的音樂部份,大多數(shù)采用聲霸卡的規(guī)格,副檔名為CMF者便是這種格式,當(dāng)然游戲通常不會讓你看到真正的作法,但是內(nèi)部采用這種格式居多是無庸置疑的。而WINDOW下的游戲以光碟發(fā)行者居多,為了充分達(dá)到空間利用的階段,游戲中會大量使用WAV格式的檔案,或是直接將音樂燒成音軌的格式。尤其很多游戲喜歡采用第一片資料片,第二片音樂片的作法,平常不玩游戲還可以當(dāng)成音樂CD來聽,算是滿有質(zhì)感的一件事。當(dāng)然,我的意思是這些音樂必須要聲聲入耳,如果音樂本身庸庸碌碌的,即使燒成音軌,一樣是庸庸碌碌,改變不了這個事實(shí)。

在WINDOW下,考量到空間的大小,MIDI格式的音樂檔絕對是最佳的選擇,一首五分鐘的MIDI了不起十萬字元的大小,這跟WAV格式一分鐘占用量以MB計(jì),簡直是小巫見大巫,所以網(wǎng)站上的音樂,游戲的音樂,都很適合用MIDI來表現(xiàn),而音樂部份我個人注重旋律,至於一首音樂本身使用到的樂器數(shù)量,我倒是很少去注意,人的耳朵聽東西有一定的極限,只要不產(chǎn)生雜音,配合優(yōu)美的旋律,大致上都可以接受。

□ 播放MIDI的程式作法

游戲中播放音樂的要點(diǎn)就是循環(huán)播放,也就是播放完畢以後,要讓他從頭開始播放,直到場景更換,或是游戲結(jié)束為止。所以當(dāng)MIDI檔案播放完畢以後,必須要能通知程式,讓程式做出適當(dāng)?shù)奶幚怼2シ臡IDI的作法只要藉由WINDOW的多媒體的支援,馬上就搞定了,甚至直接從HELP的作法剪過來,稍微修改一下,也能符合需要,因?yàn)檫@種東西相當(dāng)公式化,A君和B君寫出來的程式碼也大致上會長得差不多,廢話不多說,看看程式多麼簡單便是:

class CMidi

{

public:

    DWORD Play(HWND,char* FileName);

    void Replay();

    void Stop();

    private:

    UINT wDeviceID;//MCI裝置代號

    DWORD dwReturn;

    MCI_OPEN_PARMS mciOpenParms;

    MCI_PLAY_PARMS mciPlayParms;

    MCI_STATUS_PARMS mciStatusParms;

    MCI_SEQ_SET_PARMS mciSeqSetParms;

};

將他包裝成一個類別來使用也可以,而介面的部份需要單純化,從直覺上來說,第一個動作就是播放(Play),接著是重播(Replay),最後當(dāng)然是善後的工作了(Stop),不多不少,剛好三個,當(dāng)然你會想到,是不是需要一個暫停的介面,沒問題,這不是什麼難事,花額外的三分鐘應(yīng)該可以勝任愉快。

了解類別大致上的長相以後,讓我們來看看實(shí)作的部份是怎麼一回事,先從CMidi::Play()開始:

DWORD CMidi::Play(HWND hwnd,char* MidiFile)

{

    // 開啟Midi的硬體裝置,我們使用一般內(nèi)定值

    mciOpenParms.lpstrDeviceType = "sequencer";

    //這個叁數(shù)就是要播放的MIDI檔案名稱

    mciOpenParms.lpstrElementName = MidiFile;

    // 使用Message的方式來播放MIDI而不是STRING的方式

    if (dwReturn = mciSendCommand(NULL, MCI_OPEN,

    MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,

    (DWORD)(LPVOID) &mciOpenParms)

    return (dwReturn);

    // The device opened successfully; get the device ID.

    wDeviceID = mciOpenParms.wDeviceID;

    // Check if the output port is the MIDI mapper.

    mciStatusParms.dwItem = MCI_SEQ_STATUS_PORT;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_STATUS,

        MCI_STATUS_ITEM, (DWORD)(LPVOID) &mciStatusParms))

        {

            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

            return (dwReturn);

        }

        // 為了達(dá)成重復(fù)播放的目的,必須讓我們的程式能夠接收到

        // MM_MCINOTIFY的訊息,這個函示呼叫的方式,就是傳遞

        // WM_PLAY訊息給裝置,叫他開始播放。

        mciPlayParms.dwCallback = (DWORD) hwnd;

        if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY,

        (DWORD)(LPVOID) &mciPlayParms))

        {

            mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

            return (dwReturn);

        }

    return (0L);

};

播放MIDI的方式有兩種,第一種是利用字串命令硬體動作,第二種是傳遞訊息的方式,我們采用第二種,原因很清楚了,必須透過訊息的傳遞,我們才能得知音樂是否播放完畢了。

接下來我們看看Cmidi::Replay是怎麼一回事:

void CMidi::Replay()

{

        mciSendCommand(wDeviceID, MCI_SEEK,MCI_SEEK_TO_START, NULL);

        mciSendCommand(wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);

}

真是不可思議地簡單呀,函示里面只包含兩條呼叫,第一條呼叫送訊息給裝置,叫他把MIDI的播放指標(biāo)移到最開頭的部份,也就是MCI_SEEK_TO_START,

作法就像移動檔案指標(biāo)一樣。接著第二條指令光看也明白,就是叫他繼續(xù)播放就是了,而且別忘了MCI_NOTIFY,當(dāng)下次播放完畢,還是得用訊息通知我們的程式。

最後看一下Cmidi::Stop()的作法:

void CMidi::Stop()

{

    mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

}

越來越單純了,里面只有包含一個函示呼叫,其中的訊息叁數(shù)MCI_CLOSE,就是結(jié)束整個音樂的播放。當(dāng)你結(jié)束播放以後,要播放另一首音樂,很簡單,再次呼叫Cmidi::Play()即可。

整個類別的使用方法大致上是這樣的:首先配置一個實(shí)際的CMidi物件給程式,只要在全域的地方下條指令 CMidi midi;即可,爾後midi就是真實(shí)的物件了。在場景初始化的部份呼叫midi.Play(hwnd,"ff3celes.mid");,輸入正確的MIDI檔名即可。此處我播放的是太空戰(zhàn)士三代的音樂,只是示范一下,當(dāng)然這首音樂確實(shí)很棒就是了。而在訊息回圈里面,我們必須定義一個訊息:

case MM_MCINOTIFY:

    midi.Replay();

    break;

在音樂播放完畢以後,我們的訊息回圈會收到MM_MCINOTIFY這個訊息,這時候如同我們前面所言,呼叫Cmidi::Replay()即可。而當(dāng)場景更換,要重新一首新的音樂,或是程式結(jié)束的時候,就是呼叫Cmidi::Stop()的時機(jī)。因?yàn)橐粋場景同時間只會存在一首音樂,所以我們的類別表現(xiàn)良好,不用擔(dān)心。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        884aa四虎影成人精品一区| 麻豆传媒一区二区三区| 午夜视频在线观看一区二区| 亚洲图片欧美综合| 欧美影院午夜播放| 国产精品国产三级国产普通话99 | 欧美色爱综合网| 亚洲动漫第一页| 欧美一级一级性生活免费录像| 日本不卡一区二区三区| 精品国产区一区| 91网站在线播放| 亚洲国产精品国自产拍av| 99综合电影在线视频| 一区二区日韩av| 精品国产一区二区三区av性色 | 欧美精品一区在线观看| 国产91精品露脸国语对白| 亚洲激情网站免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 九九久久精品视频| 亚洲婷婷在线视频| 欧美午夜精品一区| 蜜桃精品视频在线| 亚洲天堂成人网| 91麻豆精品91久久久久同性| 粉嫩蜜臀av国产精品网站| 亚洲精选视频免费看| 亚洲精品在线电影| 欧美人动与zoxxxx乱| 国产精品18久久久久久久网站| 亚洲四区在线观看| 日韩色视频在线观看| 色94色欧美sute亚洲线路二| 国产一区免费电影| 亚洲青青青在线视频| 欧美大胆人体bbbb| 欧美色手机在线观看| 成人美女视频在线观看18| 日韩福利电影在线| 亚洲欧美欧美一区二区三区| 国产欧美精品一区二区色综合 | 久久亚洲综合色一区二区三区| 日产精品久久久久久久性色| 久久影视一区二区| 久久国产精品99精品国产| 国产精品久久久久久久久久免费看| 欧美精品丝袜久久久中文字幕| 粗大黑人巨茎大战欧美成人| 久久成人综合网| 日韩一区欧美二区| 亚洲永久免费av| 夜夜亚洲天天久久| 一区二区三区精品久久久| 中文字幕欧美三区| 国产精品三级av| 国产精品久久久久aaaa| 久久久美女毛片| 日韩欧美色电影| 欧美久久高跟鞋激| 欧洲另类一二三四区| 在线看国产一区二区| 欧洲在线/亚洲| 欧美综合在线视频| 欧美揉bbbbb揉bbbbb| 欧美在线一二三四区| 欧美午夜电影网| 777亚洲妇女| 精品成人a区在线观看| 久久蜜臀精品av| 国产精品成人一区二区三区夜夜夜| 国产精品―色哟哟| 国产精品三级在线观看| 亚洲欧美在线视频观看| 亚洲精品视频在线看| 亚洲国产美女搞黄色| 日韩精品欧美成人高清一区二区| 日韩av一区二区三区| 国产曰批免费观看久久久| 成人国产免费视频| 日本道在线观看一区二区| 欧美男同性恋视频网站| 精品对白一区国产伦| 国产精品久久网站| 五月天欧美精品| 春色校园综合激情亚洲| 精品视频在线看| 久久先锋资源网| 一区二区免费视频| 久久成人麻豆午夜电影| 972aa.com艺术欧美| 日韩精品一区在线| 一区二区三区久久| 国产福利精品一区二区| 欧美色综合网站| 日本一区二区高清| 奇米影视7777精品一区二区| 成人av在线一区二区三区| 欧美电影一区二区三区| 国产精品毛片大码女人| 日本不卡不码高清免费观看 | 日本一二三不卡| 亚洲午夜久久久久久久久久久| 国产麻豆精品久久一二三| 在线亚洲一区观看| 久久久久久99久久久精品网站| 亚洲国产成人va在线观看天堂| 成人综合在线观看| 久久综合一区二区| 日韩精品一区第一页| 91欧美一区二区| 国产精品无码永久免费888| 一本久久a久久精品亚洲| 在线综合+亚洲+欧美中文字幕| 最新日韩av在线| 成人午夜免费av| 欧美精品一区二区三区在线| 天堂蜜桃一区二区三区| 欧洲国内综合视频| 亚洲另类色综合网站| 99久久精品费精品国产一区二区| 亚洲精品一区二区三区在线观看| 日本va欧美va瓶| 337p亚洲精品色噜噜| 亚洲成人av免费| 4438x亚洲最大成人网| 偷窥少妇高潮呻吟av久久免费| 欧美影片第一页| 三级久久三级久久久| 精品视频色一区| 视频一区国产视频| 欧美一区二区三级| 日韩国产成人精品| 欧美成人一区二区三区在线观看| 秋霞电影网一区二区| 欧美成人一区二区三区片免费| 老司机一区二区| 久久久久久久精| 波多野结衣亚洲| 一区二区欧美国产| 91精品黄色片免费大全| 日本欧美一区二区在线观看| 日韩一区二区三区免费观看| 久久精品国产一区二区| 国产亚洲欧美日韩在线一区| 国产91高潮流白浆在线麻豆| 久久精品夜色噜噜亚洲aⅴ| 成人动漫视频在线| 亚洲免费色视频| 91精品国产综合久久久久久久 | 国产69精品久久久久777| 中文字幕日韩一区二区| 欧美天堂亚洲电影院在线播放| 天堂成人国产精品一区| 26uuu另类欧美| 一本大道久久精品懂色aⅴ | 国内精品伊人久久久久影院对白| 欧美v亚洲v综合ⅴ国产v| 国产成人免费视| 一区二区免费在线播放| 日韩三级视频在线看| 成人av在线观| 日韩精品三区四区| 国产亚洲精品bt天堂精选| 在线视频观看一区| 韩国精品一区二区| 亚洲一区电影777| 欧美成人精品3d动漫h| 99久久国产综合色|国产精品| 日韩一区欧美二区| 国产精品美女一区二区三区 | 99精品热视频| 日韩国产欧美在线播放| 国产精品乱码人人做人人爱 | 欧美日韩在线观看一区二区| 国模大尺度一区二区三区| 免费在线观看一区二区三区| 国产日本亚洲高清| 欧美一区二区播放| 在线观看亚洲精品| 国产传媒日韩欧美成人| 偷拍一区二区三区四区| 亚洲色图第一区| 国产欧美日韩在线看| 3d成人动漫网站| 欧美日韩在线一区二区| av午夜精品一区二区三区| 国产在线精品一区二区不卡了 | 国产精品国产精品国产专区不蜜| 日韩免费看网站| 在线成人免费观看| 在线中文字幕一区二区| 成人免费视频caoporn| 国内一区二区在线| 久久精品国产亚洲5555| 日韩成人av影视| 日本中文字幕一区二区有限公司| 亚洲最大成人网4388xx| 国产精品久久久久毛片软件| 国产午夜亚洲精品羞羞网站|