亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vc++中播放聲音的方法.txt

?? VC++中播放聲音的方法
?? TXT
字號:
VC++中播放聲音的方法首頁>計算機技術>編程技術>正文 
VC++中播放聲音的方法
聲音是多媒體的一個重要組成部分,在應用程序中加入聲音可以使界面更友好。在VC++中可以根據不同的應用要求,用不同的方法實現聲音的播放。 

一.播放聲音文件的簡單方法 
   在VC++ 
中的多媒體動態連接庫中提供了一組與音頻設備有關的函數。利用這些函數可以方便地播放聲音。最簡單的播放聲音方法就是直接調用VC++中提供的聲音播放函數BOOL 
sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR 
lpszSound, HMODULE hmod, DWORD fuSound );其中參數lpszSound是需要播放聲音的.WAV文件的路徑和文件名, 
hmod在這里為NULL,fuSound是播放聲音的標志,詳細說明請參考VC++中的幫助。 
例如播放C:soundmusic.wav可以用sndPlaySound 
("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, 
SND_ASYNC|SND_NODEFAULT );如果沒有找到music.wav文件,第一種格式將播放系統默認的聲音,第二種格式不會播放系統默認的聲音。 

二.將聲音文件加入到程序中 
   
在VC++的程序設計中,可以利用各種標準的資源,如位圖,菜單,對話框等。同時VC++也允許用戶自定義資源,因此我們可以將聲音文件作為用戶自定義資源加入程序資源文件中,經過編譯連接生成EXE文件,實現無.WAV文件的聲音播放。 

   
要實現作為資源的聲音文件的播放,首先要在資源管理器中加入待播放的聲音文件(實現過程并不復雜,這里不在敘述)。假設生成的聲音文件資源標識符為IDR_WAVE1。在播放時只需要調用下面的語句: 

   PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), 
  SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP); 
   其中MAKEINTRESOURCE()宏將整數資源標識符轉變為字符串,AfxGetResourceHandle()函數返回包含資源的模塊句柄, 
SND_RESOURCE是必須的標志。 
   作為資源的聲音文件的第二種播放方法是把資源讀入內存后作為內存數據播放。具體步驟入下: 
   1.獲得包含資源的模塊句柄: 
   HMODULE hmod=AfxGetResourceHandle(); 
   2.檢索資源塊信息: 
   HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE")); 
   3. 裝載資源數據并加鎖: 
   HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource); 
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem); 
   4.播放聲音文件: 
   sndPlaySound(lpMemSound,SND_MEMORY)); 
   5.釋放資源句柄: 
   FreeResource(hGlobalMem); 

三.播放聲音文件的高級方法 
   在VC++中提供了一組對音頻設備及多媒體文件直接進行操作的函數。利用這些函數可以靈活地對聲音文件進行各種處理。 
   
首先介紹幾個要用到的數據結構。WAVEFORMATEX結構定義了WAVE音頻數據文件的格式。WAVEHDR結構定義了波形音頻緩沖區。讀出的數據首先要填充此緩沖區才能送音頻設備播放。WAVEOUTCAPS結構描述了音頻設備的性能。MMCKINFO結構包含了RIFF文件中一個塊的信息。詳細的說明請參考VC++中的幫助。 

   下面給出程序流程簡圖及程序源代碼清單,在VC++環境下可直接使用: 


