首页
社区
课程
招聘
[原创]Borland C++ 程序中嵌入XM,MOD音乐
2006-7-22 13:05 11270

[原创]Borland C++ 程序中嵌入XM,MOD音乐

2006-7-22 13:05
11270
背景:习惯于用borland公司的产品,虽然他的IDE产品要被卖掉了,写了一个注册机,想个性化一点,加入一首好听的音乐,把google翻遍了,却没发现有人将xm整入到程序中的,一大片一大片的都是vc,masm,很郁闷,睁着眼一夜没睡,一大早找到了解决方法

步骤:1。去SourceForge.net下载ufmod for win32,地址:http://sourceforge.net/projects/ufmod

2。解压缩后到ufmodlib 目录中,修改makeomf.bat中的内容
如下:
@echo off

rem Select compiler: TASM, MASM or NASM
rem (Choose TASM or NASM for Delphi compatibility)
SET ASM=NASM

rem Select output platform: WINMM or DIRECTSOUND
SET UFMOD_OUTPUT=WINMM

rem Select mixing rate: 22050, 44100 or 48000 (22.05 KHz, 44.1 KHz or 48 KHz)
SET UFMOD_MIXRATE=44100

rem Select filenames encoding (when using XM_FILE flag): ANSI or UNICODE
SET UFMOD_UFS=ANSI

SET OBJ=ufmod.obj

tasm32 /mx /m4 /zn /q /d%UFMOD_OUTPUT%=1 /df%UFMOD_MIXRATE%=1 /d%UFMOD_UFS%=1 masm.asm, %OBJ%

pause
@echo on
cls

保存,运行,得到ufmod.obj

3。控制台当前目录下:tlib ufmod.lib +ufmod.obj  得到ufmod.lib
4.到visual_c目录下找到winmm\ufmod.h文件,修改一个函数:
HWAVEOUT* __stdcall uFMOD_PlaySong(void*, void*, int); --〉修改成:
void* __stdcall uFMOD_PlaySong(LPVOID lpXM, DWORD  param,DWORD  fdwSong);

保存。

5。将以上  ufmod.lib 和 ufmod.h 文件复制到你自己的程序目录下,工程中添加ufmod.lib,头文件引用 ufmod.h ,调用函数uFMOD_PlaySong,嘿嘿,搞定!

函数uFMOD_PlaySong 的调用方法:

