技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
123
返回列表 发新帖
楼主: 0xAA55
收起左侧

【C语言】Midi文件播放器(可跨平台)

[复制链接]

11

主题

44

帖子

340

积分

用户组: 中·技术宅

UID
2285
精华
0
威望
28 点
宅币
240 个
贡献
0 次
宅之契约
0 份
在线时间
26 小时
注册时间
2017-2-25
发表于 2018-8-7 12:08:11 | 显示全部楼层
本帖最后由 乘简 于 2018-8-7 13:12 编辑

写的代码高深莫测啊,,这里我没看懂啊,希望楼主指点一下。
这里是声明部分:
[C] 纯文本查看 复制代码
//MIDIFILE的函数调用约定
#ifndef Midi_c
#define Midi_c _cdecl
#endif // !Midi_c

//MIDIFILE的符号导出规则
#ifndef Midi_x
  #ifdef __cplusplus
  #define Midi_x extern"C"
  #else // !__cplusplus
  #define Midi_x extern
  #endif // !__cplusplus
#endif // !Midi_x

//MIDIFILE的导出函数
#define Midi_fn(fn,rt) Midi_x rt Midi_c fn

这里是调用:
[C] 纯文本查看 复制代码
	//分析文件
	if(!MidiParserStart(&Parser))
	{
		fputs("Could not start the parser.\n",stderr);
		goto BadRet;
	}

这里是实现:
[C] 纯文本查看 复制代码
//=============================================================================
//MidiParserStart:
//分析MIDI文件,为播放做准备。失败返回零,成功返回非零
//-----------------------------------------------------------------------------
Midi_fn(MidiParserStart,int)
(
	MidiParser_p pParser
)
{
	...
	return 0;
}


============================================================================
哈哈。。。已经看懂了。
翻译过来就是:
extern int _cdecl MidiParserStart(MidiParser_p pParser){...}

1020

主题

2262

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
201
威望
271 点
宅币
17272 个
贡献
34501 次
宅之契约
0 份
在线时间
1636 小时
注册时间
2014-1-26
 楼主| 发表于 2018-8-7 18:33:48 | 显示全部楼层
乘简 发表于 2018-8-7 12:08
写的代码高深莫测啊,,这里我没看懂啊,希望楼主指点一下。
这里是声明部分:
[mw_shl_code=c,true]//MIDI ...

没错。这些宏是为了方便改调用约定等。

0

主题

1

帖子

15

积分

用户组: 初·技术宅

UID
4185
精华
0
威望
2 点
宅币
10 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-8-17
发表于 2018-8-17 16:52:40 | 显示全部楼层
test~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
4315
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-9-25
发表于 2018-9-25 00:07:00 | 显示全部楼层
感谢分享!
回复

使用道具 举报

0

主题

1

帖子

15

积分

用户组: 初·技术宅

UID
4351
精华
0
威望
2 点
宅币
10 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-10-9
发表于 2018-10-9 15:42:28 | 显示全部楼层
谢谢分享!
回复

使用道具 举报

0

主题

1

帖子

9

积分

用户组: 初·技术宅

UID
4428
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-11-1
发表于 2018-11-1 11:21:19 | 显示全部楼层
谢谢分享,,,,,,,高手

1

主题

17

帖子

44

积分

用户组: 初·技术宅

UID
4492
精华
0
威望
2 点
宅币
23 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-11-20
发表于 2018-11-20 18:24:16 | 显示全部楼层
我来看看,顺便挣点币币

0

主题

2

帖子

10

积分

用户组: 初·技术宅

UID
4594
精华
0
威望
0 点
宅币
8 个
贡献
0 次
宅之契约
0 份
在线时间
0 小时
注册时间
2018-12-28
发表于 2018-12-28 10:57:17 | 显示全部楼层
写的非常好,想继续阅读

0

主题

2

帖子

9

积分

用户组: 初·技术宅

UID
4356
精华
0
威望
0 点
宅币
7 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2018-10-10
发表于 2019-1-8 17:08:27 | 显示全部楼层
学习学习
回复

使用道具 举报

0

主题

2

帖子

9

积分

用户组: 初·技术宅

UID
4356
精华
0
威望
0 点
宅币
7 个
贡献
0 次
宅之契约
0 份
在线时间
1 小时
注册时间
2018-10-10
发表于 2019-1-12 13:17:53 | 显示全部楼层
你这个MIDI在播放时,速度是变化的,但大神分享的code是没有更新速度的,只有抓取到第一个速度就全曲不变,你更改下解析端的FF码部分执行就行了。

1020

主题

2262

帖子

5万

积分

用户组: 管理员

一只技术宅

UID
1
精华
201
威望
271 点
宅币
17272 个
贡献
34501 次
宅之契约
0 份
在线时间
1636 小时
注册时间
2014-1-26
 楼主| 发表于 2019-1-12 14:56:15 | 显示全部楼层
kooloo 发表于 2019-1-12 13:17
你这个MIDI在播放时,速度是变化的,但大神分享的code是没有更新速度的,只有抓取到第一个速度就全曲不变, ...

难道所谓“大神”的“没有更新速度”这一点是特性而非BUG?当一个MIDI文件在中途需要调整BPM的时候怎么办?

如果BPM不应该更新,那为什么MIDI文件要在中途插入BPM更新的功能?

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-2-19 15:32 , Processed in 0.099710 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表