现在的位置: 首页 > 综合 > 正文

wave播放

2013年10月02日 ⁄ 综合 ⁄ 共 1409字 ⁄ 字号 评论关闭

小的wave播放比较简单,用sndPlaySound可以搞定

#include "mmsystem.h"
#pragma comment(lib,"winmm.lib")

//---------------播放-----------

sndPlaySound("e://wav//nyt.wav",SND_ASYNC);   //第一参数为播放文件路径,第二为播放同时继续下条语句

//-----------------停止----------------------

sndPlaySound(NULL,0);

文件大些时,比如当WAVE文件大于100K时,这时候系统无法将声音数据一次性的读入内存,sndPlaySound函数就不能进行播放(听别人说的,但我用了400k的都没问题),这时可以用mci,主要是用mciSendCommand实现,

//----------------初始化参数-------------------

MCI_OPEN_PARMS openParms;
 MCI_PLAY_PARMS playParms;

openParms.dwCallback = 0;
 openParms.lpstrAlias = "";
 openParms.lpstrDeviceType = "waveaudio";                             //类型为wave
 openParms.lpstrElementName = "e://wav//nyt.wav";               //播放的文件路径
 playParms.dwCallback = 0;
 playParms.dwFrom = 0;
 playParms.dwTo = 0;

//---------------------打开文件---------------------

 mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)((LPVOID)&openParms));

//-----------------------关闭文件------------------------------------

mciSendCommand(openParms.wDeviceID,MCI_CLOSE,0,0);

//-------------------------播放-----------------------------------------------

mciSendCommand(openParms.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)(LPVOID)(&playParms));

//--------------------------停止--------------------

mciSendCommand(openParms.wDeviceID,MCI_STOP,0,0);

//---------------------------暂停--------------------------

mciSendCommand(openParms.wDeviceID,MCI_PAUSE,0,(DWORD)(LPVOID)(&playParms));

//我发现用mci时程序会死在那,后来自己干脆写了一个播放线程就ok了,sndPlaySound没这方面的问题

抱歉!评论已关闭.