请问如何把wav,midi文件做成一个单独的dll文件,然后在程序中动态调用播放?(50分)

  • 主题发起人 主题发起人 138075
  • 开始时间 开始时间
1

138075

Unregistered / Unconfirmed
GUEST, unregistred user!
看清楚,是DLL 不是资源文件。
 
没人会吗?
 
你把它作成RES资源文件,再放到DLL中,再调用不就得了。
 
我要是会调用还用问吗?
 
hygsxy 方法可行的。不过提醒兄弟,播放时下定要放在线程中,不然CPU波大,前几天我刚做了这个东西。不过有没有放在DLL中,我想你只要在DLL中做一个接口,在你的程序中调用就可以了,如果不会做接口、调用,你查查,就这个论坛上这类东西实在太多了。
 
hygsxy 方法可行的。不过提醒兄弟,播放时下定要放在线程中,不然CPU波大,前几天我刚做了这个东西。不过有没有放在DLL中,我想你只要在DLL中做一个接口,在你的程序中调用就可以了,如果不会做接口、调用,你查查,就这个论坛上这类东西实在太多了。
=========================================
就这个论坛上这类东西实在太多了。????????????????????????????????
=========================================
您能举个例子哪篇有写调用DLL播放wav或midi的??
调用icon或图片的倒是满天飞。
 
1: 你把wav,mini做到res文件里。
2:把资源文件放到DLL中进行编译。
3:加载库
4:你用playsound(资源文件名,application.handle,snd_resource);播放。
你看这样行不行,尽快答复我。
 
我试了,不行
 
做在DLL里,我没有试过。
我可以给你看一个在线程播放WAV的例子,这是我在一个安防报警的项目里用到的。这个线程调用资源文件中的UW的WAV资源。
把 HYGSXY的顺序换一下试试,
1:你把wav,mini做到res文件里
2:把资源文件放到DLL中
3:做一个接口:该接口创建一个我下面那个线程。
4:编译DLL
5:在你的EXE里加载库
6:调用接口

unit PlaythreadUnit;

interface

uses
Classes,MMSystem, SysUtils;

type
TPlaythread = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
public
Constructor Create(b:boolean);
Destructor Destroy;override;
end;


implementation

{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure TPlaythread.UpdateCaption;
begin

Form1.Caption := 'Updated in a thread';
end;

}

{ TPlaythread }

constructor TPlaythread.Create(b: boolean);
begin

inherited Create(True);
self.FreeOnTerminate:=True;
self.Suspended:=False;

end;


destructor TPlaythread.Destroy;
begin


inherited;
end;


procedure TPlaythread.Execute;
var
i:integer;
begin

for i:=1 to 40do

begin

PlaySound('UW',hInstance,SND_RESOURCE);
sleep (3000);
end;

{ Place thread code here }
end;


end.
 
PlaySound('UW',hInstance,SND_RESOURCE);
sleep (3000);

楼上有没有想过,你这样如果长度超过3秒呢?为什么不加多个参数来控制呢?
PlaySound本身就功能就很强大的啊!
 
PlaySound('UW',hInstance,SND_RESOURCE+SND_LOOP+SND_ASYNC);
PlaySound(nil,0,SND_PURGE);
以上的方法是可以实现打开、关闭的WAV的播放。
但这样做后就更难控制了呀,我要求在线程中播放3分钟,怎么做呢?还不如我那样方便的很,效果都是差不多,所以怎么用还要实际的需要啊
 
后退
顶部