帮我看看下面的代码有什么错误?熟悉低级音频api的请进

captainwh 2002-11-12 12:16:35
static HWAVEOUT hWaveOut;
static PWAVEHDR pWaveHdr;
static PBYTE pData,pBuffer;
static WAVEFORMATEX waveformat;
static HANDLE FileHandle;
static int FileSize;
static HANDLE MapHandle;
static char szFileName[] = "E:\\share\\wav\\alarm.wav";

void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case MM_WOM_OPEN:
waveOutWrite(hWaveOut, pWaveHdr, sizeof(WAVEHDR));
break;
case MM_WOM_DONE:
waveOutClose(hWaveOut);
break;
case MM_WOM_CLOSE:
waveOutUnprepareHeader(hWaveOut, pWaveHdr, sizeof(WAVEHDR));
free(pWaveHdr);
hWaveOut = NULL;
break;

default:
break;
}
}

void CPlayWaveDlg::OnButton1()
{
// TODO: Add your control notification handler code here
FileHandle = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (FileHandle == INVALID_HANDLE_VALUE)
{
::MessageBox(NULL, "Open Error", "Open", MB_OK);
return;
}

FileSize = GetFileSize(FileHandle, NULL);

MapHandle = CreateFileMapping(FileHandle, NULL, PAGE_READONLY,
0, FileSize, NULL);
pData = (PBYTE)MapViewOfFile(MapHandle, FILE_MAP_READ, 0, 0, FileSize);
CloseHandle(FileHandle);
CloseHandle(MapHandle);

//
pBuffer = &pData[44];
pWaveHdr = (PWAVEHDR)malloc(sizeof(WAVEHDR));
if(pWaveHdr == NULL)
{
::MessageBox(NULL, "Init Error", "Wave", MB_OK);
return;
}

waveformat.wFormatTag = (WORD)pData[20];
waveformat.nChannels = (WORD)pData[22];
waveformat.nSamplesPerSec = (DWORD)pData[24];
waveformat.nAvgBytesPerSec = (DWORD)pData[28];
waveformat.nBlockAlign = (WORD)pData[32];
waveformat.wBitsPerSample = (WORD)pData[34];
waveformat.cbSize = 0;

waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveformat, (DWORD)waveOutProc, 0, CALLBACK_FUNCTION);

pWaveHdr->lpData = (LPSTR)pBuffer;
pWaveHdr->dwBufferLength = (DWORD)pData[40];
pWaveHdr->dwBytesRecorded = 0;
pWaveHdr->dwUser = 0;
pWaveHdr->dwFlags = 0;
pWaveHdr->dwLoops = 1;
pWaveHdr->lpNext = NULL;
pWaveHdr->reserved = 0;

char str[16];
sprintf(str, "%d", pWaveHdr->dwBufferLength);
AfxMessageBox(str);

waveOutPrepareHeader(hWaveOut, pWaveHdr, sizeof(WAVEHDR));

}

总是播放不出声音,而且pWaveHdr->dwBufferLength读出的数据是116,可是不可能这么小啊,
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wj59 2002-11-14
  • 打赏
  • 举报
回复
up
firebolt2002 2002-11-13
  • 打赏
  • 举报
回复
case MM_WOM_DONE:
waveOutClose(hWaveOut);

怎么出声啊
NowCan 2002-11-13
  • 打赏
  • 举报
回复
http://vip.6to23.com/NowCan1/progtech.htm
看看多媒体那一页。
NowCan 2002-11-13
  • 打赏
  • 举报
回复
太复杂了。参考一下。
http://vip.6to23.com/NowCan1/code/wave.zip
FlyingBoy_qhd 2002-11-12
  • 打赏
  • 举报
回复
没几处对的

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