怎样将MIDI音乐加入资源文件并在程序中播放?(50分)

  • 主题发起人 主题发起人 billxu
  • 开始时间 开始时间
我的意思是说:
将MIDI文件加入资源文件中,程序运行时调用资源文件播放MIDI.
 
将*.mid文件置入可执行文件内部的具体做法如下:
假设我们有个名为porsche.mid的文件,先编辑一个名为 AOE.RC的文件,其内容为:
porsche midi porsche.mid 运行命令BRCC32 AOE.RC,得到AOE.RES。 在DELPHI的项目文件,只要加入{$R AOE.RES}语句,编译 后即可将GRANARY.WAV包含进可执行文件内部。
调用这个WAV文件的方法是 PlaySound('porsche',hInstance,SND_RESOURCE);
 
这里有个例子,具体过程如下(mid文件类似):
1) 创建一个应用程序工程,保存在目录C : / S a m p l e s / S 1 0 _ 1 0 中,并在
窗体中添加一个B u t t o n组件。
2) 通常在Wi n d o w s 的M E D I A 目录中有一些WAVE 文件。下面使用的是其中的
一个文件名为D I N G . WAV 的声音文件,将其复制到工程所在的目录
C : / S a m p l e s / S 1 0 _ 1 0 中。
3) 使用文本编辑软件,编写一个纯文本文件Wa v e . r c ,文件中的内容只有一句话:
DING WAVE DING.WAV
4) 保存好文件后,使用Delphi 中的B r c c 3 2 . e x e ,该文件位于目录
X:/Program Files/Borland/ D e l p h i 5 / B i n 中(X 为安装Delphi 5
的硬盘驱动器号)。使用B r c c 3 2 . e x e 对Wa v e . r c 进行编译,例如
可以在M S - D O S 环境中使用下面的命令:
X:/PROGRA~1/BORLAND/DELPHI5/BIN/Brcc32 C:/Samples/S10_10/Wa v e . r c
编译后生成一个Wa v e . R E S 的资源文件。在后面将使用编译指令$ R 将资源
文件包含到可执行文件中。
5) 为了使用Windows API 函数P l a y S o u n d ,还需要在u s e s 语句中包含
m m S y s t e m 单元,并添加B u t t o n 组件的O n C l i c k 事件的处理过程。
具体代码如下:
unit Unit1;
. . .
u s e s
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, mmSystem;
t y p e
. . .
{$R *.DFM}
{$R Wa v e . R E S } // 包含资源文件
procedure TForm1.Button1Click(Sender: TO b j e c t )
b e g i n
// 播放声音
P l a y S o u n d ( ' D I N G ' , h I n s t a n c e , S N D _ R E S O U R C E )
e n d
e n d .
说明:
•
编译、链接后,在运行时只需要一个可执行文件就可以发出D I N G . WAV 中的声音了。
•
对于R E S 文件,可以使用D e l p h i 的Image Editor 来查看。前面提到的
Wa v e . R E S 文件的查看
 
midi 文件不能像楼上的仁兄那样用 PlaySound,因为没有函数支持。
怎么干么……在下也不知道。
 
我试过行的,还不给分?
 
这样的问题不知道有多少人回答过,不会用搜索吗?
建议以后这样的问题请不要回答!
 
billxu:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
请认真阅读大富翁论坛规则说明 http://www.delphibbs.com/delphibbs/rules.htm
 
porsche:
我按你的方法试了,一点声音都没有。
 
porsche, playsound只能播放WAV格式的文件,MIDI你真的试过?千万不要想当然地去回答.
你贴出来的东西也只是改了前半部分,后半还是 WAV :(

delphi中没有很好的方法播放 MIDI,这样吧.

按 PORSCHE贴出来的得到 AOE.RES 后.在程序中

procedure temp;
var R: TResourceStream;
begin

r:=TResourceStream.Create(HInstance, 'PORSCHE', 'MIDI');
r.SaveToFile('c:/aa.mid');
r.Free;

mediaplayer1.filename:='c:/aa.mid';
mediaplayer1.play;
end;
 
porsche你的方法我试过,不行的。
以后你没试过的就不要拿出来!
 
各位大虾真的没有办法了吗?痛苦.........
 
高手在哪里???????????????
 
白河愁的方法不是很好吗?有时只要解决问题就行,而不在于一定要用某一种特定的方法。
如果真要那样的话,便是钻牛尖呀。
 
多人接受答案了。
 

Similar threads

后退
顶部