源程序清單如下: 
LPSTR szFileName;//聲音文件名 
MMCKINFO mmckinfoParent; 
MMCKINFO mmckinfoSubChunk; 
DWORD dwFmtSize; 
HMMIO m_hmmio;//音頻文件句柄 
DWORD m_WaveLong; 
HPSTR lpData;//音頻數據 
HANDLE m_hData; 
HANDLE m_hFormat; 
WAVEFORMATEX * lpFormat; 
DWORD m_dwDataOffset; 
DWORD m_dwDataSize; 
WAVEHDR pWaveOutHdr; 
WAVEOUTCAPS pwoc; 
HWAVEOUT hWaveOut; 
//打開波形文件 
if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF))) 
{ 
//File open Error 
Error("Failed to open the file.");//錯誤處理函數 
return false; 
} 
//檢查打開文件是否是聲音文件 
mmckinfoParent.fccType =mmioFOURCC('W','A','V','E'); 
if(mmioDescend(m_hmmio,(LPMMCKINFO)&mmckinfoParent,NULL,MMIO_FINDRIFF)) 
{ 
//NOT WAVE FILE AND QUIT 
} 
//尋找 'fmt' 塊 
mmckinfoSubChunk.ckid =mmioFOURCC('f','m','t',' '); 
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK)) 
{ 
//Can't find 'fmt' chunk 
} 
//獲得 'fmt '塊的大小,申請內存 
dwFmtSize=mmckinfoSubChunk.cksize ; 
m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize)); 
if(!m_hFormat) 
{ 
//failed alloc memory 
} 
lpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat); 
if(!lpFormat) 
{ 
//failed to lock the memory 
} 
if((unsigned long)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize) 
{ 
//failed to read format chunk 
} 
//離開 fmt 塊 
mmioAscend(m_hmmio,&mmckinfoSubChunk,0); 
//尋找 'data' 塊 
mmckinfoSubChunk.ckid=mmioFOURCC('d','a','t','a'); 
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK)) 
{ 
//Can't find 'data' chunk 
} 
//獲得 'data'塊的大小 
m_dwDataSize=mmckinfoSubChunk.cksize ; 
m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ; 
if(m_dwDataSize==0L) 
{ 
//no data in the 'data' chunk 
} 
//為音頻數據分配內存 
lpData=new char[m_dwDataSize]; 
if(!lpData) 
{ 
//faile 
} 
if(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)<0) 
{ 
//Failed to read the data chunk 
} 
m_WaveLong=mmioRead(m_hmmio,lpData,SoundLong); 
if(m_WaveLong<0) 
{ 
//Failed to read the data chunk 
} 
//檢查音頻設備,返回音頻輸出設備的性能 
if(waveOutGetDeVCaps(WAVE_MAPPER,&pwoc,sizeof(WAVEOUTCAPS))!=0) 
{ 
//Unable to allocate or lock memory 
} 
//檢查音頻輸出設備是否能播放指定的音頻文件 
if(waveOutOpen(&hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0) 
{ 
//Failed to OPEN the wave out devices 
} 
//準備待播放的數據 
pWaveOutHdr.lpData =(HPSTR)lpData; 
pWaveOutHdr.dwBufferLength =m_WaveLong; 
pWaveOutHdr.dwFlags =0; 
if(waveOutPrepareHeader(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0) 
{ 
//Failed to prepare the wave data buffer 
} 
//播放音頻數據文件 
if(waveOutWrite(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0) 
{ 
//Failed to write the wave data buffer 
} 
//關閉音頻輸出設備,釋放內存 
waveOutReset(hWaveOut); 
waveOutClose(hWaveOut); 
LocalUnlock(m_hFormat); 
LocalFree(m_hFormat); 
delete [] lpData; 
說明:1)以上使用的音頻設備和聲音文件操作函數的聲明包含在mmsystem.h頭文件中,因此在程序中必須用#include 
"mmsystem.h"語句加入頭文件。同時在編譯時要加入動態連接導入庫winmm.lib,具體實現方法是從Developer 
Studio的Project菜單中選擇Settings,然后在Link選項卡上的Object/Library 
Modules控制中加入winmm.lib。2)在pWaveOutHdr.lpData中指定不同的數據,可以播放音頻數據文件中任意指定位置的聲音。3) 
以上程序均在VC++6.0中調試通過,在文中省略了對錯誤及異常情況的處理,在實際應用中必須加入。 
四.結論 
在VC++中可以根據應用需要采用不同的方法播放聲音文件。簡單應用可以直接調用聲音播放函數。第二種方法可以把聲音作為資源加入可執行文件中。如果在播放之前要對聲音數據進行處理,可用第三種方法。 


