关于音频—如何读取PCM格式文件? 我想用VC编写一段代码读取一段PCM格式的音频文件,该如何处理比较好啊?新手向大家学习 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 微软的DirectX SDK提供了CWaveFile这个类(在DShow的dsutil里)用于读取/写入 PCM格式的文件开源的RtAduio库提供播放PCM文件的源代码/** * @file WaveFile.h * @brief CWaveFile declare * @author Microsoft * @since 2008-5-19 * @version V1.0 * * \n\n\n * CWaveFile is used to read/write .wav file(RIFF format) * \n * copyright: */#ifndef _MYWAVEFILE_H#define _MYWAVEFILE_H#include <windows.h>#include <mmsystem.h>#include <mmreg.h>#include <dsound.h>/* * @defgroup FileReadWrite * @{ */ /* * @name WaveFileReadWrite * @{ */#define WAVEFILE_READ 1#define WAVEFILE_WRITE 2#define SAFE_DELETE(p) {if(p) {delete (p); (p) = NULL;}}#define SAFE_DELETE_ARRAY(p) {if(p) {delete[] (p); (p) = NULL;}}#define DXTRACE_ERR(msg, r) (OutputDebugStr(msg), (r)) //! Class CWaveFile/*! CWaveFile is used to read/write wav file * DRACULAX: I grab this file from dsutil */class CWaveFile{public: WAVEFORMATEX* m_pwfx; // Pointer to WAVEFORMATEX structure HMMIO m_hmmio; // MM I/O handle for the WAVE MMCKINFO m_ck; // Multimedia RIFF chunk MMCKINFO m_ckRiff; // Use in opening a WAVE file DWORD m_dwSize; // The size of the wave file MMIOINFO m_mmioinfoOut; DWORD m_dwFlags; BOOL m_bIsReadingFromMemory; BYTE* m_pbData; BYTE* m_pbDataCur; ULONG m_ulDataSize; CHAR* m_pResourceBuffer;protected: HRESULT ReadMMIO(); HRESULT WriteMMIO( WAVEFORMATEX *pwfxDest );public: CWaveFile(); ~CWaveFile(); HRESULT Open( LPTSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags ); HRESULT OpenFromMemory( BYTE* pbData, ULONG ulDataSize, WAVEFORMATEX* pwfx, DWORD dwFlags ); HRESULT Close(); HRESULT Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead ); HRESULT Write( UINT nSizeToWrite, BYTE* pbData, UINT* pnSizeWrote ); DWORD GetSize(); HRESULT ResetFile(); WAVEFORMATEX* GetFormat() { return m_pwfx; };}; /** @} */ /** @} */ // FileReadWrite#endif // _MYWAVEFILE_H 你打算怎么处理?干什么用?一般用waveOut系列函数就可以了。建议你先去了解一下PCM的格式吧,可以参考:http://blog.chinaunix.net/u1/37538/showart_446981.html VC界面控件换肤库 简单的CxImage问题 下一步该怎样走?(欢迎讨论,接分的不要) 我的汉字怎么全是乱码 寻找一个VC资料 初学C最合适的书? mfc 模态窗口(主窗口)关闭时需要关闭子线程,应该重载哪个函数? 如何改变listctrl's size dwg文件存储格式 为什么点击“保存”之后修改,然后点“打开”不调用Serialize函数? 在VC6中的regular dll中用CObArray出现编译错误 列表控件添加内容不显示问题.解决给分.
开源的RtAduio库提供播放PCM文件的源代码/**
* @file WaveFile.h
* @brief CWaveFile declare
* @author Microsoft
* @since 2008-5-19
* @version V1.0
*
* \n\n\n
* CWaveFile is used to read/write .wav file(RIFF format)
* \n
* copyright:
*/#ifndef _MYWAVEFILE_H
#define _MYWAVEFILE_H#include <windows.h>
#include <mmsystem.h>
#include <mmreg.h>
#include <dsound.h>/*
* @defgroup FileReadWrite
* @{
*/
/*
* @name WaveFileReadWrite
* @{
*/#define WAVEFILE_READ 1
#define WAVEFILE_WRITE 2#define SAFE_DELETE(p) {if(p) {delete (p); (p) = NULL;}}
#define SAFE_DELETE_ARRAY(p) {if(p) {delete[] (p); (p) = NULL;}}
#define DXTRACE_ERR(msg, r) (OutputDebugStr(msg), (r))
//! Class CWaveFile
/*! CWaveFile is used to read/write wav file
* DRACULAX: I grab this file from dsutil
*/
class CWaveFile
{
public:
WAVEFORMATEX* m_pwfx; // Pointer to WAVEFORMATEX structure
HMMIO m_hmmio; // MM I/O handle for the WAVE
MMCKINFO m_ck; // Multimedia RIFF chunk
MMCKINFO m_ckRiff; // Use in opening a WAVE file
DWORD m_dwSize; // The size of the wave file
MMIOINFO m_mmioinfoOut;
DWORD m_dwFlags;
BOOL m_bIsReadingFromMemory;
BYTE* m_pbData;
BYTE* m_pbDataCur;
ULONG m_ulDataSize;
CHAR* m_pResourceBuffer;protected:
HRESULT ReadMMIO();
HRESULT WriteMMIO( WAVEFORMATEX *pwfxDest );public:
CWaveFile();
~CWaveFile(); HRESULT Open( LPTSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags );
HRESULT OpenFromMemory( BYTE* pbData, ULONG ulDataSize, WAVEFORMATEX* pwfx, DWORD dwFlags );
HRESULT Close(); HRESULT Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead );
HRESULT Write( UINT nSizeToWrite, BYTE* pbData, UINT* pnSizeWrote ); DWORD GetSize();
HRESULT ResetFile();
WAVEFORMATEX* GetFormat() { return m_pwfx; };
};
/** @} */
/** @} */ // FileReadWrite#endif // _MYWAVEFILE_H
http://blog.chinaunix.net/u1/37538/showart_446981.html