日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关闭用playsound函数的WAV文件

發(fā)布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关闭用playsound函数的WAV文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

播放聲音文件 PlaySound函數應用

1.關閉用playsound函數的WAV文件

PlaySound(0,NULL,0);即可

?

?

?

?

// 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.rupeng.com/forum/thread-250-1-1.html
MessageBox(NULL , TEXT("你是笨蛋") ,TEXT("測試") ,MB_OK|MB_OKCANCEL);
// SendMessage(HWND_BROADCAST,?? WM_SYSCOMMAND,?? SC_MONITORPOWER,?? 2);
??? //關閉顯示器
return 0;
}

?

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

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

PlaySound("C://WINDOWS//Media//Windows XP
關機.wav",NULL,SND_FILENAME|SND_SYNC);

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

PlaySound("C://WINDOWS//Media//Windows XP
關機.wav",NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,"
異步播放立即返回","信息",MB_OK);
?? ?? 同步模式:音樂播放過程中函數不返回,播放完成才返回
?? ?? 異步播放在做游戲等需要播放時間較長的音樂時使用,因為程序不會在音樂播放過程中有假死的情況。
有沒有同學注意到第二個對話框如果快速關閉的話音樂會中途停止?這是因為程序退出音樂就中斷播放了。用戶關了游戲,音樂也不能繼續(xù)播放,應該停止,所以很合理
9)我可以做一個小程序,別人在我小程序運行的時候一直聽播放的音樂,用異步方式可以保證音樂在后臺播放。可以只能播放一遍,能不能音樂來回來去的不斷播放呢?答案是使用SND_LOOP標志。
Loop:循環(huán)
PlaySound("C://WINDOWS//Media//Windows XP 關機.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
10)如果我做一個小游戲,那么希望向上邊那樣不斷播放,可以到達一個關卡的時候希望停止原來的音樂怎么辦?

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

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


PlaySound(TEXT("C://WINDOWS//Media//Windows XP
關機.wav"),NULL,SND_FILENAME|SND_ASYNC);

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

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

PlaySound("C://WINDOWS//Media//Windows XP
關機.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

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

PlaySound(NULL,NULL,SND_FILENAME);


MessageBox(NULL,"
音樂被終止","信息",MB_OK);
12)關于PlaySound函數更多的介紹見:http://zhidao.baidu.com/question/41366091.html
9、關于API
1)什么叫API(應用程序接口Application Interface的簡稱)?什么叫Win32 APIAPI就是操作系統(tǒng)提供的一堆庫函數,沒啥稀奇的。printfscanfC語言內置的函數,其他的非內置的庫函數都叫API
2)我想找實現某個功能的API怎么辦?以“關閉顯示器”為例講解自學過程。
3)怎么我查看MessageBox函數其實是MessageBoxWMessageBoxA兩個函數的宏定義?Win32API中還有大量這種風格的函數。W結尾的是把字符當成Unicode處理的,A結尾的是把字符當成ASCII處理的。使用時不要直接調用W結尾的或者A結尾的。編譯器會在編譯時確定調用哪個。

總結

以上是生活随笔為你收集整理的关闭用playsound函数的WAV文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。