播放声音文件

原创 2007年10月10日 14:32:00

// PlaySound.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include  "mmsystem.h"

int _tmain(int argc, _TCHAR* argv[])
{
 char    szFileName[] = "1.wav";//声音文件名  
 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  
  printf("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  
 }

 long SoundOffset = 0;
 long SoundLong= m_dwDataSize;
 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  
 }  
 //检查音频输出设备是否能播放指定的音频文件 
 UINT DevsNum = 0;
 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;  

 return 0;
}

 加入lib文件  winmm.lib

android开发播放声音文件

有两种播放音频形式,第一个:MediaPlayer 类 ;第二个:SoundPool 类 MediaPlayer mediaPlayer01; mediaPlayer01 = MediaPlaye...
  • robertcpp
  • robertcpp
  • 2016年05月29日 15:06
  • 7278

C#播放声音【六种方法】

C#中声音的播放主要有六种方法: 1.播放系统事件声音  2.使用SoundPlayer 3.使用API函数播放 4.使用axWindowsMediaPlayer的COM组件来播放 5.Mi...
  • wangzhen209
  • wangzhen209
  • 2016年11月22日 15:05
  • 11393

使用windows API播放声音文件(wav、mp3)等

软件:      vs2010 工程:     控制台程序(空工程) 代码如下: /* mciSendCommand播放音乐,调用简单,功能强大,但是它只能同时播放一个 文件,而...
  • woshiyuanlei
  • woshiyuanlei
  • 2015年05月31日 20:02
  • 2745

android开发播放声音文件

有两种播放音频形式,第一个:MediaPlayer 类 ;第二个:SoundPool 类 MediaPlayer mediaPlayer01; mediaPlayer01 = MediaPlaye...
  • robertcpp
  • robertcpp
  • 2016年05月29日 15:06
  • 7278

Android录制声音文件(音频),并播放

Android录制声音文件(音频),并播放
  • u014620028
  • u014620028
  • 2016年04月29日 20:15
  • 8121

iPhone播放声音文件的例子

本文演示如何使用Objective-C开发播放mp3文件的iPhone程序,当然本文目的不是要让你做一个iPhone版的播放器,因为这根本用不着你,iPod程序已经很好了。本文的目的是要让你能够在自己...
  • ch_soft
  • ch_soft
  • 2012年06月13日 23:42
  • 2971

iPhone 播放音频声音文件

播放音频声音文件        iphone开发中播放声音文件主要使用AVAudioPlayer 类,它的功能非常强大支持播放音频的格式也非常的多,我们可以把它看成一个高级的音乐播放器,它支持的播放格...
  • xys289187120
  • xys289187120
  • 2011年07月10日 13:14
  • 8062

Java播放声音文件

一,在Applet中播放声音   播放声音是java对多媒体的支持一个重要部分,现今流行的声音格式有wav,mid,au为扩展名的声音文件,而java现主要支持以au为名的声音。 在...
  • Sky_Warmer
  • Sky_Warmer
  • 2014年02月17日 09:13
  • 10748

播放声音文件 PlaySound函数应用

播放声音文件 PlaySound函数应用 // test2.cpp : Defines the entry point for the application. // #incl...
  • u013052238
  • u013052238
  • 2014年08月29日 12:18
  • 353

使用DirectX播放wav声音文件

1.    使用 DirectX ,主要用到 MicroSoft.DirectX.dll 和 Microsoft.Directx.DirectSound.dll。         a. 可以下载安装D...
  • sophiemantela
  • sophiemantela
  • 2017年11月17日 19:14
  • 94
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:播放声音文件
举报原因:
原因补充:

(最多只允许输入30个字)