關閉用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還可以指定資源、內存音樂、系統音樂等等);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開發程序的時候用的都是C語言內置的函數,所以不存在使用非內置函數的情況。但是在開發大程序的時候要大量用到非內置的函數,比如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);
?? ?? 同步模式:音樂播放過程中函數不返回,播放完成才返回
?? ?? 異步播放在做游戲等需要播放時間較長的音樂時使用,因為程序不會在音樂播放過程中有假死的情況。
有沒有同學注意到第二個對話框如果快速關閉的話音樂會中途停止?這是因為程序退出音樂就中斷播放了。用戶關了游戲,音樂也不能繼續播放,應該停止,所以很合理
9)我可以做一個小程序,別人在我小程序運行的時候一直聽播放的音樂,用異步方式可以保證音樂在后臺播放。可以只能播放一遍,能不能音樂來回來去的不斷播放呢?答案是使用SND_LOOP標志。
Loop:循環
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就是操作系統提供的一堆庫函數,沒啥稀奇的。printfscanfC語言內置的函數,其他的非內置的庫函數都叫API
2)我想找實現某個功能的API怎么辦?以“關閉顯示器”為例講解自學過程。
3)怎么我查看MessageBox函數其實是MessageBoxWMessageBoxA兩個函數的宏定義?Win32API中還有大量這種風格的函數。W結尾的是把字符當成Unicode處理的,A結尾的是把字符當成ASCII處理的。使用時不要直接調用W結尾的或者A結尾的。編譯器會在編譯時確定調用哪個。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

身份驗證

傳統身份驗證的方法 HTTP 是一種沒有狀態的協議&#xff0c;也就是它并不知道是誰是訪問應用。這里我們把用戶看成是客戶端&#xff0c;客戶端使用用戶名還有密碼通過了身份驗證&#xff0c;不過下回這個客戶端再發送請求時候&#xff0c;還得再驗證一下。 解決的方法就是&…

Pytorch(4)-模型保存-載入-eval()

模型保存與提取1. 整個模型 保存-載入2. 僅模型參數 保存-載入3. GPU/CPU模型保存與導入4. net.eval()--固定模型隨機項神經網絡模型在線訓練完之后需要保存下來&#xff0c;以便下次使用時可以直接導入已經訓練好的模型。pytorch 提供兩種方式保存模型:方式1&#xff1a;保存整…

大數據學習(08)--Hadoop中的數據倉庫Hive

文章目錄目錄1.什么是數據倉庫&#xff1f;1.1數據倉庫概念1.2傳統數據倉庫面臨的挑戰1.3 Hive介紹1.4 Hive與傳統數據庫的對比1.5 Hive在企業中的部署與應用2.Hive系統架構3.Hive工作原理3.1 SQL轉換為MapReduce作業的基本原理3.2 Hive中SQL查詢轉換MapReduce作業的過程4.Hive…

dubbo知識點總結 持續更新

Dubbo 支持哪些協議&#xff0c;每種協議的應用場景&#xff0c;優缺點&#xff1f; ? dubbo&#xff1a; 單一長連接和 NIO 異步通訊&#xff0c;適合大并發小數據量的服務調用&#xff0c; 以及消費者遠大于提供者。傳輸協議 TCP&#xff0c;異步&#xff0c;Hessian 序列化…

使用Linux auto Makefile自動生成的運行步驟

首先創建一個 Linux Makefile.am.這一步是創建Linux Makefile很重要的一步&#xff0c;automake要用的腳本配置文件是Linux Makefile.am&#xff0c;用戶需要自己創建相應的文件。之后&#xff0c;automake工具轉換成Linux Makefile.in。AD&#xff1a; 在向大家詳細介紹Linux …

無限踩坑系列(6)-mySQL數據庫鏈接錯誤

mySQL數據庫鏈接錯誤錯誤1錯誤2長鏈接短連接應用場景需要一直訪問mySQL數據庫&#xff0c;遇到如下錯誤&#xff1a;錯誤1 釋放已經釋放的數據庫鏈接conn.&#xff0c;或者&#xff0c;操作已經釋放的數據庫鏈接conn.或者失去鏈接后再操作數據庫都可能會報這個錯誤 aise err.I…

初探函數式編程和面對對象式編程

文章目錄目錄1.函數式編程和面向對象編程概念1.1 函數式編程1.2 面向對象編程2.函數式編程和面向對象編程的優缺點2.1 函數式編程優點缺點2.2 面對對象編程優點缺點3.為什么在并行計算中函數式編程比較好3.1 什么是并行計算3.2 函數式編程興起原因目錄 1.函數式編程和面向對象…

linux常用解壓和壓縮文件的命令

