DirectSound应用,播放wav文件
来源:互联网 发布:河南省软件协会 编辑:程序博客网 时间:2024/05/22 00:19
在项目的源文件中包含dsound.h头文件,分别定义DirectSound接口和主、辅助缓冲区接口的全局变量,以及保存WAV音频格式的文件头结构。
声明代码如下:
//--D3D用的头文件#include <d3d9.h>#include <d3dx9.h>#include <stdio.h>#include <dsound.h>
LPDIRECTSOUND8g_pDirectSound = NULL;//DirectSound接口LPDIRECTSOUNDBUFFER g_pPrimaryBuffer = NULL;//主缓冲接口LPDIRECTSOUNDBUFFER8 g_pSecondaryBuffer = NULL;//辅助缓冲接口
WAV文件的文件头定义如下:
struct WAVE_HEADER{char riff_sig[4];//RIFFlong waveform_chunk_size;//8char wave_sig[4];//WAVEchar format_sig[4];//FMTlong format_chunk_size;//16short format_tag;//WAVE_FORMAT_PCMshort channels; //声道数long sample_rate;//采用频率long bytes_per_sec;//播放速度 字节/秒short block_align;//sample block alignmentshort bits_per_sample;//位/秒char data_sig[4];//datalong data_size;//音频数据大小};
//--D3D的初始化
HRESULT CD3DInit::InitD3D(HWND hWnd)
{
//--创建D3D对象
//---创建IDirectSound8接口-----------------DirectSoundCreate8(NULL,&g_pDirectSound,NULL);g_pDirectSound->SetCooperativeLevel(hWnd,DSSCL_NORMAL);//---读取WAV音频信息WAVE_HEADER wave_header;::ZeroMemory(&wave_header,sizeof(WAVE_HEADER));FILE* fp = fopen("example.wav","rb");fread((void*)&wave_header,1,sizeof(WAVE_HEADER),fp);//--创建主、辅助音频缓存WAVEFORMATEX wave_format;ZeroMemory(&wave_format,sizeof(WAVEFORMATEX));wave_format.wFormatTag = WAVE_FORMAT_PCM;wave_format.nChannels = wave_header.channels;wave_format.nSamplesPerSec = wave_header.sample_rate;wave_format.wBitsPerSample = wave_header.bits_per_sample;wave_format.nBlockAlign = wave_format.wBitsPerSample/8 * wave_format.nChannels;wave_format.nAvgBytesPerSec = wave_format.nSamplesPerSec*wave_format.nBlockAlign;DSBUFFERDESC ds_buf_desc;ZeroMemory(&ds_buf_desc,sizeof(DSBUFFERDESC));ds_buf_desc.dwSize = sizeof(DSBUFFERDESC);ds_buf_desc.dwFlags = DSBCAPS_CTRLVOLUME;ds_buf_desc.dwBufferBytes = wave_header.data_size;ds_buf_desc.lpwfxFormat = &wave_format;g_pDirectSound->CreateSoundBuffer(&ds_buf_desc,&g_pPrimaryBuffer,NULL);g_pPrimaryBuffer->QueryInterface(IID_IDirectSoundBuffer8,(void**)&g_pSecondaryBuffer);//---加载MAV音频数据---------------------------char *ptr1,*ptr2;DWORD size1,size2;fseek(fp,sizeof(WAVE_HEADER),SEEK_SET);g_pSecondaryBuffer->Lock(0,wave_header.data_size,(void**)&ptr1,&size1,(void**)&ptr2,&size2,0);if(ptr1)fread(ptr1,1,size1,fp);if(ptr2)fread(ptr2,1,size2,fp);g_pSecondaryBuffer->Unlock(ptr1,size1,ptr2,size2);fclose(fp);
Render()函数中
g_pd3dDevice->BeginScene();
//---开始播放-----------static long lPan = 0,lVolume =DSBVOLUME_MAX;if(::GetAsyncKeyState(VK_SPACE)&0x8000f)g_pSecondaryBuffer->Play(0,0,DSBPLAY_LOOPING);//开始播放if(::GetAsyncKeyState('S')&0x8000f)g_pSecondaryBuffer->Stop();
unresolved external symbol _IID_IDirectSoundBuffer
错误,
_IID_IDirectSoundNotify 联结错误的原因是您没有联结dxguid.lib库,在Setting下设置它就ok了。
- DirectSound应用,播放wav文件
- DirectSound播放WAV
- DirectSound播放WAV
- DirectX初级编程:C#利用DirectSound播放WAV文件[最少只要4句话]
- DirectX初级编程:C#利用DirectSound播放WAV文件[最少只要4句话]
- 使用DirectSound播放MP3文件
- 一个读取wav,用DirectSound 播放的c++代码
- 播放wav文件
- 播放WAV文件
- 播放WAV文件
- python 播放wav文件
- 播放 wav 文件
- gstreamer播放wav文件
- jmf 播放wav文件
- PSP播放wav文件
- linux 播放wav文件
- 如何播放 WAV 文件?
- 实现播放WAV文件
- css中中文字体(font-family)列表
- IE6.0 不支持LI:HOVER的解决方法
- Poj 2359 Questions (约瑟夫环)
- ajax读取本地xml文件要注意的地方
- 【Android面试】Android面试题集锦
- DirectSound应用,播放wav文件
- error: void value not ignored as it ought to be
- 从五个方面下手,彻底解决客户需求难题
- LeetCode Binary Tree Preorder Traversal
- LCD参数
- 分享腾讯微博C#版本SDK
- java读取xml文件并分页显示
- redis命令中文参考
- android 的listview的优化