waveoutopen高难度问题,200分相赠(200分)

  • 主题发起人 主题发起人 westdog
  • 开始时间 开始时间
W

westdog

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用waveoutopen函数,在2000、xp下可以同时打开多个(调用多次这个函数打开多个,并可以同时进行播放)。而在98下却只能调用一次,各位大侠请赐教。
简单的方法测试:打开两个录音机程序,各自选一个wav文件播放,在98下就会报错,说播放设备被占用。但是用mediaplayer来播放就没有问题,难道waveoutopen在98下对声卡是独占的?而mediaplayer不是通过waveoutopen来播放的,他是通过什么API来播放的呢?
 
没错,没错。解决的办法是使用 mciSendCommand 工作。
 
讲讲具体办法呢?
 
但是mciSendCommand 只能播放文件,我需要播放内存数据阿。
另外,我发现并不是所有98都有我说的那个问题,难道98有什么升级补丁?
 
哦,还有一个函数忘了告诉你:sndPlaySound 。
另外,创新 PCI 声卡如果也存在这样的问题的话,表示你买到的是假货。

例子如下(播放从内存文件——例子中故意使用内存):
uses MMSYSTEM;

procedure TForm1.Button1Click(Sender: TObject);
var
Ptr: Pointer;
mm:TMemoryStream;
begin

mm:=TMemoryStream.Create;
mm.LoadFromFile('C:/WINDOWS/Media/Windows 登录音.wav');
// 故意转为内存文件
Ptr:=MM.Memory;
if Ptr<>nil then

SndPlaySound(PChar(Ptr),snd_Sync or snd_Memory);

mm.Free;
// 注意使用同步播放才可以在这里 Free
end;

// 但使用异步可以工作得更友好(多个声音一起放)
 
你要装支持WDM的驱动才能在98下打开多个WAV文件
 
在哪里有该驱动程序呢
 
另外,小雨哥,我需要播放的是pcm格式的音频数据,而不是wav文件的。请问有没有办法解决。
 
每种声卡的驱动各自不同。你必须找你的声卡的驱动。一般有 VXD 和 WDM 两种,你现在用的一定是 VXD 的。但有些声卡就没有 WDM 的。
 
后退
顶部