(1)内存中:
char xm []={0x45,0x78,0x74,0x65,0x6E,0x64,0x65,0x64,0x20,0x4D,0x6F,0x64,0x75,0x6C,0x65,0x3A,
                0x20,0x73,0x6F,0x66,0x74,0x20,0x6D,0x61,0x6E,0x69,0x61,0x63,0x2D,0x6D,0x69,0x6E,
                0x69,0x6D,0x61,0x6C,0x00,0x1A,0x46,0x61,0x73,0x74,0x54,0x72,0x61,0x63,0x6B,0x65,
                0x72,0x20,0x76,0x32,0x2E,0x30,0x30,0x20,0x20,0x20,0x04,0x01,0x14,0x01,0x00,0x00,
                0x20,0x00,0x00,0x00,0x02,0x00,0x0D,0x00,0x01,0x00,0x01,0x00,0x0A,0x00,0x91,0x00,
                0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
                0x08,0x09,0x0A,0x0B,0x08,0x09,0x0C,0x0B,0x08,0x09,0x0A,0x0B,0x08,0x09,0x0C,0x0B,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x09,0x00,0x00,0x00,0x00,0x04,0x00,0x15,0x00,0x83,0x16,0x01,0x80,0x80,0x9B,0x2E,
                0x01,0x0E,0x60,0x80,0x9B,0x3A,0x01,0x0E,0x62,0x81,0x61,0x83,0x35,0x01,0x09,0x00,
                0x00,0x00,0x00,0x04,0x00,0x15,0x00,0x83,0x16,0x01,0x80,0x80,0x9B,0x2E,0x01,0x0E,
                0x60,0x80,0x9B,0x35,0x01,0x0E,0x62,0x81,0x61,0x83,0x38,0x01,0x09,0x00,0x00,0x00,
                0x00,0x04,0x00,0x14,0x00,0x83,0x16,0x01,0x80,0x80,0x9B,0x2E,0x01,0x0E,0x60,0x80,
                0x9B,0x38,0x01,0x0E,0x62,0x80,0x83,0x33,0x01,0x09,0x00,0x00,0x00,0x00,0x06,0x00,
                0x1F,0x00,0x83,0x16,0x01,0x80,0x80,0x9B,0x2E,0x01,0x0E,0x60,0x80,0x9B,0x33,0x01,
                0x0E,0x61,0x81,0x61,0x83,0x35,0x01,0x83,0x0D,0x01,0x83,0x36,0x01,0x80,0x83,0x36,
                0x01,0x09,0x00,0x00,0x00,0x00,0x04,0x00,0x15,0x00,0x83,0x0F,0x01,0x80,0x80,0x9B,
                0x2E,0x01,0x0E,0x60,0x80,0x9B,0x36,0x01,0x0E,0x62,0x81,0x61,0x83,0x33,0x01,0x09,
                0x00,0x00,0x00,0x00,0x06,0x00,0x1F,0x00,0x83,0x0F,0x01,0x80,0x80,0x9B,0x2E,0x01,
                0x0E,0x60,0x80,0x9B,0x33,0x01,0x0E,0x61,0x81,0x61,0x83,0x2E,0x01,0x83,0x12,0x01,
                0x83,0x33,0x01,0x80,0x83,0x35,0x01,0x09,0x00,0x00,0x00,0x00,0x06,0x00,0x1F,0x00,
                0x83,0x16,0x01,0x80,0x80,0x9B,0x2E,0x01,0x0E,0x60,0x80,0x9B,0x35,0x01,0x0E,0x61,
                0x81,0x61,0x83,0x2E,0x01,0x83,0x0D,0x01,0x83,0x31,0x01,0x80,0x83,0x2E,0x01,0x09,
                0x00,0x00,0x00,0x00,0x08,0x00,0x24,0x00,0x83,0x12,0x01,0x98,0x0A,0x01,0x83,0x19,
                0x01,0x88,0x0A,0x83,0x1E,0x01,0x81,0x61,0x83,0x12,0x01,0x80,0x83,0x14,0x01,0x80,
                0x83,0x1B,0x01,0x80,0x83,0x20,0x01,0x80,0x83,0x14,0x01,0x80,0x09,0x00,0x00,0x00,
                0x00,0x08,0x00,0x25,0x00,0x83,0x12,0x01,0x81,0x61,0x83,0x19,0x01,0x80,0x83,0x1E,
                0x01,0x80,0x83,0x12,0x01,0x80,0x83,0x19,0x01,0x83,0x31,0x01,0x83,0x1E,0x01,0x80,
                0x83,0x12,0x01,0x83,0x31,0x01,0x83,0x19,0x01,0x80,0x09,0x00,0x00,0x00,0x00,0x08,
                0x00,0x28,0x00,0x83,0x14,0x01,0x83,0x33,0x01,0x83,0x1B,0x01,0x80,0x83,0x20,0x01,
                0x83,0x31,0x01,0x83,0x14,0x01,0x80,0x83,0x1B,0x01,0x83,0x30,0x01,0x83,0x20,0x01,
                0x80,0x83,0x14,0x01,0x83,0x31,0x01,0x83,0x1B,0x01,0x80,0x09,0x00,0x00,0x00,0x00,
                0x08,0x00,0x2A,0x00,0x83,0x16,0x01,0x83,0x30,0x01,0x83,0x1D,0x01,0x83,0x31,0x01,
                0x83,0x22,0x01,0x83,0x35,0x01,0x83,0x16,0x01,0x98,0x0A,0x01,0x83,0x1D,0x01,0x88,
                0x0A,0x83,0x22,0x01,0x81,0x61,0x83,0x16,0x01,0x80,0x83,0x1D,0x01,0x80,0x09,0x00,
                0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x83,0x16,0x01,0x80,0x83,0x1D,0x01,0x80,0x83,
                0x22,0x01,0x80,0x83,0x16,0x01,0x80,0x83,0x18,0x01,0x80,0x83,0x1D,0x01,0x80,0x83,
                0x11,0x01,0x80,0x83,0x18,0x01,0x80,0x09,0x00,0x00,0x00,0x00,0x08,0x00,0x2A,0x00,
                0x83,0x16,0x01,0x83,0x30,0x01,0x83,0x1D,0x01,0x83,0x31,0x01,0x83,0x19,0x01,0x83,
                0x2E,0x01,0x83,0x16,0x01,0x98,0x0A,0x01,0x83,0x1D,0x01,0x88,0x0A,0x83,0x19,0x01,
                0x81,0x61,0x83,0x16,0x01,0x80,0x83,0x1D,0x01,0x80,0x07,0x01,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x27,0x01,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x08,
                0x00,0x2C,0x00,0x0E,0x00,0x08,0x00,0x18,0x00,0x16,0x00,0x20,0x00,0x08,0x00,0x2D,
                0x00,0x0D,0x00,0x32,0x00,0x04,0x00,0x3C,0x00,0x07,0x00,0x44,0x00,0x04,0x00,0x5A,
                0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x6E,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x0A,
                0x00,0x28,0x00,0x1E,0x00,0x18,0x00,0x32,0x00,0x20,0x00,0x3C,0x00,0x20,0x00,0x46,
                0x00,0x20,0x00,0x50,0x00,0x20,0x00,0x5A,0x00,0x20,0x00,0x64,0x00,0x20,0x00,0x6E,
                0x00,0x20,0x00,0x78,0x00,0x20,0x00,0x82,0x00,0x20,0x00,0x09,0x06,0x01,0x02,0x04,
                0x02,0x03,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x40,0x00,0x01,
                0x80,0xF9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBF,0x00,0xC3,0x00,0x0A,0x00,0x57,
                0x00,0x6E,0x00,0x23,0x00,0x58,0x54,0x50,0x4D,0x2E,0x2E,0x52,0x56,0x02,0x00,0x00,
                0x00,0x2E,0x50,0x69,0x4D,0x01,0x00,0x00,0x2E,0x2E,0x43,0x4D,0x01,0x00,0x00,0x2E,
                0x2E,0x50,0x4D,0x01,0x00,0x27,0x2E,0x2E,0x42,0x4D,0x02,0x00,0x00,0x00,0x2E,0x2E,
                0x2E,0x50,0x04,0x00,0x80,0x00,0x00,0x00,0x2E,0x2E,0x56,0x47,0x04,0x00,0x40,0x00,
                0x00,0x00,0x2E,0x2E,0x4F,0x46,0x04,0x00,0x80,0x00,0x00,0x00,0x2E,0x2E,0x2E,0x52,
                0x04,0x00,0x05,0x00,0x00,0x00,0x2E,0x2E,0x53,0x43,0x01,0x00,0x00,0x2E,0x2E,0x53,
                0x52,0x01,0x00,0x00,0x2E,0x2E,0x4D,0x46,0x01,0x00,0xFF,0x53,0x54,0x50,0x4D,0x2E,
                0x2E,0x54,0x44,0x04,0x00,0x91,0x00,0x00,0x00,0x2E,0x42,0x50,0x52,0x04,0x00,0x04,
                0x00,0x00,0x00,0x2E,0x4D,0x50,0x52,0x04,0x00,0x10,0x00,0x00,0x00,0x2E,0x2E,0x2E,
                0x43,0x04,0x00,0x02,0x00,0x00,0x00,0x2E,0x2E,0x4D,0x54,0x01,0x00,0x00,0x2E,0x4D,
                0x4D,0x50,0x01,0x00,0x02,0x2E,0x56,0x57,0x43,0x04,0x00,0x00,0x00,0x00,0x00,0x56,
                0x57,0x53,0x4C,0x04,0x00,0x28,0x02,0x17,0x01,0x2E,0x41,0x50,0x53,0x04,0x00,0x64,
                0x00,0x00,0x00,0x56,0x54,0x53,0x56,0x04,0x00,0x64,0x00,0x00,0x00,0x2E,0x56,0x47,
                0x44,0x04,0x00,0x00,0x01,0x00,0x00};

