音乐贺卡midiMusic_v1.exe;
–用简谱轻松自定义midi音乐;[圣诞树+铃儿响叮当;]
下载链接:
音乐贺卡midiMusic_v1.exe; (精简优化版)
音乐贺卡midiMusic_v0.exe (通道测试版);
相关链接:
音乐贺卡beepMusic_v6d.exe (调试优化版)
/*/
编译说明:
1.在版本号v6前加 * 号同时去掉v5前的 * 号,可切换到生日贺卡;
2.程序精简,注释详细;采用简谱编曲,大大降低初学难度;
3.程序结构;
本程序为演示模块化编程风格,由三部分构成;
(1)项目自定义部分;
(2)项目主程序;
(3)项目本地函数;
4.如出现链接错误,需手工添加库Winmm.lib;添加位置:
Project->Settings->Link->Object/libraymodule;
- //proj自定义部分;
//----------------------------------------------*/
//MIDI参数说明:
//--针对库函数midiOutShortMsg()@"winmm.lib";
//通道channel : 0x90~0x9f;--默认0x99为鼓;其余为钢琴等音色;[状态字节channel=(状态位8~f<<4|通道号0~f);]
//音阶keyb : 0x00~0x7f;--其中0x3c=中央C=C4=(4+1)*12=60;C8=108;C1=24;A0=21;[键盘keyb88=21~108;]
//音量volume : 0x00~0x7f;--音符力度;[即键盘产生的按键力度;Rest=0;]
//音色tone : 0x00~0x7f;--MIDI乐器序号;[通道音色;即标准GM乐器音色;]
//音符noteFmt : 0x0vvkk9n;--MIDI短消息格式;[noteFmt=(音量<<16)+(音阶<<8)+状态字节;]
//----------------------------------------------*/
//v1;定义宏:
//#define tuneDef 0 //默认c调;[tuneDef=0;]
//#define msgRest ((0x00<<16)+(0x00<<8)+channel) //定义休止符0;
//计算c调'1'的键号;[8度转换宏;取值oct=0~8;]
#define C1(oct) (((oct)+1)*12)
//计算音符键号Kn;--八度oct[0~8]+简谱音阶scale['1'~'7']+变调tune[0~11];
#define Kn(o,c) (C1(o)+simple[(c)-'1']+tune)
//合成音符短消息;--音符信息打包;[msgFmt=0x90+(Tn|Kn<<8|volume<<16);包括休止符0;]
#define msgFmt(tn,c) ((c)=='0'?(tn):(tn)|volume<<16|Kn(m,c)<<8) //控制字节tn=通道+状态;
//定义歌唱音域voiceOct;中央C=mC=4;[即中音组默认m=4;]
//enum voiceOct{vlC=2,lC,mC=4,hC,vhC=6}; //中音组mC~mB;其余类推;
//[88键钢琴A0~C8共7.4个8度=7*12+4键;]
//enum keyb88{xlC,ulC=1,vlC,lC,mC=4,hC,vhC,uhC=7,xhC}; //八度oct=0~8;
//定义变调控制字符cTune;
//typedef enum{C=0,d,D,e,E,F,g,G,a,A,b,B}cTune; //变调tune=0~11;[小写字符为降调;]
//----------------------------------------------*/
//定义简谱音阶scale到12平均律keyb的映射;Scale['1'~'7']-'1'=simple[0~6];
const int simple[]={
0,2,4,5,7,9,11};
//v1;定义歌曲等效简谱;[加乐句同步线;]
const char song[]={
//上学歌;d=C;2/4;
//"12 31 5-|66 `16 5-|66 `1_ 56 3_|65 35 31 23 1-- 0 ||"
//"|"//"t250G|"//铃儿响叮当;d=G;4/4;
",5321 ,5- |,5321 ,6- |,6432 ,7- | 55 42 3- |"
",5321 ,5- |,5321 ,6- |,6432555_ | 65 42 1- |"
"333_ 333_ | 3512 3- | 4444433_ | 32212_5_ |"
"333_ 333_ | 3512 3- | 4444433_ | 55 42 1- ||"
};
//----------------------------------------------+------------------------------------------------*/
- //proj主程序;
//----------------------------------------------+------------------------------------------------*/
//最简单的MIDI程序; [C++编译@vc60;兼容vs2010~2019;]
//v1;20201225;"音乐贺卡midiMusic_v1";[src@midiMusic.cpp;]
//v0;20201223;"音乐贺卡midiMusic_v0";[src@midiMusic.cpp;]
//v6;20201222;"音乐贺卡beepMusic_v6";[src@beepMusic.cpp;]
//----------------------------------------------*/
//#include <graphics.h> //图形库;
#include <windows.h> //WinAPI库;
#include <iostre