我想用VC编写一段代码读取一段PCM格式的音频文件,该如何处理比较好啊?新手向大家学习

解决方案 »

  1.   

    微软的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
      

  2.   

    你打算怎么处理?干什么用?一般用waveOut系列函数就可以了。建议你先去了解一下PCM的格式吧,可以参考:
    http://blog.chinaunix.net/u1/37538/showart_446981.html