參考書目: 
1. 美 Paul Perry 陳向群 等譯《多媒體開發指南》 清華大學出版社 
2. 美 Peter Norton, Rob McGregor 孫鳳英 等譯《MFC開發Windows95/NT4應用程序》 清華大學出版社 1998 
3. 周敬利 《多媒體聲卡技術及應用》 電子工業出版社 1998 
上篇文章:在VC下顯示JPEG、GIF格式圖像的一種簡便方法
下篇文章:Visual C++實現Flash動畫播放
本站內容均來自互連網,如果版權侵犯,請郵件至: sxrat##163.com (請把##手工換成@) 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品久久99久久久久| 综合中文字幕亚洲| 日韩专区一卡二卡| 欧美日本精品一区二区三区| 亚洲成人福利片| 欧美日韩一区二区欧美激情| 舔着乳尖日韩一区| 91精品国产乱码| 极品少妇一区二区| 国产女人18水真多18精品一级做| www.亚洲在线| 亚洲一区二区三区影院| 欧美一区二区三级| 国产福利一区二区三区| ...xxx性欧美| 4438x成人网最大色成网站| 麻豆一区二区三| 中文字幕一区二区视频| 精品视频一区三区九区| 激情五月婷婷综合| 国产精品久久久久久久裸模| 欧美日韩在线综合| 国产一区三区三区| 一区二区三区久久| 精品国产123| 91香蕉国产在线观看软件| 图片区日韩欧美亚洲| 久久亚洲精精品中文字幕早川悠里 | 国产宾馆实践打屁股91| 国产精品盗摄一区二区三区| 欧美三级韩国三级日本一级| 国产麻豆精品在线观看| 一区二区三区高清| 久久综合中文字幕| 欧美三级三级三级爽爽爽| 国产精品亚洲а∨天堂免在线| 有码一区二区三区| 久久老女人爱爱| 欧美性淫爽ww久久久久无| 国产成人在线看| 亚洲成人1区2区| 亚洲欧洲精品一区二区三区| 日韩亚洲电影在线| 97精品国产露脸对白| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲美女淫视频| 久久精品无码一区二区三区| 欧美电影一区二区| 97久久精品人人爽人人爽蜜臀| 另类小说色综合网站| 亚洲国产乱码最新视频| 国产精品毛片无遮挡高清| 日韩欧美国产综合在线一区二区三区| 一本高清dvd不卡在线观看| 经典三级一区二区| 日韩电影在线一区二区| 亚洲天堂久久久久久久| 欧美激情一区二区在线| 精品成人一区二区| 欧美人妖巨大在线| 欧美三级中文字幕| 色综合久久中文综合久久97| 成人午夜精品在线| 国产成人自拍高清视频在线免费播放 | 欧美日韩成人激情| 一本到不卡精品视频在线观看| 国产精品一区二区久久精品爱涩| 日韩国产在线观看| 亚洲成人黄色影院| 午夜天堂影视香蕉久久| 亚洲一区二区不卡免费| 日韩美女啊v在线免费观看| 国产精品女同一区二区三区| 国产午夜一区二区三区| 久久美女高清视频| 久久精品一区二区三区不卡| 久久嫩草精品久久久精品一| 精品88久久久久88久久久| 欧美精品一区二区三区在线 | 亚洲综合色丁香婷婷六月图片| 国产精品久久久久久久久久久免费看 | www.亚洲免费av| 成人av在线资源网站| 波多野结衣一区二区三区 | 国产精品18久久久| 国产电影精品久久禁18| 成人涩涩免费视频| 91尤物视频在线观看| 色视频成人在线观看免| 欧美午夜宅男影院| 欧美乱妇23p| 欧美成人精品高清在线播放| 精品黑人一区二区三区久久| 国产拍揄自揄精品视频麻豆| 国产精品久久久久婷婷二区次| 中文字幕中文字幕一区二区| 亚洲久本草在线中文字幕| 一区二区三区欧美视频| 天天做天天摸天天爽国产一区| 蜜臀av亚洲一区中文字幕| 国产一区二区精品久久| 91一区二区在线| 欧美日韩精品综合在线| 欧美成人一区二区三区在线观看| 久久久亚洲高清| 亚洲欧洲精品天堂一级| 五月婷婷色综合| 国产一区二区三区四| 色婷婷综合久久久中文一区二区| 欧美日韩精品一区视频| 久久久久国产一区二区三区四区| 亚洲欧洲日韩av| 免费观看一级特黄欧美大片| 丁香桃色午夜亚洲一区二区三区| 91国产福利在线| 精品国产一区二区三区四区四| 国产精品久久久久久久久久免费看 | 欧美一区二区三区在线观看视频| 久久在线观看免费| 亚洲精品大片www| 精品一区二区三区免费| 91浏览器打开| 日韩一级片在线观看| 综合欧美一区二区三区| 久久99这里只有精品| 在线欧美小视频| 久久精品亚洲一区二区三区浴池| 一区二区成人在线视频| 国产成人啪免费观看软件| 欧美日韩三级视频| 国产精品久久久一区麻豆最新章节| 日韩综合在线视频| 色综合久久中文字幕| 欧美精品一区二| 无码av免费一区二区三区试看| 成人午夜碰碰视频| 精品av久久707| 日韩国产一二三区| 欧美性大战久久久久久久蜜臀| 国产欧美精品国产国产专区| 日韩精品1区2区3区| 色香色香欲天天天影视综合网| 国产午夜精品福利| 蜜臀国产一区二区三区在线播放| 色老综合老女人久久久| 国产精品久久久久久久久免费樱桃| 久久精品国产精品青草| 在线观看91av| 亚洲综合一二区| 91在线云播放| 中文字幕中文字幕在线一区| 国产不卡免费视频| 久久九九99视频| 国产精品一区二区91| 2021久久国产精品不只是精品| 日本不卡的三区四区五区| 欧美精品丝袜中出| 亚洲妇女屁股眼交7| 在线欧美小视频| 亚洲一级二级三级| 91久久国产综合久久| 亚洲精品高清在线| 91久久精品国产91性色tv| 伊人性伊人情综合网| 91福利资源站| 亚洲狠狠爱一区二区三区| 精品婷婷伊人一区三区三| 亚洲成人在线网站| 欧美精品一二三区| 日韩福利电影在线观看| 欧美一区二区大片| 久久精品国产网站| 久久综合色8888| 国产高清无密码一区二区三区| 国产亚洲一区二区三区四区| 国产成人aaa| ...xxx性欧美| 精品视频在线视频| 男人的天堂亚洲一区| 精品国产91九色蝌蚪| 成人综合在线观看| 亚洲无线码一区二区三区| 91老司机福利 在线| 亚洲午夜久久久久久久久电影院| 欧美性xxxxxxxx| 蜜桃免费网站一区二区三区| 精品国产sm最大网站| 丁香网亚洲国际| 亚洲精品国产精华液| 欧美精品第一页| 韩国女主播一区| 国产女同性恋一区二区| 色偷偷久久人人79超碰人人澡| 一二三四社区欧美黄| 欧美人成免费网站| 国产精华液一区二区三区| 最好看的中文字幕久久| 91精品国产色综合久久不卡蜜臀| 黄一区二区三区| 亚洲视频狠狠干|