我读取一个WAV文件到内存里,用WaveOutWrite就是放不出来,请高手指教。代码如下: Fname := 'c:\11.wav';
f := TFileStream.Create(Fname,fmopenread);
f.ReadBuffer(Buf,BufferSize); WAVEFORMATEX.wFormatTag := WAVE_FORMAT_PCM;
WAVEFORMATEX.nChannels := 1;
WAVEFORMATEX.nSamplesPerSec := 8000;
WAVEFORMATEX.nAvgBytesPerSec := 8000;
WAVEFORMATEX.wBitsPerSample := 0;
WAVEFORMATEX.cbSize := 0; WaveOutOpen(@WaveOut,WAVE_MAPPER,@WAVEFORMATEX, 0, 0, CALLBACK_NULL );
WaveHead.lpData := @buf;
WaveHead.dwBufferLength := BufferSize;
WaveHead.dwBytesRecorded := 0;
WaveHead.dwFlags := WHDR_BEGINLOOP OR WHDR_ENDLOOP;
WaveHead.dwLoops := 0;
WaveHead.dwUser := 0;
WaveHead.lpNext := nil;
WaveHead.reserved := 0;
WaveOutPrepareHeader(WaveOut,@WaveHead,sizeof(WaveHead));
waveOutWrite(WaveOut,@WaveHead,sizeof(WaveHead));
WaveOutUnPrepareHeader(WaveOut,@WaveHead,sizeof(WaveHead));
WaveOutClose(WaveOut);
f := TFileStream.Create(Fname,fmopenread);
f.ReadBuffer(Buf,BufferSize); WAVEFORMATEX.wFormatTag := WAVE_FORMAT_PCM;
WAVEFORMATEX.nChannels := 1;
WAVEFORMATEX.nSamplesPerSec := 8000;
WAVEFORMATEX.nAvgBytesPerSec := 8000;
WAVEFORMATEX.wBitsPerSample := 0;
WAVEFORMATEX.cbSize := 0; WaveOutOpen(@WaveOut,WAVE_MAPPER,@WAVEFORMATEX, 0, 0, CALLBACK_NULL );
WaveHead.lpData := @buf;
WaveHead.dwBufferLength := BufferSize;
WaveHead.dwBytesRecorded := 0;
WaveHead.dwFlags := WHDR_BEGINLOOP OR WHDR_ENDLOOP;
WaveHead.dwLoops := 0;
WaveHead.dwUser := 0;
WaveHead.lpNext := nil;
WaveHead.reserved := 0;
WaveOutPrepareHeader(WaveOut,@WaveHead,sizeof(WaveHead));
waveOutWrite(WaveOut,@WaveHead,sizeof(WaveHead));
WaveOutUnPrepareHeader(WaveOut,@WaveHead,sizeof(WaveHead));
WaveOutClose(WaveOut);
解决方案 »
- 一句(关键)代码实现全透明_GDI+版_压轴
- 关于程序u盘加密
- sendinput如何不被真实键盘状态干扰?
- 请教如何在onshow事件里退出.
- 请教各位一个问题,在dephi中查询到数据后,如果实现象在PL/SQL Developer那样,点击一个图标,可以使得查询的一行以列表示?
- dbgrid中记录无法删除,怎么回事
- 问个简单的数学公式问题
- 请问哪里有物料管理系统的数据流程图啊?谢谢啦!!!
- Emergency!!!!报表报表还是报表!怎样把查询的结果生成相应的报表?Right here waiting!
- 那位,解决了fast_report的汉字转行的乱码问题?
- 大家都用什么grid表格控件
- cxGrid 删除所有行的问题?
建议直接用mmSystem单元里函数mmioOpen打开文件mmioDescend进行定位
读结构
var
parent :TMMCKInfo;
wfmtx :TWaveFormatEx;
begin
//打开文件
hWAV:=mmioOpen(PChar(WavFileName), nil, MMIO_READ or MMIO_ALLOCBUF);
//定位
parent.ckid:=MAKEFOURCC('f','m','t',#0);
mmioDescend(hWAV, @parent, nil, 0)
//读结构
mmioRead(hwav, @wfmtx, sizeof(TWaveFormatEx));
...
...