linux常用解壓和壓縮文件的命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是壓縮&#xff01;&#xff09;———————————————.gz解壓1&#xff1a;gunzip FileN…

Python外(4)-讀寫mat文件

讀寫mat文件1.讀取2.寫入.mat 是matlab中數據存儲的標準格式&#xff0c;Python中能夠通過庫scipy讀取和保存。導入scipy庫 from scipy import io 1.讀取 io.loadmat(file_name, mdictNone, appendmatTrue, **kwargs) 簡便方式&#xff1a; io.loadmat(file_name) append mat–…

Linux下的xml文件的創建

創建一個xml文檔流程如下&#xff1a; l 用xmlNewDoc函數創建一個文檔指針doc&#xff1b; l 用xmlNewNode函數創建一個節點指針root_node&#xff1b; l 用xmlDocSetRootElement將root_node設置為doc的根結點&#xff1b; l 給root_node添加一系列的子節點&#x…

壓力測試http_load 通過修改配置測試https協議成功了。

到http://www.acme.com/software/http_load/ 下載http_load &#xff0c;安裝也很簡單直接make;make instlall 就行。 如果你需要測試https&#xff0c;你必須將 Makefile中 # CONFIGURE: If you want to compile in support for https, uncomment these # definitions. You w…

面向對象設計與分析40講(16)靜態工廠方法模式

前面我們介紹了簡單工廠模式&#xff0c;在創建對象前&#xff0c;我們需要先創建工廠&#xff0c;然后再通過工廠去創建產品。 如果將工廠的創建方法static化&#xff0c;那么無需創建工廠即可通過靜態方法直接調用的方式創建產品&#xff1a; // 工廠類&#xff0c;定義了靜…

搜索詳解

搜索 一.dfs和bfs簡介 深度優先遍歷(dfs) 本質&#xff1a; 遍歷每一個點。 遍歷流程&#xff1a; 從起點開始&#xff0c;在其一條分支上一條路走到黑&#xff0c;走不通了就往回走&#xff0c;只要當前有分支就繼續往下走&#xff0c;直到將所有的點遍歷一遍。 剪枝&a…

Python外(5)-for-enumerate()-zip()

for循環小技巧技巧1&#xff1a;enumerate()技巧2&#xff1a;打包兩個可遍歷數據&#xff0c;一起循環-zip()技巧1&#xff1a;enumerate() 在使用pytorch訓練網絡的過程中&#xff0c;官方教程給出了 for i, data in enumerate(trainloader, 0): 這涉及到enumerate函數的使用…

特征工程總結

目錄1 特征工程是什么&#xff1f; 2 數據預處理   2.1 無量綱化     2.1.1 標準化     2.1.2 區間縮放法     2.1.3 標準化與歸一化的區別   2.2 對定量特征二值化   2.3 對定性特征啞編碼   2.4 缺失值計算   2.5 數據變換 3 特征選擇   3.1 Filter …

Jmeter測試并發https請求成功了

Jmeter2.4 如何測試多個并發https請求&#xff0c;終于成功了借此機會分享給大家 首先要安裝jmeter2.4版本的&#xff0c;而且不建議大家使用badboy&#xff0c;因為這存在兼容性問題。對于安裝&#xff0c;我就不講了&#xff0c;我就說說如何測試https&#xff0c;想必大家都…

關系數據庫——sql基礎1定義

關系數據庫標準語言SQL 基本概念 SQL語言是一個功能極強的關系數據庫語言。同時也是一種介于關系代數與關系演算之間的結構化查詢語言&#xff08;Structured Query Language&#xff09;&#xff0c;其功能包括數據定義、數據查詢、數據操縱和數據控制。 SQL的特點&#xff…

libcurl編程

一、curl簡介 curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持的協議有&#xff1a;FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同樣支持HTTPS認證&#xff0c;HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, 代理服…

大數據學習(09)--Hadoop2.0介紹

文章目錄目錄1.Hadoop的發展與優化1.1 Hadoop1.0 的不足與局限1.2 Hadoop2.0 的改進與提升2.HDFS2.0 的新特性2.1 HDFS HA2.2 HDFS Federation3. 新一代的資源管理器YARN3.1 MapReduce1.0 缺陷3.2 YARN的設計思路3.3 YARN 體系結構3.4 YARN工作流程3.5 YARN框架與MapReduce1.0框…

Java多線程常用方法

start()與run() start() 啟動線程并執行相應的run()方法 run() 子線程要執行的代碼放入run()方法 getName()和setName() getName() 獲取此線程的名字 setName() 設置此線程的名字 isAlive() 是判斷當前線程是否處于活動狀態。活動狀態就是已經啟動尚未終止。 curren…