您的位置:首页 > 其它

XAudio2学习五之加载WAV文件到内存

2016-03-03 15:41 260 查看


XAudio2学习五之加载WAV文件到内存

    前面说了wave文件的格式。想要播放WAV文件,需要使用上一篇所说的CWaveFile类,将文件内容读取到内存,然后才能进行播放。本篇就展示如何将WAV文件加载进内存。
首先,需要实例化CWaveFile类:
CWaveFile waveFile;
实例化后才可以使用CWaveFile的函数。实例化后调用Open函数来打开WAV文件,Open有三个参数:
HRESULT Open(LPWSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags);
第一个参数,是文件所在的路径;
第二个参数,是格式;
第三个参数,是标识参数。有两个,一个是读,一个是写。
#define WAVEFILE_READ   1
#define WAVEFILE_WRITE  2

使用Open函数时,如果是读,那第二个参数直接设置为NULL就可以了。如果是写,则需要提供具体的格式。
加载后,可以调用CWaveFile的GetFormat()来获取目标文件的格式信息。



可以使用GetSize来获取文件的大小:



使用Read函数来读取文件内容,加载到自己申请的内存空间:
HRESULT Read(BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead);
   第一个参数表示自己申请的内存空间,第二个参数表示需要读取的数据大小,第三个参数表示实际读取的数据大小(因为有可能所剩余的数据并没有你想要读取的那么多了,比如你每次读取10K,但是数据只有9.2K了)。
申请内存,读取文件内容,刚申请完内存空间,内存中的数据是乱码,如下图:



读取完成后,数据就加载进内存了:



使用VS 的Memory窗口可以查看内存中的数据:



最后需要关闭文件,并释放内存。

另:还可以使用CWaveFile进行写WAV文件。后面使用到的时候再讲。大家可以自己研究下。
完整代码:
#pragma once
#include "XAudio2.h"
#include "WaveFile.h"

int main(int argc, char *argv[])
{
CWaveFile waveFile;
HRESULT hr = waveFile.Open(L"C:\\Users\\dlp\\Desktop\\24bit-48khz.wav", NULL, WAVEFILE_READ);//加载文件
if (FAILED(hr))
return 0;

WAVEFORMATEX *waveFormat = waveFile.GetFormat();//获取文件格式

DWORD size = waveFile.GetSize();//获取文件的大小
BYTE *pData = new BYTE[size];//申请内存空间,用于保存数据
hr = waveFile.Read(pData, size, &size);//读取文件内容
if (FAILED(hr))
return 0;

waveFile.Close();//关闭文件
delete []pData;
pData = NULL;
return 0;
}


备注:请尊重版权,转载请联系作者QQ:1245178753
本文链接:http://blog.csdn.net/u011417605/article/details/50788172

源码下载:http://download.csdn.net/detail/u011417605/9451865
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: