40#ifndef CONSOLE_IGNORE_ADVICE
41#pragma message("Remember to link against winmm library (e.g., -lwinmm or winmm.lib)")
42#pragma message("Define 'CONSOLE_IGNORE_ADVICE' for ignore it")
45#error "Unsupported platform"
241 Note(
signed char p = 60,
double b = 1,
signed char v = -1)
257 unsigned char volume;
270 unsigned char bpm = 120,
271 unsigned char volume = 100,
272 unsigned deviceID = 0)
273 : bpm(bpm), volume(volume), instrument(instrument)
275 HMIDIOUT h =
nullptr;
276 if (midiOutOpen(&h, deviceID, 0, 0, CALLBACK_NULL) == MMSYSERR_NOERROR)
279 DWORD program_change = 0xC0 | ((
unsigned char)(instrument) << 8);
280 midiOutShortMsg(handle, program_change);
281 DWORD volume_change = 0xB0 | (0x07 << 8) | (volume << 16);
282 midiOutShortMsg(handle, volume_change);
304 midiOutClose(handle);
312 void set_bpm(
unsigned char new_bpm) { bpm = new_bpm; }
323 instrument = new_instrument;
326 DWORD program_change = 0xC0 | ((
unsigned char)(new_instrument) << 8);
327 midiOutShortMsg(handle, program_change);
341 DWORD volume_change = 0xB0 | (0x07 << 8) | (vol << 16);
342 midiOutShortMsg(handle, volume_change);
357 if (note.
pitch != -1)
359 DWORD note_on = 0x90 | (note.
pitch << 8) |
364 midiOutShortMsg(handle, note_on);
365 Sleep(60000 * note.
beats / bpm);
366 DWORD note_off = 0x80 | (note.
pitch << 8) | (64 << 16);
367 midiOutShortMsg(handle, note_off);
370 Sleep(60000 * note.
beats / bpm);
381 std::thread([
this, note]()
392 template <
class Iter>
393 void play(Iter begin, Iter end)
395 for (; begin != end; ++begin)
405 template <
class Iter>
409 {
play(begin, end); })
unsigned char get_bpm() const
Definition melody.h:310
void nplay(Note note)
异步播放一个音符(非阻塞)。
Definition melody.h:379
MIDI(MIDI &&midi)=delete
禁止移动构造。
void set_bpm(unsigned char new_bpm)
设置 BPM。
Definition melody.h:312
void play(Note note)
同步播放一个音符(阻塞)。
Definition melody.h:353
void play(Iter begin, Iter end)
同步播放一个音符范围(阻塞)。
Definition melody.h:393
MIDI(Instrument instrument=Instrument::AcousticGrandPiano, unsigned char bpm=120, unsigned char volume=100, unsigned deviceID=0)
构造 MIDI 对象,打开默认 MIDI 设备并设置乐器、音量和 BPM。
Definition melody.h:269
void nplay(Iter begin, Iter end)
异步步播放一个音符范围(非阻塞)。
Definition melody.h:406
Instrument get_instrument()
获取当前乐器。
Definition melody.h:315
unsigned char get_volume() const
获取默认音量。
Definition melody.h:331
const MIDI & operator=(const MIDI &)=delete
禁止拷贝赋值。
~MIDI() noexcept
析构函数,关闭 MIDI 设备。
Definition melody.h:301
MIDI(const MIDI &)=delete
禁止拷贝构造。
void set_instrument(Instrument new_instrument)
切换乐器。
Definition melody.h:321
void set_volume(unsigned char vol)
设置默认音量。
Definition melody.h:336
const MIDI & operator=(MIDI &&)=delete
禁止移动赋值。
const int D2
Definition melody.h:197
const int Cs7
Definition melody.h:216
const int As8
Definition melody.h:217
const int C9
Definition melody.h:204
const int D4
Definition melody.h:199
const int B3
Definition melody.h:198
const int B7
Definition melody.h:202
const int C7
Definition melody.h:202
const int A4
Definition melody.h:199
const int Fs7
Definition melody.h:216
const int C3
Definition melody.h:198
const int E5
Definition melody.h:200
const int B5
Definition melody.h:200
const int Ds2
Definition melody.h:211
const int G8
Definition melody.h:203
const int Gs0
Definition melody.h:209
const int F3
Definition melody.h:198
const int Ds3
Definition melody.h:212
const int D6
Definition melody.h:201
const int G5
Definition melody.h:200
const int As6
Definition melody.h:215
const int D7
Definition melody.h:202
const int Ds4
Definition melody.h:213
const int D1
Definition melody.h:196
const int Gs8
Definition melody.h:217
const int F6
Definition melody.h:201
const int Gs2
Definition melody.h:211
const int F2
Definition melody.h:197
const int As1
Definition melody.h:210
const int Cs2
Definition melody.h:211
const int Cs4
Definition melody.h:213
const int E2
Definition melody.h:197
const int D9
Definition melody.h:204
const int A8
Definition melody.h:203
const int G7
Definition melody.h:202
const int Ds1
Definition melody.h:210
const int E7
Definition melody.h:202
const int As0
Definition melody.h:209
const int F1
Definition melody.h:196
const int C2
Definition melody.h:197
const int E1
Definition melody.h:196
const int Gs1
Definition melody.h:210
const int C1
Definition melody.h:196
const int F8
Definition melody.h:203
const int Gs7
Definition melody.h:216
const int Cs8
Definition melody.h:217
const int B8
Definition melody.h:203
const int Cs9
Definition melody.h:218
const int G3
Definition melody.h:198
const int E6
Definition melody.h:201
const int Fs9
Definition melody.h:218
const int G4
Definition melody.h:199
const int A6
Definition melody.h:201
const int Fs4
Definition melody.h:213
const int E4
Definition melody.h:199
const int Fs8
Definition melody.h:217
const int Fs6
Definition melody.h:215
const int A1
Definition melody.h:196
const int A0
Definition melody.h:195
const int As7
Definition melody.h:216
const int Ds8
Definition melody.h:217
const int F7
Definition melody.h:202
const int Gs4
Definition melody.h:213
const int A2
Definition melody.h:197
const int Gs6
Definition melody.h:215
const int Gs5
Definition melody.h:214
const int Ds6
Definition melody.h:215
const int C8
Definition melody.h:203
const int Cs3
Definition melody.h:212
const int Ds0
Definition melody.h:209
const int B1
Definition melody.h:196
const int As2
Definition melody.h:211
const int Cs6
Definition melody.h:215
const int F0
Definition melody.h:195
const int F5
Definition melody.h:200
const int G9
Definition melody.h:204
const int C6
Definition melody.h:201
const int Cs0
Definition melody.h:209
const int D3
Definition melody.h:198
const int B4
Definition melody.h:199
const int Cs5
Definition melody.h:214
const int Ds5
Definition melody.h:214
const int G1
Definition melody.h:196
const int B2
Definition melody.h:197
const int G0
Definition melody.h:195
const int D0
Definition melody.h:195
const int Fs5
Definition melody.h:214
const int D8
Definition melody.h:203
const int G6
Definition melody.h:201
const int As4
Definition melody.h:213
const int E0
Definition melody.h:195
const int B0
Definition melody.h:195
const int F4
Definition melody.h:199
const int As3
Definition melody.h:212
const int A7
Definition melody.h:202
const int As5
Definition melody.h:214
const int Cs1
Definition melody.h:210
const int Gs3
Definition melody.h:212
const int Ds9
Definition melody.h:218
const int C0
Definition melody.h:195
const int E9
Definition melody.h:204
const int A3
Definition melody.h:198
const int A5
Definition melody.h:200
const int D5
Definition melody.h:200
const int E3
Definition melody.h:198
const int E8
Definition melody.h:203
const int Fs3
Definition melody.h:212
const int Fs2
Definition melody.h:211
const int B6
Definition melody.h:201
const int F9
Definition melody.h:204
const int Fs0
Definition melody.h:209
const int REST
休止符(不发音,仅占用时值)
Definition melody.h:222
const int C5
Definition melody.h:200
const int C4
Definition melody.h:199
const int Ds7
Definition melody.h:216
const int Fs1
Definition melody.h:210
const int G2
Definition melody.h:197
Instrument
128 种 GM 标准乐器编号(0-127)。
Definition melody.h:56
@ OrchestralHarp
竖琴
Definition melody.h:103
@ Violin
小提琴
Definition melody.h:97
@ GuitarFretNoise
吉他擦弦声
Definition melody.h:177
@ Lead2Sawtooth
锯齿波领奏
Definition melody.h:138
@ Trombone
长号
Definition melody.h:114
@ GuitarHarmonics
吉他泛音
Definition melody.h:88
@ Celesta
钢片琴
Definition melody.h:65
@ Pad5Bowed
弓弦背景
Definition melody.h:149
@ AcousticGrandPiano
大钢琴 (默认)
Definition melody.h:57
@ StringEnsemble1
弦乐合奏 1
Definition melody.h:105
@ Trumpet
小号
Definition melody.h:113
@ Flute
长笛
Definition melody.h:130
@ TelephoneRing
电话铃
Definition melody.h:181
@ Cello
大提琴
Definition melody.h:99
@ Recorder
竖笛
Definition melody.h:131
@ PanFlute
排箫
Definition melody.h:132
@ Agogo
阿果果铃
Definition melody.h:170
@ HonkyTonkPiano
酒吧钢琴
Definition melody.h:60
@ Gunshot
枪声
Definition melody.h:184
@ ElectricBassPick
拨片电贝司
Definition melody.h:91
@ AcousticGuitarNylon
尼龙弦吉他
Definition melody.h:81
@ ChurchOrgan
教堂风琴
Definition melody.h:76
@ BlownBottle
吹瓶口
Definition melody.h:133
@ TenorSax
次中音萨克斯
Definition melody.h:123
@ SynthDrum
合成鼓
Definition melody.h:175
@ StringEnsemble2
弦乐合奏 2
Definition melody.h:106
@ Helicopter
直升机
Definition melody.h:182
@ SynthBrass2
合成铜管 2
Definition melody.h:120
@ Fx7Echoes
回声
Definition melody.h:159
@ Seashore
海浪
Definition melody.h:179
@ BrassSection
铜管组
Definition melody.h:118
@ Bassoon
巴松管
Definition melody.h:127
@ Lead3Calliope
汽笛风琴
Definition melody.h:139
@ RockOrgan
摇滚风琴
Definition melody.h:75
@ SlapBass1
击弦贝司 1
Definition melody.h:93
@ DrawbarOrgan
拉杆风琴
Definition melody.h:73
@ EnglishHorn
英国管
Definition melody.h:126
@ PercussiveOrgan
打击型风琴
Definition melody.h:74
@ Harpsichord
大键琴
Definition melody.h:63
@ Oboe
双簧管
Definition melody.h:125
@ ChoirAahs
合唱 "啊"
Definition melody.h:109
@ AcousticBass
原声贝司
Definition melody.h:89
@ Clavinet
击弦古钢琴
Definition melody.h:64
@ DistortionGuitar
失真吉他
Definition melody.h:87
@ Piccolo
短笛
Definition melody.h:129
@ BirdTweet
鸟鸣
Definition melody.h:180
@ OverdrivenGuitar
过载吉他
Definition melody.h:86
@ SynthStrings2
合成弦乐 2
Definition melody.h:108
@ TaikoDrum
太鼓
Definition melody.h:173
@ ElectricBassFinger
指拨电贝司
Definition melody.h:90
@ Woodblock
木鱼
Definition melody.h:172
@ Lead7Fifths
五度领奏
Definition melody.h:143
@ TubularBells
管钟
Definition melody.h:71
@ Fx8SciFi
科幻
Definition melody.h:160
@ MelodicTom
旋律通鼓
Definition melody.h:174
@ SopranoSax
高音萨克斯
Definition melody.h:121
@ Accordion
手风琴
Definition melody.h:78
@ Lead1Square
方波领奏
Definition melody.h:137
@ Glockenspiel
钟琴
Definition melody.h:66
@ TinkleBell
铃铛
Definition melody.h:169
@ Banjo
班卓琴
Definition melody.h:162
@ BrightAcousticPiano
明亮的钢琴
Definition melody.h:58
@ SynthBrass1
合成铜管 1
Definition melody.h:119
@ PizzicatoStrings
弦乐拨奏
Definition melody.h:102
@ Pad6Metallic
金属背景
Definition melody.h:150
@ Bagpipe
风笛
Definition melody.h:166
@ Clarinet
单簧管
Definition melody.h:128
@ Tuba
大号
Definition melody.h:115
@ ElectricGuitarJazz
爵士吉他
Definition melody.h:83
@ Kalimba
卡林巴
Definition melody.h:165
@ Pad7Halo
光环背景
Definition melody.h:151
@ Timpani
定音鼓
Definition melody.h:104
@ Ocarina
奥卡雷纳
Definition melody.h:136
@ ElectricPiano1
电钢琴 1
Definition melody.h:61
@ Lead8BassLead
贝司领奏
Definition melody.h:144
@ Fx3Crystal
水晶
Definition melody.h:155
@ Lead5Charang
炭精吉他
Definition melody.h:141
@ ElectricGuitarMuted
闷音吉他
Definition melody.h:85
@ SynthBass1
合成贝司 1
Definition melody.h:95
@ Pad8Sweep
扫弦背景
Definition melody.h:152
@ BreathNoise
呼吸声
Definition melody.h:178
@ Dulcimer
扬琴
Definition melody.h:72
@ Shakuhachi
尺八
Definition melody.h:134
@ ReedOrgan
簧风琴
Definition melody.h:77
@ AcousticGuitarSteel
钢弦吉他
Definition melody.h:82
@ Fiddle
民间提琴
Definition melody.h:167
@ Contrabass
低音提琴
Definition melody.h:100
@ MutedTrumpet
弱音小号
Definition melody.h:116
@ Fx4Atmosphere
大气
Definition melody.h:156
@ Fx1Rain
雨声
Definition melody.h:153
@ Pad2Warm
温暖背景
Definition melody.h:146
@ Vibraphone
颤音琴
Definition melody.h:68
@ Pad3Polysynth
复音合成背景
Definition melody.h:147
@ Sitar
西塔琴
Definition melody.h:161
@ Koto
古筝
Definition melody.h:164
@ AltoSax
中音萨克斯
Definition melody.h:122
@ SynthStrings1
合成弦乐 1
Definition melody.h:107
@ Shamisen
三味线
Definition melody.h:163
@ VoiceOohs
人声 "哦"
Definition melody.h:110
@ ElectricGrandPiano
电子大钢琴
Definition melody.h:59
@ Lead6Voice
人声领奏
Definition melody.h:142
@ Marimba
马林巴
Definition melody.h:69
@ ElectricGuitarClean
清音电吉他
Definition melody.h:84
@ Whistle
口哨
Definition melody.h:135
@ ReverseCymbal
反奏钹
Definition melody.h:176
@ Viola
中提琴
Definition melody.h:98
@ TremoloStrings
弦乐颤音
Definition melody.h:101
@ TangoAccordion
探戈手风琴
Definition melody.h:80
@ SteelDrums
钢鼓
Definition melody.h:171
@ MusicBox
八音盒
Definition melody.h:67
@ FretlessBass
无品贝司
Definition melody.h:92
@ SynthVoice
合成人声
Definition melody.h:111
@ Harmonica
口琴
Definition melody.h:79
@ OrchestraHit
乐队打击乐
Definition melody.h:112
@ Lead4Chiff
气声领奏
Definition melody.h:140
@ Fx5Brightness
明亮
Definition melody.h:157
@ Fx6Goblins
小妖
Definition melody.h:158
@ Xylophone
木琴
Definition melody.h:70
@ Pad4Choir
合唱背景
Definition melody.h:148
@ Applause
掌声
Definition melody.h:183
@ SynthBass2
合成贝司 2
Definition melody.h:96
@ Shanai
唢呐
Definition melody.h:168
@ Pad1NewAge
新世纪背景
Definition melody.h:145
@ SlapBass2
击弦贝司 2
Definition melody.h:94
@ ElectricPiano2
电钢琴 2
Definition melody.h:62
@ BaritoneSax
上低音萨克斯
Definition melody.h:124
@ Fx2Soundtrack
电影配乐
Definition melody.h:154
@ FrenchHorn
圆号
Definition melody.h:117
标准 MIDI 音高常量,包含中央 C4=60 的所有半音音高,以及休止符 REST。
表示一个音符,包含音高、时值和力度。
Definition melody.h:230
signed char volume
力度(0-127),-1 表示使用 MIDI 对象的默认音量
Definition melody.h:233
Note(signed char p=60, double b=1, signed char v=-1)
构造一个音符。
Definition melody.h:241
signed char pitch
MIDI 音高编号(0-127),或 pitches::REST 表示休止符
Definition melody.h:231
double beats
音符时值(以四分音符为单位,1 表示一拍)
Definition melody.h:232