MIDI 输出设备控制器,支持乐器切换、音量调节、同步/异步播放音符序列。
More...
#include <melody.h>
MIDI 输出设备控制器,支持乐器切换、音量调节、同步/异步播放音符序列。
封装 Windows MIDI 输出函数,支持设置乐器(GM 标准)、节拍(BPM)、音量。 播放音符时会阻塞当前线程(同步)或启动新线程(异步)。
- Note
- 该类不可拷贝、不可移动。析构时自动关闭 MIDI 设备。
- Warning
- 异步播放(nplay)会分离线程,确保音符在 MIDI 对象销毁前播放完毕,否则可能被中断。
◆ MIDI() [1/3]
构造 MIDI 对象,打开默认 MIDI 设备并设置乐器、音量和 BPM。
- Parameters
-
| instrument | 初始乐器,默认为大钢琴。 |
| bpm | 节拍速度,默认为 120。 |
| volume | 默认音量,默认为 100。 |
| deviceID | MIDI 设备 ID,默认为 0(系统默认设备)。 |
- Note
- 若设备打开失败,handle 将为 nullptr,后续播放操作无效。
◆ MIDI() [2/3]
| console::MIDI::MIDI |
( |
const MIDI & | | ) |
|
|
delete |
◆ MIDI() [3/3]
| console::MIDI::MIDI |
( |
MIDI && | midi | ) |
|
|
delete |
◆ ~MIDI()
析构函数,关闭 MIDI 设备。
- Note
- 若仍有异步播放中的音符,可能被截断。
◆ get_bpm()
| unsigned char console::MIDI::get_bpm |
( |
| ) |
const |
|
inline |
◆ get_instrument()
◆ get_volume()
| unsigned char console::MIDI::get_volume |
( |
| ) |
const |
|
inline |
◆ nplay() [1/2]
template<class Iter>
| void console::MIDI::nplay |
( |
Iter | begin, |
|
|
Iter | end ) |
|
inline |
异步步播放一个音符范围(非阻塞)。
- Template Parameters
-
- Parameters
-
◆ nplay() [2/2]
| void console::MIDI::nplay |
( |
Note | note | ) |
|
|
inline |
异步播放一个音符(非阻塞)。
- Parameters
-
该函数启动一个新线程执行 play(note) 并立即返回。
- Warning
- 线程被分离(detach),无法等待其完成。若 MIDI 对象在播放完成前被销毁,可能截断声音。
◆ operator=() [1/2]
| const MIDI & console::MIDI::operator= |
( |
const MIDI & | | ) |
|
|
delete |
◆ operator=() [2/2]
| const MIDI & console::MIDI::operator= |
( |
MIDI && | | ) |
|
|
delete |
◆ play() [1/2]
template<class Iter>
| void console::MIDI::play |
( |
Iter | begin, |
|
|
Iter | end ) |
|
inline |
同步播放一个音符范围(阻塞)。
- Template Parameters
-
- Parameters
-
◆ play() [2/2]
| void console::MIDI::play |
( |
Note | note | ) |
|
|
inline |
同步播放一个音符(阻塞)。
- Parameters
-
若音符音高为 pitches::REST,则仅等待对应时值。 若音符力度为 -1,则使用 MIDI 对象的默认音量。
- Note
- 若 MIDI 设备未打开,函数直接返回。
◆ set_bpm()
| void console::MIDI::set_bpm |
( |
unsigned char | new_bpm | ) |
|
|
inline |
◆ set_instrument()
| void console::MIDI::set_instrument |
( |
Instrument | new_instrument | ) |
|
|
inline |
切换乐器。
- Parameters
-
- Note
- 若 MIDI 设备未打开则无效。
◆ set_volume()
| void console::MIDI::set_volume |
( |
unsigned char | vol | ) |
|
|
inline |
The documentation for this class was generated from the following file: