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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
楼主: 0xAA55

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

  [复制链接]
发表于 2019-8-29 19:50:56 | 显示全部楼层
宇宙卐之王 发表于 2015-8-24 10:18
这是调用哪个音色库播放的?可以改吗?

A5大神的例子用的winmm的midiOutAPI,音色完全由具体打开设备驱动决定,应用层无法控制。如果电脑没有硬件midi设备的话,也没有安装第三方软驱动的情况下,就只有一个系统自带 Microsoft GS Wavetable Synth 设备,它的音色库文件路径保存在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\GMFilePath 字段上(但是改这个字段,只会改变DirectMusic的默认音色,对 midiOutAPI 无效,只能暴力替换 gm.dls 文件)。
如果想自己在应用层代码随时随地更换音色库的话,可以考虑入手DirectMusic(因为它是在应用层合成midi再通过DirectSound输出的):https://www.0xaa55.com/forum.php ... 59&fromuid=4293
回复 赞! 靠!

使用道具 举报

发表于 2019-12-4 15:55:34 | 显示全部楼层
:lol
回复 赞! 靠!

使用道具 举报

发表于 2019-12-22 12:52:41 | 显示全部楼层
【C语言】Midi文件播放器(可跨平台)
回复 赞! 靠!

使用道具 举报

发表于 2020-1-10 22:52:47 | 显示全部楼层
JXU2MjExJXU1M0VBJXU2NjJGJXU0RTNBJXU0RTg2JXU3NzBCJXU2RTkwJXU3ODAx
回复 赞! 靠!

使用道具 举报

发表于 2020-3-8 04:09:29 | 显示全部楼层
感谢lz分享,学习了
回复 赞! 靠!

使用道具 举报

发表于 2020-7-15 01:04:41 | 显示全部楼层
回复 赞! 靠!

使用道具 举报

发表于 2020-8-31 20:31:36 | 显示全部楼层
thanks!!!目前刚好在研究
回复 赞! 靠!

使用道具 举报

发表于 2020-8-31 20:43:43 | 显示全部楼层
学习一下!!!!!!
回复

使用道具 举报

发表于 2020-11-26 09:16:34 | 显示全部楼层
谢谢,试一下
回复 赞! 靠!

使用道具 举报

发表于 2021-3-9 22:13:02 | 显示全部楼层
mciOut和midiOut确实会卡,特别是用virtual midi synth做输出设备的时候,一开始就会卡一下
回复 赞! 靠!

使用道具 举报

发表于 2021-3-9 22:29:29 | 显示全部楼层
额,你这个用某些虚拟输出设备播放的时候还是会卡一下,好像是因为winmm api有延迟,得上directx才行
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2021-3-10 15:38:43 | 显示全部楼层
时间的裂缝 发表于 2021-3-9 22:29
额,你这个用某些虚拟输出设备播放的时候还是会卡一下,好像是因为winmm api有延迟,得上directx才行 ...

你说DirectSound么?你如何跨平台?
回复 赞! 靠!

使用道具 举报

发表于 2021-3-11 20:11:43 | 显示全部楼层
本帖最后由 时间的裂缝 于 2021-3-11 20:20 编辑
0xAA55 发表于 2021-3-10 15:38
你说DirectSound么?你如何跨平台?


好了,已经没问题了,我今天调试了一下午,结果最后发现其实是virtual midi synth这个虚拟输出驱动的设置有问题,有个选项大概是可以增加音质(其实听不出什么区别)但是也可能会增加延迟,改成0就不卡了

不过我还是很奇怪为什么有些播放midi的软件比如synthesia和anvil studio就不会有这种问题,它们就不需要把驱动的那个选项改成0,不知道它们是怎么做到的,也许是用的directx吧

最后还要感谢大神提供的代码和讲解

点评

我这个也不需要(基于DirectMusic的软件合成器):https://www.0xaa55.com/thread-25859-1-1.html  发表于 2022-3-23 11:09
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2021-3-12 00:52:13 | 显示全部楼层
时间的裂缝 发表于 2021-3-11 20:11
好了,已经没问题了,我今天调试了一下午,结果最后发现其实是virtual midi synth这个虚拟输出驱动的设置 ...

Synthesia 使用自己的合成器,不用依赖系统提供的合成器。

说起来,我也想自己设计自己的合成器,我想利用音频算法把室内回声和特定音高的波形对虚拟的室内环境与虚拟的乐器本身的共振效果实现出来,看看能不能做出比较好的音质。

然而我感觉收集各种乐器的波表等对于我来说是个难题,所以暂且没有在这方面继续造轮子了。
回复 赞! 靠!

使用道具 举报

发表于 2022-3-22 20:02:28 | 显示全部楼层
楼主,在吗,最近在学这个,想请教一下,就是我用的KEIL 5编写主函数,怎么样实现调用MIDI文件然后下载到单片机中播放按下按钮播放呢!求解答
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2022-3-23 22:38:42 | 显示全部楼层
COCO在丫 发表于 2022-3-22 20:02
楼主,在吗,最近在学这个,想请教一下,就是我用的KEIL 5编写主函数,怎么样实现调用MIDI文件然后下载到单 ...

我这份代码不带MIDI合成器,仅负责解析MIDI文件和指令。

你如果需要用单片机播放的话,我考虑到你可能只想用一个蜂鸣器播放方波。

源码的“pfnSendMidiMsg”函数的实现里,你需要判断MIDI命令和参数,然后自己用GPIO输出你的方波。
回复 赞! 靠!

使用道具 举报

发表于 2022-4-25 11:20:32 | 显示全部楼层
.......................
回复

使用道具 举报

发表于 2022-11-7 14:26:47 | 显示全部楼层
学习一下,最近在做midi播放器
回复 赞! 靠!

使用道具 举报

发表于 2023-10-18 23:43:28 | 显示全部楼层
大佬牛逼
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-23 17:53 , Processed in 0.028907 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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