调用:uFMOD_PlaySong(&xm,sizeof(xm),XM_MEMORY);

(2)文件中:
调用:uFMOD_PlaySong("../1.xm",0,XM_FILE);

附件中是已经修改好的 ufmod.lib和ufmod.h,加入程序中可以直接使用

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞8
打赏
分享
最新回复 (18)
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-7-22 13:11
2
0
几个函数补充一下:

uFMOD_StopSong();停止播放

uFMOD_GetStats();返回当前的左右声道

uFMOD_GetTime();返回当前歌曲播放的时间

uFMOD_GetTitle(); 返回歌曲播放的标题
雪    币: 450
活跃值: (552)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 17 2006-7-22 14:20
3
0
很早就用ufmod了
真不错

各种语言都有例子
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
likecrackb 2006-7-23 19:23
4
0
不错,我找遍了整个google都没找到方法,在这找到了,真是太好了   
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-7-29 02:29
5
0
Very nice example!!! In fact, some older uFMOD releases were compiled using Borland C++.
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-7-29 21:55
6
0
楼上的兄弟不会是 ufMOD 的作者吧,怎么越看越像呢?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-7-29 23:40
7
0
Originally posted by dododo
楼上的兄弟不会是 ufMOD 的作者吧,怎么越看越像呢?

