一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

播放聲音文件 函數(shù)playsound()

 桔梗花好月圓 2011-07-28

// test2.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <mmsystem.h>
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   // TODO: Place code here.
    PlaySound(TEXT("C:\\WINNT\\Media\\tada.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
// http://zhidao.baidu.com/question/41366091.html
// http://www./forum/thread-250-1-1.html
MessageBox(NULL , TEXT("你是笨蛋") ,TEXT("測試") ,MB_OK|MB_OKCANCEL);
// SendMessage(HWND_BROADCAST,   WM_SYSCOMMAND,   SC_MONITORPOWER,   2);
    //關(guān)閉顯示器
return 0;
}

 

播放聲音文件
1)用途:游戲里播放音樂;自己動(dòng)手給女友做音樂賀卡(圖片、滾動(dòng)的字母、溫馨的音樂)
2)可以使用PlaySound()函數(shù)播放聲音文件,該函數(shù)原型位于#include <mmsystem.h>, 因此要使用PlaySound,首先需要添加對這個(gè)頭文件的引用。
提示:mm就是MultiMedia的簡寫,多媒體
3)函數(shù)原型為: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
返回值表示是否播放成功。
參數(shù)pszSound是要播放聲音的文件名,只支持WAV等格式的文件;去mp3.baidu.com用“wav”為關(guān)鍵詞可以搜到很多wav音樂,也可以用工具將其他格式的轉(zhuǎn)換為wav格式的。
參數(shù)hmod是應(yīng)用程序的實(shí)例句柄,一般傳遞NULL就可以;
參數(shù)fdwSound是標(biāo)志的組合掩碼,可選值有SND_FILENAMESND_ASYNC、SND_SYNC等。SND_FILENAME表示pszSound參數(shù)指定的是文件名(pszSound還可以指定資源、內(nèi)存音樂、系統(tǒng)音樂等等);SND_ASYNC:用異步方式播放聲音,PlaySound函數(shù)在開始播放后立即返回;SND_SYNC:同步播放聲音,在播放完后PlaySound函數(shù)才返回;SND_LOOP一遍遍的重復(fù)播放聲音,必須與SND_ASYNC標(biāo)志一塊使用。
4)使用舉例:
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP 啟動(dòng).wav"),NULL,SND_FILENAME|SND_SYNC);
注意的問題:文件名中的反斜線要用“\\”,因?yàn)?/font>C語言中“\”默認(rèn)是轉(zhuǎn)義符,如果要表示“\”則需要使用“\\”,對這點(diǎn)不明白的請回去翻一下C語言的書;對中文字符串要使用TEXT宏。
5)為啥構(gòu)建不通過?
#include <mmsystem.h>只是保證編譯通過,還要設(shè)定link。
解決方案:工程上點(diǎn)擊右鍵,選“工程設(shè)置”,連接,添加“winmm”庫。
解決此問題時(shí)參考的文章:http://hi.baidu.com/big_foot/blog/item/4822fcd11a7f7cd6562c84e7.html。它雖然描述的是VC中解決此問題的方式,但是記住“一通百通”這個(gè)道理,C-Free中添加Link庫的方式和VC非常相似,只是操作步驟不同而已。

附錄:VC中添加Link庫的方式:
project->setting->Link 下的 Object/library modules 里加入winmm.lib即可”,他這里用的是英文版,中文版應(yīng)該是主菜單的【工程】→【設(shè)置】→【連接】,將“winmm.lib”加入到“對象/庫模塊”中。
6)接上面的問題:關(guān)于link
一個(gè)程序由源代碼變成exe文件有兩步:編譯Compile;連接Link。編譯是把c文件編譯成.o、.obj文件,而連接則是把這些.o、.obj、.lib等文件連接到一起成為exe文件。這點(diǎn)不清楚的請回去查看C語言的教材。
那什么是*.lib文件呢?大家以前用TC開發(fā)程序的時(shí)候用的都是C語言內(nèi)置的函數(shù),所以不存在使用非內(nèi)置函數(shù)的情況。但是在開發(fā)大程序的時(shí)候要大量用到非內(nèi)置的函數(shù),比如PlaySoundMessageBox等等。在使用這些函數(shù)的時(shí)候需要使用兩部分,一部分是*.h頭文件,它定義了函數(shù)的參數(shù)和返回值,另一部分是*.lib文件,是用來進(jìn)行程序鏈接用的。C程序的構(gòu)建分為編譯(Compile)和連接(Link)兩個(gè)過程Compile是把源代碼編譯成*.obj文件,每個(gè)源碼文件都對應(yīng)一個(gè)*.obj文件,而連接則是把這些*.obj文件以及使用到的非內(nèi)置函數(shù)的*.lib文件連接成一個(gè)*.exe文件。所以無論是忘了include *.h文件,還是丟了*.lib文件,都會(huì)構(gòu)建出錯(cuò)。從上面的報(bào)錯(cuò)信息可以看出來是Compile成功,但是Link失敗。一定要記得C程序編譯的這兩個(gè)過程,面試、筆試的時(shí)候???。
7)同步播放音樂
PlaySound("C:\\WINDOWS\\Media\\Windows XP 關(guān)機(jī).wav",NULL,SND_FILENAME|SND_SYNC);
8)體會(huì)同步播放和異步播放的差異:

