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
相关文章推荐
- C++ typename的起源与用法
- 解析sql语句中left_join、inner_join中的on与where的区别
- Android Studio运行项目报错:java.lang.UnsatisfiedLinkError——.so文件问题
- debian7.5自带的mysql5.5远程授权后无法使用
- 互联网架构师必备技能
- Interfacing with Pixhawk using the NSH
- 解决CentOS 7出现Failed to issue method call: Unit iptables.service failed to load: No such file or direc
- git bash 出现vim的时候怎么退出
- js的event事件
- PHP 正则表达式
- 网易DBA私享会分享会笔记2
- background常用属性
- 用NFC建立蓝牙连接聊天软件
- Android wifi direct
- 好的文章
- Linux下cp命令 -f无效的解决方法
- imx6ul evk板子 记录(5)通过底板sd卡即mmc 0 启动设备
- iOS开发-BUG:证书显示 此证书签发者无效 解决办法
- Java I/O 模型的演进
- 基于swift语言iOS8的蓝牙连接(初步)(转帖)