我想用两个320字节大小的缓冲区轮流装载待播放的声音数据,程序如下,但播放效果很不好,请问我应该如何改进?
case MM_WOM_OPEN:
// Enable and disable buttons
EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), TRUE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END), TRUE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), FALSE) ;
SetFocus (GetDlgItem (hwnd, IDC_PLAY_END)) ;
pSaveBuffer=malloc(INP_BUFFER_SIZE);
pSaveBuffer1=malloc(INP_BUFFER_SIZE); fp=fopen("simple.dat","rb");
if(fp==0)
{MessageBox (NULL, TEXT ("The file can not be opened!"),
szAppName, MB_ICONERROR) ;
}
fread(pSaveBuffer,2,160,fp);
fread(pSaveBuffer1,2,160,fp);
filelength=dwDataLength-640;
// Set up header
pWaveHdr1->lpData = pSaveBuffer ;
pWaveHdr1->dwBufferLength = INP_BUFFER_SIZE;//change
pWaveHdr1->dwBytesRecorded = 0 ;
pWaveHdr1->dwUser = 0 ;
pWaveHdr1->dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
pWaveHdr1->dwLoops = dwRepetitions ;
pWaveHdr1->lpNext = NULL ;
pWaveHdr1->reserved = 0 ;
pWaveHdr2->lpData = pSaveBuffer1;
pWaveHdr2->dwBufferLength = INP_BUFFER_SIZE;//change
pWaveHdr2->dwBytesRecorded = 0 ;
pWaveHdr2->dwUser = 0 ;
pWaveHdr2->dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
pWaveHdr2->dwLoops = dwRepetitions ;
pWaveHdr2->lpNext = NULL ;
pWaveHdr2->reserved = 0 ; // Prepare and write
waveOutPrepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
waveOutPrepareHeader (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
waveOutWrite (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
waveOutWrite (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
bEnding = FALSE ;
bPlaying = TRUE ;
return TRUE ;
case MM_WOM_DONE:
if(filelength<=0)
{
fclose(fp);
waveOutUnprepareHeader (hWaveOut, pWaveHdr1, sizeof(WAVEHDR)) ;
waveOutUnprepareHeader (hWaveOut, pWaveHdr2, sizeof(WAVEHDR)) ;
waveOutClose (hWaveOut) ;
return TRUE;
}
fread(((LPWAVEHDR)lParam)->lpData,2,160,fp);
filelength=filelength-320;
waveOutPrepareHeader (hWaveOut,((LPWAVEHDR)lParam) , sizeof (WAVEHDR)) ;
waveOutWrite(hWaveOut,(LPWAVEHDR)lParam,sizeof(WAVEHDR));
return TRUE ;
case MM_WOM_OPEN:
// Enable and disable buttons
EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), TRUE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END), TRUE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV), FALSE) ;
EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), FALSE) ;
SetFocus (GetDlgItem (hwnd, IDC_PLAY_END)) ;
pSaveBuffer=malloc(INP_BUFFER_SIZE);
pSaveBuffer1=malloc(INP_BUFFER_SIZE); fp=fopen("simple.dat","rb");
if(fp==0)
{MessageBox (NULL, TEXT ("The file can not be opened!"),
szAppName, MB_ICONERROR) ;
}
fread(pSaveBuffer,2,160,fp);
fread(pSaveBuffer1,2,160,fp);
filelength=dwDataLength-640;
// Set up header
pWaveHdr1->lpData = pSaveBuffer ;
pWaveHdr1->dwBufferLength = INP_BUFFER_SIZE;//change
pWaveHdr1->dwBytesRecorded = 0 ;
pWaveHdr1->dwUser = 0 ;
pWaveHdr1->dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
pWaveHdr1->dwLoops = dwRepetitions ;
pWaveHdr1->lpNext = NULL ;
pWaveHdr1->reserved = 0 ;
pWaveHdr2->lpData = pSaveBuffer1;
pWaveHdr2->dwBufferLength = INP_BUFFER_SIZE;//change
pWaveHdr2->dwBytesRecorded = 0 ;
pWaveHdr2->dwUser = 0 ;
pWaveHdr2->dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
pWaveHdr2->dwLoops = dwRepetitions ;
pWaveHdr2->lpNext = NULL ;
pWaveHdr2->reserved = 0 ; // Prepare and write
waveOutPrepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
waveOutPrepareHeader (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
waveOutWrite (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
waveOutWrite (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
bEnding = FALSE ;
bPlaying = TRUE ;
return TRUE ;
case MM_WOM_DONE:
if(filelength<=0)
{
fclose(fp);
waveOutUnprepareHeader (hWaveOut, pWaveHdr1, sizeof(WAVEHDR)) ;
waveOutUnprepareHeader (hWaveOut, pWaveHdr2, sizeof(WAVEHDR)) ;
waveOutClose (hWaveOut) ;
return TRUE;
}
fread(((LPWAVEHDR)lParam)->lpData,2,160,fp);
filelength=filelength-320;
waveOutPrepareHeader (hWaveOut,((LPWAVEHDR)lParam) , sizeof (WAVEHDR)) ;
waveOutWrite(hWaveOut,(LPWAVEHDR)lParam,sizeof(WAVEHDR));
return TRUE ;
解决方案 »
- WEBBROWSER使用问题,如何点击页面上的超链接文字
- ==========100分!Delphi经典控件大推荐!============
- Delphi如何结束程序?为什么我的程序窗体结束了,但是程序未能结束?
- 小弟初学,想连个数据库可老不成功,哪为老大帮个忙??
- 各位,这样的贪污应该去哪里投诉
- WIN API资料????
- 一个经典的注册表问题!!!
- advstringgrid 怎么合并单元格以后,再点击合并后的单元格
- delphi6delphi7代码编写器下面有个DIAGRAM页可以写东西的,是干什么用的
- 紧急求救!HELP ME……
- 请问在VC里面函数中定义的unsigned short,unsigned char 类型数据在Delphi里要如何定义?
- 现在大家使用delphi的什么版本啊?我刚装了个D8
另外
你是自己录音后回放么?你填充的录音格式(LPWAVEFORMATEX)是什么?