1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#include <windows.h>
#include <iostream>
#pragma comment(lib, "winmm.lib")
#include "WavReader.h"
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////
// Open up a .wav file and read it to a buffer
BUFFER WavReader::CreateBuffer()
{
HMMIO handle = mmioOpen(L"C:\\WINDOWS\\MEDIA\\TADA.wav", 0, MMIO_READ);
memset(&ChunkInfo,0, sizeof(MMCKINFO));
mmioDescend(handle, &ChunkInfo, 0, MMIO_FINDRIFF);
FormatChunkInfo.ckid = mmioStringToFOURCC(L"fmt ", 0);
mmioDescend(handle, &FormatChunkInfo, &ChunkInfo, MMIO_FINDCHUNK);
mmioRead(handle, (char*)&waveFmt, sizeof(WAVEFORMATEX));
mmioAscend(handle, &FormatChunkInfo, 0);
DataChunkInfo.ckid = mmioStringToFOURCC(L"data", 0);
mmioDescend(handle, &DataChunkInfo, &ChunkInfo, MMIO_FINDCHUNK);
NumChannels = waveFmt.nChannels;
NumSamples = DataChunkInfo.cksize / (NumChannels * waveFmt.wBitsPerSample/8);
// Allocate memory for the buffers.
buffers = new short *[NumChannels];
for (int i = 0; i < NumChannels; i++) buffers[i] = new short[NumSamples];
// Read data into the buffers.
for (int i = 0; i < NumSamples; i ++)
for (int j = 0; j < NumChannels; j++)
mmioRead(handle, (HPSTR)&buffers[j][i], sizeof(short));
mmioClose(handle, 0);
// Create a structure to return and fill it.
BUFFER bufferStruct;
bufferStruct.channels = NumChannels;
bufferStruct.samples = NumSamples;
// Not sure what to do here to pass my buffers to my WavPlayer class.
bufferStruct.buffersData = ?????????
return bufferStruct;
}
//////////////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
WavReader::WavReader()
{
// Do something here
}
WavReader::~WavReader()
{
// Delete the buffer
}
|