PlaySound("C:\\WINDOWS\\Media\\Windows XP
關(guān)機(jī).wav",NULL,SND_FILENAME|SND_SYNC);

MessageBox(NULL,"
同步播放完畢","信息",MB_OK);

PlaySound("C:\\WINDOWS\\Media\\Windows XP
關(guān)機(jī).wav",NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,"
異步播放立即返回","信息",MB_OK);
      同步模式:音樂播放過程中函數(shù)不返回,播放完成才返回
      異步播放在做游戲等需要播放時(shí)間較長的音樂時(shí)使用,因?yàn)槌绦虿粫?huì)在音樂播放過程中有假死的情況。
有沒有同學(xué)注意到第二個(gè)對話框如果快速關(guān)閉的話音樂會(huì)中途停止?這是因?yàn)槌绦蛲顺鲆魳肪椭袛嗖シ帕恕S脩絷P(guān)了游戲,音樂也不能繼續(xù)播放,應(yīng)該停止,所以很合理
9)我可以做一個(gè)小程序,別人在我小程序運(yùn)行的時(shí)候一直聽播放的音樂,用異步方式可以保證音樂在后臺(tái)播放??梢灾荒懿シ乓槐椋懿荒芤魳穪砘貋砣サ牟粩嗖シ拍??答案是使用SND_LOOP標(biāo)志。
Loop:循環(huán)
PlaySound("C:\\WINDOWS\\Media\\Windows XP 關(guān)機(jī).wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
10)如果我做一個(gè)小游戲,那么希望向上邊那樣不斷播放,可以到達(dá)一個(gè)關(guān)卡的時(shí)候希望停止原來的音樂怎么辦?

PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP
啟動(dòng).wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);


PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP
關(guān)機(jī).wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

只能同時(shí)播放一段音樂,啟動(dòng)新的、舊的就被停了
11)如果只是想停止目前的播放而不播放新音樂呢?
      只要給PlaySound的第一參數(shù)傳遞NULL就可以停止目前的播放了。

PlaySound("C:\\WINDOWS\\Media\\Windows XP
關(guān)機(jī).wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

MessageBox(NULL,"
點(diǎn)確定終止音樂","信息",MB_OK);

PlaySound(NULL,NULL,SND_FILENAME);


MessageBox(NULL,"
音樂被終止","信息",MB_OK);
12)關(guān)于PlaySound函數(shù)更多的介紹見:http://zhidao.baidu.com/question/41366091.html
9、關(guān)于API
1)什么叫API(應(yīng)用程序接口Application Interface的簡稱)?什么叫Win32 API?API就是操作系統(tǒng)提供的一堆庫函數(shù),沒啥稀奇的。printf、scanfC語言內(nèi)置的函數(shù),其他的非內(nèi)置的庫函數(shù)都叫API。
2)我想找實(shí)現(xiàn)某個(gè)功能的API怎么辦?以“關(guān)閉顯示器”為例講解自學(xué)過程。
3)怎么我查看MessageBox函數(shù)其實(shí)是MessageBoxWMessageBoxA兩個(gè)函數(shù)的宏定義?Win32API中還有大量這種風(fēng)格的函數(shù)。W結(jié)尾的是把字符當(dāng)成Unicode處理的,A結(jié)尾的是把字符當(dāng)成ASCII處理的。使用時(shí)不要直接調(diào)用W結(jié)尾的或者A結(jié)尾的。編譯器會(huì)在編譯時(shí)確定調(diào)用哪個(gè)。
4Win32API是語言無關(guān)的,這點(diǎn)是非常重要的。Win32API是操作系統(tǒng)提供的庫函數(shù),可以在C語言中調(diào)用,也可以在C++中調(diào)用,還可以在C#Java、DelphiPython、匯編等各種語言中調(diào)用,因此學(xué)會(huì)了我們這里的C語言Windows程序開發(fā)以后只要熟悉一下其他語言的語法就可以很快的用其他語言開發(fā)Windows程序,VC、C#、Delphi等語言中的程序界面、網(wǎng)絡(luò)操作、文件操作等功能都是對Win32API的簡單包裝而已

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产一级性生活录像片| 人人爽夜夜爽夜夜爽精品视频| 国产又大又黄又粗又免费| 在线免费观看黄色美女| 亚洲欧美日韩国产成人| 丰满人妻少妇精品一区二区三区| 午夜精品国产精品久久久| 国产精品午夜福利免费在线| 欧美日韩一级黄片免费观看| 亚洲天堂男人在线观看| 五月婷婷六月丁香亚洲| 午夜精品麻豆视频91| 小草少妇视频免费看视频| 女厕偷窥一区二区三区在线| 国产盗摄精品一区二区视频| 中文字幕乱码一区二区三区四区 | 日韩欧美国产亚洲一区| 狠狠做五月深爱婷婷综合| 韩日黄片在线免费观看| 欧美熟妇一区二区在线| 国产精品日韩精品最新| 尤物天堂av一区二区| 91人妻人澡人人爽人人精品| 国产一级内片内射免费看| 色婷婷视频免费在线观看| 欧美人与动牲交a精品| 高清免费在线不卡视频| 好吊妞视频只有这里有精品| 男人的天堂的视频东京热| 人妻亚洲一区二区三区| 日本国产欧美精品视频| 亚洲日本久久国产精品久久| 日本视频在线观看不卡| 亚洲国产另类久久精品| 日本亚洲精品在线观看| 国产免费观看一区二区| 91蜜臀精品一区二区三区| 国产91人妻精品一区二区三区 | 沐浴偷拍一区二区视频| 欧美日不卡无在线一区| 久久久精品日韩欧美丰满|