I'm afraid I can't understand your question. Babel Fish couldn't understand either. Gotta learn chinesse someday.
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-7-30 00:33
8
0
are you the ufmod 's author? nice to meet you
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-7-30 01:06
9
0
Originally posted by dododo
are you the ufmod 's author?

Actually, uFMOD has 2 developers by now. I'm one of 'em. The other guy is Asterix. Nice to meet you too.
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-7-30 21:34
10
0
it is a great honor to know you, can i talk with you on msn or skype or any other way?

And I hope it will contain Borland C++ builder simple programs in the next version.

I want to know some information about XM structure and how to extract the data used for array,Just like "char xm []={...}"
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-7-31 01:03
11
0
Originally posted by dododo
can i talk with you on msn or skype or any other way?

Had some technical issues with ICQ recently, so, if you don't mind, let's use good old e-mail for now: ufmod@users.sf.net


And I hope it will contain Borland C++ builder simple programs in the next version.

I'd be glad to include your example. Could you, please, make a complete sample source for both WINMM and DX?


I want to know some information about XM structure

http://www.wotsit.org/filestore/xm.zip


and how to extract the data used for array,Just like "char xm []={...}"

Using the included eff.exe tool.
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-7-31 21:47
12
0
with pleasure!

The BCB folder contains WINMM and DirectX projects.

上传的附件:
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-8-2 01:56
13
0
Cool! Thanks! I'll include it in next release. The only thing I don't like is the size of those executables. Asterix says he've seen 8Kb BCB exes or so.
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-8-2 22:11
14
0
i did not pay attention to the size of the file,and
i modified the program into simple application without windows,and compressed with upx,but i still can't deflate the size.
上传的附件:
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-8-2 23:05
15
0
I don't have BCB to test it. So, let's leave it as it is, for now. Next release is almost complete. Your examples already there.
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Desmond 2006-8-8 23:02
16
0
uFMOD v 1.19 for Win32 is available for download.

Release notes and changes:
http://sourceforge.net/project/shownotes.php?release_id=437969&group_id=158498

Download:
http://ufmod.sf.net
雪    币: 462
活跃值: (18)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dododo 2 2006-8-11 12:24
17
0
congratulation !
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yishon 2006-8-11 16:25
18
0
看来看雪不仅卧虎藏龙,还吸引外国同行……HOHO~~

Welcome!
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
vxin 10 2006-9-16 09:08
19
0
有没有For Delphi的?
游客
登录 | 注册 方可回帖
返回