C++ MIDI 文件更改乐器

发布于 2024-12-11 08:44:11 字数 151 浏览 0 评论 0原文

有没有办法在 MSVC 2008 中使用 C++ 播放 MIDI 文件并更改正在播放的乐器?即,我可以播放几个钢琴小节的 .mid 文件,但将钢琴声音更改为电吉他吗?

编辑:抱歉我不够具体!我使用 Microsoft GS Wavetable Synth 作为我的合成器。

Is there a way to play a MIDI file using C++ in MSVC 2008 and change the instrument that is playing? i.e., can I play a .mid file of a few measures of piano, but change the piano sound to an electric guitar?

EDIT: Sorry I was not specific enough!! I am using Microsoft GS Wavetable Synth as my synthesizer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

你曾走过我的故事 2024-12-18 08:44:11

如果乐器支持,您应该发送程序更改消息来更改声音。否则,您可能会以错误的方式看待这个问题,而应该使用多种仪器。

If the instrument supports it, you should send a program change message to change the sound. Otherwise, you are probably looking at this problem the wrong way and should use multiple instruments instead.

删除→记忆 2024-12-18 08:44:11

检查此链接:

http://protodesign-inc.com/source/MIDI.htm

您正在寻找的功能已在 MIDI.cpp 中实现。还有一个可用的测试控制台应用程序:

http://protodesign-inc.com/source/MIDIplay_X。嗯

Check this link:

http://protodesign-inc.com/source/MIDI.htm

The functionality you are looking for is implemented in MIDI.cpp. There is also a testing console app available:

http://protodesign-inc.com/source/MIDIplay_X.htm

与之呼应 2024-12-18 08:44:11

从您的帖子中,我假设您已经编写了从 MIDI 文件读取事件并将其实时输出到设备的代码。因此,要更改声音,您需要 MIDI 程序更改事件。您可以在此处找到 GM 声音列表(请注意,GS 是 GM 的超集) )以及 MIDI 事件的定义此处

如果您想将通道 1 上的程序更改为失真吉他,那么您需要输出字节(十六进制):

C0 1E

“C”是程序更改事件的前缀,0 指通道 1(请注意,我们通常指 MIDI 通道 1-16,但 MIDI 事件从零开始计数通道号)。 1E 是节目 31(同样,它们通常表示为 1-128,但 MIDI 事件从零开始计数)。

From your post, I'm assuming that you already have written code that reads in the events from the MIDI file and is outputting them to the device in real time. So to change the sound you need a MIDI program change event. You can find a list of the GM sounds here (note that GS is a superset of GM) and the definitions of the MIDI events here.

If you want to change the program on channel 1 to a distortion guitar then you'll need to output the bytes (in hex):

C0 1E

The 'C' is the prefix for program change events, the 0 refers to channel 1 (note that we usually refer to midi channels 1-16 but the MIDI events count the channel number from zero). And 1E is program 31 (again, they're usually expressed as 1-128 but the midi events count from zero).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文