废话少说,看代码:VC++实现#include <mmsystem.h>
#include <dsound.h>
#pragma comment(lib, "dsound.lib")void CDirectsoundDlg::OnButton1() 
{
unsigned char audiobuf[160000];
CFile file;
WAVEFORMATEX format;
DSBUFFERDESC BufferDesc;
LPDIRECTSOUND lpDirectSound;
LPDIRECTSOUNDBUFFER lpDSoundBuffer;
LPVOID ptr1, ptr2;
DWORD pwd1, pwd2; file.Open("1.txt", CFile::modeRead | CFile::shareDenyNone);
file.Read(audiobuf, file.GetLength()); memset(&format, 0, sizeof(format));
format.wFormatTag = WAVE_FORMAT_PCM;
format.nChannels = 1;
format.nSamplesPerSec = 8000;
format.nAvgBytesPerSec = 16000;
format.nBlockAlign = 2;
format.wBitsPerSample = 16; memset(&BufferDesc, 0, sizeof (BufferDesc));
BufferDesc.dwSize = sizeof(DSBUFFERDESC);
BufferDesc.dwBufferBytes = file.GetLength();
BufferDesc.lpwfxFormat = &format; DirectSoundCreate(0, &lpDirectSound, 0);
lpDirectSound->SetCooperativeLevel(m_hWnd, DSSCL_NORMAL);
lpDirectSound->CreateSoundBuffer(&BufferDesc, &lpDSoundBuffer, 0);
lpDSoundBuffer->Lock(0, file.GetLength(), &ptr1, &pwd1, &ptr2, &pwd2, 0);
memcpy(ptr1, audiobuf, pwd1);
memcpy(ptr2, audiobuf+pwd1, pwd2);
lpDSoundBuffer->Unlock(ptr1, pwd1, ptr2, pwd2);
lpDSoundBuffer->Play (0, 0, 0); file.Close ();
}Delphi实现uses MMSystem, DirectSound;procedure TForm1.Button1Click(Sender: TObject);
var
  audiobuf: array[0..160000-1] of byte;
  stream: TFileStream;
  format: TWAVEFORMATEX;
  BufferDesc: DSBUFFERDESC;
  lpDirectSound: IDirectSound;
  lpDirectSoundBuffer: IDirectSoundBuffer;
  ptr1, ptr2: pointer;
  pdw1, pdw2: dword;
begin
  stream:=TFileStream.Create('1.txt', fmOpenRead);
  stream.ReadBuffer(audiobuf, stream.Size);  fillchar(format, sizeof(format), 0);
  format.wFormatTag:=WAVE_FORMAT_PCM;
  format.nChannels:=1;
  format.nSamplesPerSec:=8000;
  format.nAvgBytesPerSec:=16000;
  format.nBlockAlign:=2;
  format.wBitsPerSample:=16;  fillchar(bufferdesc, sizeof(bufferdesc), 0);
  bufferdesc.dwSize:=sizeof(bufferdesc);
  bufferdesc.dwBufferBytes:=stream.Size;
  bufferdesc.lpwfxFormat:=@format;  DirectSoundCreate(nil, lpDirectSound, nil);
  lpDirectSound.SetCooperativeLevel(Handle, DSSCL_NORMAL);
  lpDirectSound.CreateSoundBuffer(bufferdesc, lpDirectSoundBuffer, nil);
  lpDirectSoundBuffer.Lock(0, stream.Size, ptr1, pdw1, ptr2, pdw2, 0);
  copymemory(ptr1, @audiobuf, pdw1);
  copymemory(ptr2, pchar(@audiobuf)+pdw1, pdw2);
  lpDirectSoundBuffer.Unlock(ptr1, pdw1, ptr2, pdw2);
  lpDirectSoundBuffer.Play(0, 0, 0);
  
  stream.Free;
end;说明:一."test.pci"这个文件是我录制的一段纯pci数据(10秒),无wave文件头(为了测试方便)
二.DirectSound.pas这个单元我是用的dspack提供的,里面包涵DSBUFFERDESC、IDirectSound、IDirectSoundBuffer的定义结果:VC++实现的代码工作正常,Delphi实现的代码没有任何错误就是放不出声音:)问题:一.啥原因?
二.Delphi下如何使用DirectSound?像我这样直接使用dspack封装的接口对不对?