Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. global buffer or passing by reference?

global buffer or passing by reference?

Scheduled Pinned Locked Moved C / C++ / MFC
csharpc++question
22 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Achim Klein

    Hi, could you post the three header files, please ? Maybe <pre> code </pre> is useful.


    We can do no great things, only small things with great love. - Mother Theresa

    B Offline
    B Offline
    billiam904
    wrote on last edited by
    #10

    ////////////////////////////////////////////////////////////////////// // WavWrite.h: interface for the CWavWrite class. #if !defined(AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_) #define AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include #include #include //#include "readdemowave.h" #define ERROR_LENGTH 1024 //CReadDemoWave cReadDemo; //static DWORD dwDemoDataSize; //WAVEHDR lpDemoData; //static WAVEHDR lpDemoData; /* Definition from MS typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { FOURCC ckid; DWORD cksize; FOURCC fccType; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; */ class CWavWrite { private: char m_szName[FILENAME_MAX]; HMMIO m_hmmioFile; HMMIO m_hmmioDemoFile; MMCKINFO m_ckRIFF, m_ckfmt, m_ckdata; int m_nDataLeft; WAVEFORMATEX *m_pwfx; PCMWAVEFORMAT m_pcmWaveFormat; int m_cbExtraAlloc; MMIOINFO m_mmioInfo; // BD 9/13/05 /*int DEMO; int rndcnt; int bufcnt;*/ // Created here so not created each time Read or Write Data is called // Otherwise these could be local variables - trade speed for size int m_nCopyLength, m_nActualWrite; int m_i; // Error variables int m_nError; char m_szError[ERROR_LENGTH]; public: //WAVEHDR lpDemoData; //DWORD dwDemoDataSize; // Constructor (empty) / Destructor CWavWrite(); virtual ~CWavWrite(); // Data processing - too large to be effective as an inline functions // BD added lat param for demo buffer //int Write(BYTE *pBuffer, int nDataSize, WAVEHDR *pDemoBuffer); int Write(BYTE *pBuffer, int nDataSize); void WriteDemo(BYTE *pBuffer, int nDataSize); // File Manipulation void Open(void); void Init(MMCKINFO *pckRIFF, MMCKINFO *pckfmt, MMCKINFO *pckdata, WAVEFORMATEX *pwfx, int nBufferSize); void Init(short wBitsPerSample, int nSampleFrequency, short wChannels, int nBufferSize); void Close(void); // Parameter Manipulation void SetName(char *); char *GetName(void); // Parameters below may be different than input file, CWavRead. long GetNumberOfSamples(void); long GetSampleFrequency(void); short GetBitsPerSample(void); short GetNumberOfCha

    A 2 Replies Last reply
    0
    • B billiam904

      ////////////////////////////////////////////////////////////////////// // WavWrite.h: interface for the CWavWrite class. #if !defined(AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_) #define AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include #include #include //#include "readdemowave.h" #define ERROR_LENGTH 1024 //CReadDemoWave cReadDemo; //static DWORD dwDemoDataSize; //WAVEHDR lpDemoData; //static WAVEHDR lpDemoData; /* Definition from MS typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { FOURCC ckid; DWORD cksize; FOURCC fccType; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; */ class CWavWrite { private: char m_szName[FILENAME_MAX]; HMMIO m_hmmioFile; HMMIO m_hmmioDemoFile; MMCKINFO m_ckRIFF, m_ckfmt, m_ckdata; int m_nDataLeft; WAVEFORMATEX *m_pwfx; PCMWAVEFORMAT m_pcmWaveFormat; int m_cbExtraAlloc; MMIOINFO m_mmioInfo; // BD 9/13/05 /*int DEMO; int rndcnt; int bufcnt;*/ // Created here so not created each time Read or Write Data is called // Otherwise these could be local variables - trade speed for size int m_nCopyLength, m_nActualWrite; int m_i; // Error variables int m_nError; char m_szError[ERROR_LENGTH]; public: //WAVEHDR lpDemoData; //DWORD dwDemoDataSize; // Constructor (empty) / Destructor CWavWrite(); virtual ~CWavWrite(); // Data processing - too large to be effective as an inline functions // BD added lat param for demo buffer //int Write(BYTE *pBuffer, int nDataSize, WAVEHDR *pDemoBuffer); int Write(BYTE *pBuffer, int nDataSize); void WriteDemo(BYTE *pBuffer, int nDataSize); // File Manipulation void Open(void); void Init(MMCKINFO *pckRIFF, MMCKINFO *pckfmt, MMCKINFO *pckdata, WAVEFORMATEX *pwfx, int nBufferSize); void Init(short wBitsPerSample, int nSampleFrequency, short wChannels, int nBufferSize); void Close(void); // Parameter Manipulation void SetName(char *); char *GetName(void); // Parameters below may be different than input file, CWavRead. long GetNumberOfSamples(void); long GetSampleFrequency(void); short GetBitsPerSample(void); short GetNumberOfCha

      A Offline
      A Offline
      Achim Klein
      wrote on last edited by
      #11

      Many lines. I need a moment...


      We can do no great things, only small things with great love. - Mother Theresa

      1 Reply Last reply
      0
      • B billiam904

        ////////////////////////////////////////////////////////////////////// // WavWrite.h: interface for the CWavWrite class. #if !defined(AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_) #define AFX_WAVWRITE_H__2C400A28_DDC3_11D0_9FD3_444553540001__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include #include #include //#include "readdemowave.h" #define ERROR_LENGTH 1024 //CReadDemoWave cReadDemo; //static DWORD dwDemoDataSize; //WAVEHDR lpDemoData; //static WAVEHDR lpDemoData; /* Definition from MS typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; typedef struct { FOURCC ckid; DWORD cksize; FOURCC fccType; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; */ class CWavWrite { private: char m_szName[FILENAME_MAX]; HMMIO m_hmmioFile; HMMIO m_hmmioDemoFile; MMCKINFO m_ckRIFF, m_ckfmt, m_ckdata; int m_nDataLeft; WAVEFORMATEX *m_pwfx; PCMWAVEFORMAT m_pcmWaveFormat; int m_cbExtraAlloc; MMIOINFO m_mmioInfo; // BD 9/13/05 /*int DEMO; int rndcnt; int bufcnt;*/ // Created here so not created each time Read or Write Data is called // Otherwise these could be local variables - trade speed for size int m_nCopyLength, m_nActualWrite; int m_i; // Error variables int m_nError; char m_szError[ERROR_LENGTH]; public: //WAVEHDR lpDemoData; //DWORD dwDemoDataSize; // Constructor (empty) / Destructor CWavWrite(); virtual ~CWavWrite(); // Data processing - too large to be effective as an inline functions // BD added lat param for demo buffer //int Write(BYTE *pBuffer, int nDataSize, WAVEHDR *pDemoBuffer); int Write(BYTE *pBuffer, int nDataSize); void WriteDemo(BYTE *pBuffer, int nDataSize); // File Manipulation void Open(void); void Init(MMCKINFO *pckRIFF, MMCKINFO *pckfmt, MMCKINFO *pckdata, WAVEFORMATEX *pwfx, int nBufferSize); void Init(short wBitsPerSample, int nSampleFrequency, short wChannels, int nBufferSize); void Close(void); // Parameter Manipulation void SetName(char *); char *GetName(void); // Parameters below may be different than input file, CWavRead. long GetNumberOfSamples(void); long GetSampleFrequency(void); short GetBitsPerSample(void); short GetNumberOfCha

        A Offline
        A Offline
        Achim Klein
        wrote on last edited by
        #12

        I guess you have a class named CWavRead. I guess you want to pass the buffer that this class fills to other functions. I guess all of this takes place somewhere inside your CSingleDlg class. Please correct me, if I'm wrong. In this case my header file would approximately look like this:

        // forward declaration
        class CWavRead;

        // class definition
        class CSingleDlg
        {
        public:

        ...

        private:

        // my dialog 'knows' an object of the CWavRead class
        CWavRead* m_wavReader;
        };

        And my implementation file would approximately look like this:

        #include "SingleDlg.h"
        #include "WavRead.h"

        // constructor
        CSingleDlg::CSingleDlg()
        {
        m_wavReader = new CWavRead;
        }

        // destructor
        CSingleDlg::~CSingleDlg()
        {
        delete m_wavReader;
        }

        // read wav file
        CSingleDlg::OnFileOpen()
        {
        m_wavReader->read(path);
        }

        // modify wav data
        CSingleDlg::OnEditModify()
        {
        // get data
        long size = m_wavReader->getBufferSize();
        BYTE* buffer = m_wavReader->getBuffer();

        // create local (temporary) object
        CWavOperator operator;

        // pass the read data
        operator.DoSomething(buffer, size);
        }

        Is it useful ?


        We can do no great things, only small things with great love. - Mother Theresa

        A 1 Reply Last reply
        0
        • A Achim Klein

          I guess you have a class named CWavRead. I guess you want to pass the buffer that this class fills to other functions. I guess all of this takes place somewhere inside your CSingleDlg class. Please correct me, if I'm wrong. In this case my header file would approximately look like this:

          // forward declaration
          class CWavRead;

          // class definition
          class CSingleDlg
          {
          public:

          ...

          private:

          // my dialog 'knows' an object of the CWavRead class
          CWavRead* m_wavReader;
          };

          And my implementation file would approximately look like this:

          #include "SingleDlg.h"
          #include "WavRead.h"

          // constructor
          CSingleDlg::CSingleDlg()
          {
          m_wavReader = new CWavRead;
          }

          // destructor
          CSingleDlg::~CSingleDlg()
          {
          delete m_wavReader;
          }

          // read wav file
          CSingleDlg::OnFileOpen()
          {
          m_wavReader->read(path);
          }

          // modify wav data
          CSingleDlg::OnEditModify()
          {
          // get data
          long size = m_wavReader->getBufferSize();
          BYTE* buffer = m_wavReader->getBuffer();

          // create local (temporary) object
          CWavOperator operator;

          // pass the read data
          operator.DoSomething(buffer, size);
          }

          Is it useful ?


          We can do no great things, only small things with great love. - Mother Theresa

          A Offline
          A Offline
          Achim Klein
          wrote on last edited by
          #13

          Unfortunately I don't know the interface of your CWavRead class...


          We can do no great things, only small things with great love. - Mother Theresa

          B 1 Reply Last reply
          0
          • A Achim Klein

            Unfortunately I don't know the interface of your CWavRead class...


            We can do no great things, only small things with great love. - Mother Theresa

            B Offline
            B Offline
            billiam904
            wrote on last edited by
            #14

            Thanks. Can you give me an idea of the implementation code for the getBuffer function to make sure I'm doing it right. I wrote one but it kepts resetting. Here's my read .h #include #include #include #define ERROR_LENGTH 1024 class CReadDemoWave { public: BYTE m_pbyDemoBuffer; static int testinteger; void ReadDemoWave(); BYTE *ReadDemoIntoBuffer(); void PlayWav(); long QueueWaveData(HWAVEOUT HWaveOut, WAVEHDR * waveHeader, DWORD WaveDataPlayed, DWORD WaveBufSize, HMMIO HMmio); BYTE *GetDemoBuffer(void); //void WriteDemo(HMMIO recordHandle); //public: // =========== D == E == M == O ======================= // BD create demo buffer. WAVEHDR lpDemoData; DWORD dwDemoDataSize; int m_nDemoBufferSize; //BYTE* m_pbyDemoBuffer; HMMIO m_hmmio; //HMMIO hmmio; char m_szError[ERROR_LENGTH]; int m_nError; MMIOINFO m_mmioInfo; DWORD dwDataSize; DWORD dwCount; HPSTR m_hptr; int m_nBufferSize; //WAVEFORMATEX waveFormat; }; Bill Dennis Orlando, FL

            A 1 Reply Last reply
            0
            • B billiam904

              Thanks. Can you give me an idea of the implementation code for the getBuffer function to make sure I'm doing it right. I wrote one but it kepts resetting. Here's my read .h #include #include #include #define ERROR_LENGTH 1024 class CReadDemoWave { public: BYTE m_pbyDemoBuffer; static int testinteger; void ReadDemoWave(); BYTE *ReadDemoIntoBuffer(); void PlayWav(); long QueueWaveData(HWAVEOUT HWaveOut, WAVEHDR * waveHeader, DWORD WaveDataPlayed, DWORD WaveBufSize, HMMIO HMmio); BYTE *GetDemoBuffer(void); //void WriteDemo(HMMIO recordHandle); //public: // =========== D == E == M == O ======================= // BD create demo buffer. WAVEHDR lpDemoData; DWORD dwDemoDataSize; int m_nDemoBufferSize; //BYTE* m_pbyDemoBuffer; HMMIO m_hmmio; //HMMIO hmmio; char m_szError[ERROR_LENGTH]; int m_nError; MMIOINFO m_mmioInfo; DWORD dwDataSize; DWORD dwCount; HPSTR m_hptr; int m_nBufferSize; //WAVEFORMATEX waveFormat; }; Bill Dennis Orlando, FL

              A Offline
              A Offline
              Achim Klein
              wrote on last edited by
              #15

              If your read function fills m_pbyDemoBuffer, just write

              BYTE* CReadDemoWave::getBuffer() const
              {
              return m_pbyDemoBuffer;
              }

              Returning a reference (pointer) breaks the privacy concept of your class, but it's handy.


              We can do no great things, only small things with great love. - Mother Theresa

              B 1 Reply Last reply
              0
              • A Achim Klein

                If your read function fills m_pbyDemoBuffer, just write

                BYTE* CReadDemoWave::getBuffer() const
                {
                return m_pbyDemoBuffer;
                }

                Returning a reference (pointer) breaks the privacy concept of your class, but it's handy.


                We can do no great things, only small things with great love. - Mother Theresa

                B Offline
                B Offline
                billiam904
                wrote on last edited by
                #16

                I have it like this: BYTE *CReadDemoWave::GetDemoBuffer(void) { return &m_pbyDemoBuffer; } When I take out the refrence (&), I get a compiler error saying it can't convert from BYTE to BYTE*. It's been 15 years since I've worked with pointers so not sure I am doing this correctly. My pointer seems to be resetting itself from the time the buffer is created and the time I call GetDemoBuffer(). Bill Dennis Orlando, FL

                A 1 Reply Last reply
                0
                • B billiam904

                  I have it like this: BYTE *CReadDemoWave::GetDemoBuffer(void) { return &m_pbyDemoBuffer; } When I take out the refrence (&), I get a compiler error saying it can't convert from BYTE to BYTE*. It's been 15 years since I've worked with pointers so not sure I am doing this correctly. My pointer seems to be resetting itself from the time the buffer is created and the time I call GetDemoBuffer(). Bill Dennis Orlando, FL

                  A Offline
                  A Offline
                  Achim Klein
                  wrote on last edited by
                  #17

                  BYTE m_pbyDemoBuffer is no array. It's just one number. If you want to create an array, please use new and delete:

                  int size = 1000;

                  // allocate memory
                  BYTE* array = new BYTE[size];

                  // free memory
                  delete[] array;

                  It's like malloc and free.


                  We can do no great things, only small things with great love. - Mother Theresa

                  B 1 Reply Last reply
                  0
                  • A Achim Klein

                    BYTE m_pbyDemoBuffer is no array. It's just one number. If you want to create an array, please use new and delete:

                    int size = 1000;

                    // allocate memory
                    BYTE* array = new BYTE[size];

                    // free memory
                    delete[] array;

                    It's like malloc and free.


                    We can do no great things, only small things with great love. - Mother Theresa

                    B Offline
                    B Offline
                    billiam904
                    wrote on last edited by
                    #18

                    In another post, I asked someone to show me how to allocate member for m_pbyDemoBuffer. I am rewading the wave data into a LPSTR variable, then creating and allocating memory for m_pbyDemoBuffer using GlobalAlloc and doing memcpy from lpDemoData.lpData to m_pbyDemoBuffer. I am then returning *m_pbyDemoBuffer in GetDemoBuffer(). So, not using arrays here. Bill Dennis Orlando, FL

                    A 1 Reply Last reply
                    0
                    • B billiam904

                      In another post, I asked someone to show me how to allocate member for m_pbyDemoBuffer. I am rewading the wave data into a LPSTR variable, then creating and allocating memory for m_pbyDemoBuffer using GlobalAlloc and doing memcpy from lpDemoData.lpData to m_pbyDemoBuffer. I am then returning *m_pbyDemoBuffer in GetDemoBuffer(). So, not using arrays here. Bill Dennis Orlando, FL

                      A Offline
                      A Offline
                      Achim Klein
                      wrote on last edited by
                      #19

                      I am reading the wave data into a LPSTR variable, [...] How do you allocate the memory at the position your LPSTR variable points to ?


                      We can do no great things, only small things with great love. - Mother Theresa

                      B 1 Reply Last reply
                      0
                      • A Achim Klein

                        I am reading the wave data into a LPSTR variable, [...] How do you allocate the memory at the position your LPSTR variable points to ?


                        We can do no great things, only small things with great love. - Mother Theresa

                        B Offline
                        B Offline
                        billiam904
                        wrote on last edited by
                        #20

                        I've pasted part of the code below. I have a lot of junk commented out in the actual .cpp file but if you want that, I can send it without violating my contract. Thanks. ''Allocate space for data in lpDemoData structure. // lpData is LPSTR. if (!( lpDemoData.lpData = (char *)VirtualAlloc(0, dwDemoDataSize<<1, MEM_COMMIT, PAGE_READWRITE))) { printf("ERROR: Can't allocate memory for WAVE buffer!\n"); } // Read Data Chunk into lpData if (readres = mmioRead(hmmio, (HPSTR )lpDemoData.lpData, dwDemoDataSize) != dwDemoDataSize) { AfxMessageBox("Error: Failed to read data chunk."); mmioClose(hmmio,0); return; } //Create byte-based buffer, allocate memory and copy // lpData to it. int lenlpData=strlen(lpDemoData.lpData); m_pbyDemoBuffer=(BYTE)GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, lenlpData ); memcpy((BYTE*)m_pbyDemoBuffer, lpDemoData.lpData, lenlpData); Bill Dennis Orlando, FL

                        A 1 Reply Last reply
                        0
                        • B billiam904

                          I've pasted part of the code below. I have a lot of junk commented out in the actual .cpp file but if you want that, I can send it without violating my contract. Thanks. ''Allocate space for data in lpDemoData structure. // lpData is LPSTR. if (!( lpDemoData.lpData = (char *)VirtualAlloc(0, dwDemoDataSize<<1, MEM_COMMIT, PAGE_READWRITE))) { printf("ERROR: Can't allocate memory for WAVE buffer!\n"); } // Read Data Chunk into lpData if (readres = mmioRead(hmmio, (HPSTR )lpDemoData.lpData, dwDemoDataSize) != dwDemoDataSize) { AfxMessageBox("Error: Failed to read data chunk."); mmioClose(hmmio,0); return; } //Create byte-based buffer, allocate memory and copy // lpData to it. int lenlpData=strlen(lpDemoData.lpData); m_pbyDemoBuffer=(BYTE)GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, lenlpData ); memcpy((BYTE*)m_pbyDemoBuffer, lpDemoData.lpData, lenlpData); Bill Dennis Orlando, FL

                          A Offline
                          A Offline
                          Achim Klein
                          wrote on last edited by
                          #21

                          Yeah, if your project isn't yet working, I'll have a look at it.


                          We can do no great things, only small things with great love. - Mother Theresa

                          B 1 Reply Last reply
                          0
                          • A Achim Klein

                            Yeah, if your project isn't yet working, I'll have a look at it.


                            We can do no great things, only small things with great love. - Mother Theresa

                            B Offline
                            B Offline
                            billiam904
                            wrote on last edited by
                            #22

                            .h: #include #include #include #define ERROR_LENGTH 1024 class CReadDemoWave { public: BYTE m_pbyDemoBuffer; static int testinteger; void ReadDemoWave(); BYTE *ReadDemoIntoBuffer(); void PlayWav(); long QueueWaveData(HWAVEOUT HWaveOut, WAVEHDR * waveHeader, DWORD WaveDataPlayed, DWORD WaveBufSize, HMMIO HMmio); BYTE *GetDemoBuffer(void); //void WriteDemo(HMMIO recordHandle); //public: // =========== D == E == M == O ======================= // BD create demo buffer. WAVEHDR lpDemoData; DWORD dwDemoDataSize; int m_nDemoBufferSize; //BYTE* m_pbyDemoBuffer; HMMIO m_hmmio; //HMMIO hmmio; char m_szError[ERROR_LENGTH]; int m_nError; MMIOINFO m_mmioInfo; DWORD dwDataSize; DWORD dwCount; HPSTR m_hptr; int m_nBufferSize; //WAVEFORMATEX waveFormat; }; .cpp: // ================DEMO======================== BYTE *ReadDemoWave::ReadDemoIntoBuffer() { // HPSTR demobuffer; // Open file if( (m_hmmio=mmioOpen("AIPL.WAV", NULL,MMIO_ALLOCBUF | MMIO_READ )) == NULL ) { AfxMessageBox("A critical file is missing from your system. Contact AIPL. Singulator will now stop."); m_nError = 1; exit(NULL); } // GET INFO ON FILE I/O BUFFER if (mmioGetInfo(m_hmmio, &m_mmioDemoInfo, 0)) { sprintf(m_szError, "Failed to get I/O buffer info/n"); AfxMessageBox("Failed to get I/O buffer info"); m_nError = 1; mmioClose(m_hmmio,0); return (NULL); } // check if needs advance if (m_mmioDemoInfo.pchNext == m_mmioDemoInfo.pchEndRead){ if (mmioAdvance(m_hmmio,&m_mmioDemoInfo, MMIO_READ)){ //ERROR HERE mmioClose(m_hmmio, 0); sprintf(m_szError, "Failed to Advance I/O buffer info/n"); AfxMessageBox("Failed to advance I/O buffer info"); m_nError = 1; return (NULL); } } HWND hwnd=NULL; LPSTR path = "AIPL.WAV"; PlayWav(); WriteDemo(&m_pbyDemoBuffer,dwDemoDataSize); mmioSetInfo(m_hmmio, &m_mmioDemoInfo, 0); mmioClose(m_hmmio, 0); return (&m_pbyDemoBuffer); } //================PLAYWAV======================= void CReadDemoWave::PlayWav() { HMMIO hmmio; MMCKINFO mmckinfoParent; MMCKINFO mmckinfoSubchunk; DWORD dwFmtSize; DWORD WaveDataPlayed; HWAVEOUT hwaveout=NULL; WAVEFORMATEX waveFormat; /* for reading a fmt chunk's data */ waveFormat.wFormatTag = WAVE_FORMAT_PCM; if((hmmio=mmioOpen("aipl.WAV",NULL,MMIO_READ | MMIO_ALLOCBUF)) == NULL) { AfxMessageBox("Error opening file")

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups