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

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()来获取目标文件的格式信息。
XAudio2学习五之加载WAV文件到内存_第1张图片

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

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


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

使用VS 的Memory窗口可以查看内存中的数据:
XAudio2学习五之加载WAV文件到内存_第2张图片

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

另:还可以使用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。

交流请加:

群名称:XAudio2 交流群

群   号:233537460


本文链接:http://blog.csdn.net/u011417605/article/details/50788172
源码下载: http://download.csdn.net/detail/u011417605/9451865

你可能感兴趣的:(XAudio2)