Console Library 4.7.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console::MIDI Class Reference

MIDI 输出设备控制器,支持乐器切换、音量调节、同步/异步播放音符序列。 More...

#include <melody.h>

Public Member Functions

 MIDI (Instrument instrument=Instrument::AcousticGrandPiano, unsigned char bpm=120, unsigned char volume=100, unsigned deviceID=0)
 构造 MIDI 对象,打开默认 MIDI 设备并设置乐器、音量和 BPM。
 MIDI (const MIDI &)=delete
 禁止拷贝构造。
 MIDI (MIDI &&midi)=delete
 禁止移动构造。
const MIDIoperator= (const MIDI &)=delete
 禁止拷贝赋值。
const MIDIoperator= (MIDI &&)=delete
 禁止移动赋值。
 ~MIDI () noexcept
 析构函数,关闭 MIDI 设备。
void play (Note note)
 同步播放一个音符(阻塞)。
void nplay (Note note)
 异步播放一个音符(非阻塞)。
template<class Iter>
void play (Iter begin, Iter end)
 同步播放一个音符范围(阻塞)。
template<class Iter>
void nplay (Iter begin, Iter end)
 异步步播放一个音符范围(非阻塞)。
属性访问

获取当前 BPM。

unsigned char get_bpm () const
void set_bpm (unsigned char new_bpm)
 设置 BPM。
Instrument get_instrument ()
 获取当前乐器。
void set_instrument (Instrument new_instrument)
 切换乐器。
unsigned char get_volume () const
 获取默认音量。
void set_volume (unsigned char vol)
 设置默认音量。

Detailed Description

MIDI 输出设备控制器,支持乐器切换、音量调节、同步/异步播放音符序列。

封装 Windows MIDI 输出函数,支持设置乐器(GM 标准)、节拍(BPM)、音量。 播放音符时会阻塞当前线程(同步)或启动新线程(异步)。

Note
该类不可拷贝、不可移动。析构时自动关闭 MIDI 设备。
Warning
异步播放(nplay)会分离线程,确保音符在 MIDI 对象销毁前播放完毕,否则可能被中断。

Constructor & Destructor Documentation

◆ MIDI() [1/3]

console::MIDI::MIDI ( Instrument instrument = Instrument::AcousticGrandPiano,
unsigned char bpm = 120,
unsigned char volume = 100,
unsigned deviceID = 0 )
inline

构造 MIDI 对象,打开默认 MIDI 设备并设置乐器、音量和 BPM。

Parameters
instrument初始乐器,默认为大钢琴。
bpm节拍速度,默认为 120。
volume默认音量,默认为 100。
deviceIDMIDI 设备 ID,默认为 0(系统默认设备)。
Note
若设备打开失败,handle 将为 nullptr,后续播放操作无效。

◆ MIDI() [2/3]

console::MIDI::MIDI ( const MIDI & )
delete

禁止拷贝构造。

◆ MIDI() [3/3]

console::MIDI::MIDI ( MIDI && midi)
delete

禁止移动构造。

◆ ~MIDI()

console::MIDI::~MIDI ( )
inlinenoexcept

析构函数,关闭 MIDI 设备。

Note
若仍有异步播放中的音符,可能被截断。

Member Function Documentation

◆ get_bpm()

unsigned char console::MIDI::get_bpm ( ) const
inline

◆ get_instrument()

Instrument console::MIDI::get_instrument ( )
inline

获取当前乐器。

◆ 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
Iter迭代器类型。
Parameters
begin首迭代器
end超尾迭代器

◆ nplay() [2/2]

void console::MIDI::nplay ( Note note)
inline

异步播放一个音符(非阻塞)。

Parameters
note要播放的音符。

该函数启动一个新线程执行 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
Iter迭代器类型。
Parameters
begin首迭代器
end超尾迭代器

◆ play() [2/2]

void console::MIDI::play ( Note note)
inline

同步播放一个音符(阻塞)。

Parameters
note要播放的音符。

若音符音高为 pitches::REST,则仅等待对应时值。 若音符力度为 -1,则使用 MIDI 对象的默认音量。

Note
MIDI 设备未打开,函数直接返回。

◆ set_bpm()

void console::MIDI::set_bpm ( unsigned char new_bpm)
inline

设置 BPM。

◆ set_instrument()

void console::MIDI::set_instrument ( Instrument new_instrument)
inline

切换乐器。

Parameters
new_instrument新乐器。
Note
MIDI 设备未打开则无效。

◆ set_volume()

void console::MIDI::set_volume ( unsigned char vol)
inline

设置默认音量。

Parameters
vol新音量(0-127)。

The documentation for this class was generated from the following file: