一.在程序中直接播放聲音文件
成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營銷推廣、網(wǎng)站重做改版、額敏網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為額敏等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在VC++ 中的多媒體動態(tài)連接庫中提供了一組與音頻設(shè)備有關(guān)的函數(shù)。利用這些函數(shù)可以方便地播放聲音。最簡單的播放聲音方法就是直接調(diào)用VC++中提供的聲音播放函數(shù)BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中參數(shù)lpszSound是需要播放聲音的.W***文件的路徑和文件名, hmod在這里為NULL,fuSound是播放聲音的標(biāo)志,詳細(xì)說明請參考VC++中的幫助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果沒有找到music.wav文件,第一種格式將播放系統(tǒng)默認(rèn)的聲音,第二種格式不會播放系統(tǒng)默認(rèn)的聲音。
二.將聲音文件加入到程序中
在VC++的程序設(shè)計中,可以利用各種標(biāo)準(zhǔn)的資源,如位圖,菜單,對話框等。同時VC++也允許用戶自定義資源,因此我們可以將聲音文件作為用戶自定義資源加入程序資源文件中,經(jīng)過編譯連接生成EXE文件,實現(xiàn)無.W***文件的聲音播放。要實現(xiàn)作為資源的聲音文件的播放,首先要在資源管理器中加入待播放的聲音文件。
具體步驟入下:
1.獲得包含資源的模塊句柄:
HMODULE hmod=AfxGetResourceHandle();
2.檢索資源塊信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"));
3. 裝載資源數(shù)據(jù)并加鎖:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放聲音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.釋放資源句柄:
FreeResource(hGlobalMem);
可以使用PlaySound()函數(shù)播放聲音文件,
該函數(shù)原型位于#include?mmsystem.h中,
函數(shù)原型為:?BOOL?PlaySound(LPCSTR?pszSound,?HMODULE?hmod,DWORD?fdwSound);
參數(shù)pszSound是要播放聲音的文件名,
只支持WAV等格式的文件
參數(shù)hmod是應(yīng)用程序的實例句柄,一般傳遞NULL就可以;
參數(shù)fdwSound是標(biāo)志的組合掩碼,
可選值有SND_FILENAME、SND_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)志一塊使用。
【2、使用舉例】
PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows?XP?啟動.wav"),NULL,SND_FILENAME|SND_SYNC);
代碼如下:
#include windows.h
#include mmsystem.h
#pragma comment(lib, "WINMM.LIB")
/*播放音樂*/
void playMusic()
{
//aiyo.wav是放在代碼文件中
PlaySound(TEXT("aiyo.wav"),0,SND_FILENAME | SND_ASYNC);
}
/**
* 主? 函? 數(shù)(音樂放第一排)
*/
void main()
{
playMusic();
title();? ? ? ? ? ? //歡迎界面上的標(biāo)題
flower();? ? ? ? ? ?//打印字符畫
welcome();? ? ? ? ? //歡迎界面上的選項菜單
}
擴(kuò)展資料
C語言解析WAV音頻文件:
C語言基本的二進(jìn)制文件操作函數(shù)有fopen,fread等等。(注意是二進(jìn)制文件操作函數(shù),所以我們不討論fgets,這是普通的文本文件操作函數(shù))
fread是一個函數(shù)。從一個文件流中讀數(shù)據(jù),最多讀取count個項,每個項size個字節(jié),如果調(diào)用成功返回實際讀取到的項個數(shù)(小于或等于count),如果不成功或讀到文件末尾返回 0。
它的函數(shù)原型為
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
而且C語言還有一種類型叫做結(jié)構(gòu)體,它在內(nèi)存中是順序存儲的。剛好我們也已經(jīng)得知了WAV文件在文件中的順序以及該順序中每個部分對應(yīng)的含義。
那么我們可以事先根據(jù)前面所說的WAV文件結(jié)構(gòu)來定義好一個struct,然后在main主函數(shù)中初始化這個struct,并且通過fread的第一個參數(shù)帶入初始化好的這個struct,那么執(zhí)行之后就會自動讀取該文件,并且按照順序自動把這些元數(shù)據(jù)填充進(jìn)了我們初始化好的struct中。
兩個聲音函數(shù)sound(),nosound()和延遲函數(shù)delay()由函數(shù)庫
提供。
函數(shù)名:
sound
功
能:
以指定頻率打開PC揚聲器
用
法:
void
sound(unsigned
frequency);
程序例:
#include
int
main(void)
{
sound(7);
delay(10000);
nosound();
return
0;
}
可以使用PlaySound()函數(shù)播放mp3音頻,該函數(shù)原型位于windows.h。
PlaySound函數(shù)的聲明為:
BOOL PlaySound(LPCSTR pszSound, HMODULE hwnd,DWORD fdwSound);
參數(shù)pszSound是指定了要播放聲音的字符串。
參數(shù)hwnd是應(yīng)用程序的實例句柄,除非pszSound的指向一個資源標(biāo)識符(即fdwSound被定義為SND_RESOURCE),否則必須設(shè)置為NULL。
參數(shù)fdwSound是標(biāo)志的組合,如下表所示。若成功則函數(shù)返回TRUE,否則返回FALSE。
使用PlaySound函數(shù)時需要在#includewindows.h后面加上(注意:不能加在前面):
例程:
CFileDialog?dlg(TRUE,?"mp3",?"*.mp3",?OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,?"mp3文件(*.mp3)|*.mp3|");
/*創(chuàng)建選擇對話框,讓用戶從文件夾中選取一個MP3文件*/
int?iRet?=?dlg.DoModal();//獲得對話框返回值
if(IDOK?==?iRet)?//如果返回值成功,表明成功獲取一個MP3文件
{
CString?pathName=?dlg.GetPathName();????//得到文件的路徑名稱
PlaySound(?pathName???,?NULL,?SND_FILENAME?|?SND_ASYNC);//用playsound函數(shù)播放該文件
}
#include reg52.h
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7;
uchar code SONG_TONE[]=
{
212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
};
uchar code SONG_LONG[]=
{
9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
};
void DelayMS(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t120;t++);
}
}
void PlayMusic()
{
uint i =0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{
for(j=0;jSONG_LONG[i]*20;j++)
{
BEEP = ~BEEP;
for(k=0;kSONG_TONE[i]/3;k++);
}
DelayMS(10);
i++;
}
}
void main()
{
while(1)
{
PlayMusic();
DelayMS(500);
}
}
這個是單片機的。