MIDI音乐编程那些事儿

本文介绍了在Windows系统中通过win32 API函数实现MIDI音乐播放的方法,包括获取MIDI函数、理解参数和返回值,以及如何使用MIDI短消息函数播放音乐。详细讲解了MidiOutOpen、MidiOutShortMsg和MidiOutClose等函数的使用,并提供了Delphi和C++ Builder环境中的代码示例。同时,解析了MidiOutShortMsg的参数格式和MIDI消息的构造方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

新冠疫情期间没事儿,玩起了音乐和电脑。因为正在利用老旧电子琴学弹 “我爱你中国” (简谱的眼睛),手上较为完整的曲谱却是五线谱,无奈!把它翻译成简谱。本来想通过电脑帮我把输入的五线谱转换成指定大调的简谱(转成不同调的简谱,这do re me 就不一样了,手工转换很烧脑的),这不需要MIDI的。可是,后来想让电脑在每转换好一个音后立刻把音发出来,然后就有了下面的文章。

一、Windows系统的 win32 API MIDI函数

在Windows系统中要演奏MIDI音乐,可以通过API函数进行。我们要做的只是调用它们,并通过它们发送MIDI消息给Windows,其余的事都由Windows在后台完成。为了要调用API函数,首先要做的就是获取这些MIDI函数,并了解它们的参数要求及其返回值。基本的MIDI函数有3个:midiOutOpen 、MidiOutShortMsg、MidiOutClose,分别用来打开MIDI设备、操作MIDI设备和关闭MIDI设备。

1、win32 API MIDI函数的获取

Windows的MIDI函数在系统动态链接库winmm.dll中。在Borland C++ builder环境中代码如下:
注:下面的代码结合了多位作者的代码示例才启发了我,并且在时间上也持续了2-3天,特别是函数的转换上。所以这里无法给出具体作者,如有作者向我指出,我会加上其引用。

//在获取函数地址前,先说明其在相应开发环境中的函数原型
int __stdcall (*MidiOutOpen)(int &hMidiOut, int uDeviceID,int dwCallBack,int dwInstance,int dwFlags);
int __stdcall (*MidiOutClose)(int hMidiOut );
int __stdcall (*MidiOutShortMsg)(int hMidiOut, int dwMsg);


HINSTANCE h=NULL;
int MidiOut=0;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
   
     h=::LoadLibrary("winmm.dll");	//载入动态链接库,LoadLibrary函数会自动定位其所在目录
     if(NULL != h) 
     {
   
          MidiOutOpen= (int __stdcall (*)(int &, int,int,int,int)) GetProcAddress(h,"midiOutOpen");
          
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值