helgoboss_midi/
test_util.rs1use crate::{
19 Channel, ControlChange14BitMessage, ControllerNumber, KeyNumber, ParameterNumberMessage,
20 RawShortMessage, ShortMessageFactory, TimeCodeQuarterFrame, U14, U4, U7,
21};
22use core::convert::TryInto;
23
24type Msg = RawShortMessage;
25
26use channel as ch;
27use controller_number as cn;
28use key_number as kn;
29
30pub fn u4(value: u8) -> U4 {
36 value.try_into().expect("not a valid 4-bit integer")
37}
38
39pub fn u7(value: u8) -> U7 {
45 value.try_into().expect("not a valid 7-bit integer")
46}
47
48pub fn u14(value: u16) -> U14 {
54 value.try_into().expect("not a valid 14-bit integer")
55}
56
57pub fn channel(value: u8) -> Channel {
63 value.try_into().expect("not a valid channel")
64}
65
66pub fn key_number(value: u8) -> KeyNumber {
72 value.try_into().expect("not a valid key number")
73}
74
75pub fn controller_number(value: u8) -> ControllerNumber {
81 value.try_into().expect("not a valid controller number")
82}
83
84pub fn short(status_byte: u8, data_byte_1: u8, data_byte_2: u8) -> Msg {
90 Msg::from_bytes((status_byte, u7(data_byte_1), u7(data_byte_2))).expect("invalid status byte")
91}
92
93pub fn note_on(channel: u8, key_number: u8, velocity: u8) -> Msg {
99 Msg::note_on(ch(channel), kn(key_number), u7(velocity))
100}
101
102pub fn note_off(channel: u8, key_number: u8, velocity: u8) -> Msg {
108 Msg::note_off(ch(channel), kn(key_number), u7(velocity))
109}
110
111pub fn control_change(channel: u8, controller_number: u8, control_value: u8) -> Msg {
117 Msg::control_change(ch(channel), cn(controller_number), u7(control_value))
118}
119
120pub fn program_change(channel: u8, program_number: u8) -> Msg {
126 Msg::program_change(ch(channel), u7(program_number))
127}
128
129pub fn polyphonic_key_pressure(channel: u8, key_number: u8, pressure_amount: u8) -> Msg {
135 Msg::polyphonic_key_pressure(ch(channel), kn(key_number), u7(pressure_amount))
136}
137
138pub fn channel_pressure(channel: u8, pressure_amount: u8) -> Msg {
144 Msg::channel_pressure(ch(channel), u7(pressure_amount))
145}
146
147pub fn pitch_bend_change(channel: u8, pitch_bend_value: u16) -> Msg {
153 Msg::pitch_bend_change(ch(channel), u14(pitch_bend_value))
154}
155
156pub fn system_exclusive_start() -> Msg {
158 Msg::system_exclusive_start()
159}
160
161pub fn time_code_quarter_frame(frame: TimeCodeQuarterFrame) -> Msg {
163 Msg::time_code_quarter_frame(frame)
164}
165
166pub fn song_position_pointer(position: u16) -> Msg {
172 Msg::song_position_pointer(u14(position))
173}
174
175pub fn song_select(song_number: u8) -> Msg {
181 Msg::song_select(u7(song_number))
182}
183
184pub fn tune_request() -> Msg {
186 Msg::tune_request()
187}
188
189pub fn system_exclusive_end() -> Msg {
191 Msg::system_exclusive_end()
192}
193
194pub fn timing_clock() -> Msg {
196 Msg::timing_clock()
197}
198
199pub fn start() -> Msg {
201 Msg::start()
202}
203
204pub fn r#continue() -> Msg {
206 Msg::r#continue()
207}
208
209pub fn stop() -> Msg {
211 Msg::stop()
212}
213
214pub fn active_sensing() -> Msg {
216 Msg::active_sensing()
217}
218
219pub fn system_reset() -> Msg {
221 Msg::system_reset()
222}
223
224pub fn control_change_14_bit(
230 channel: u8,
231 msb_controller_number: u8,
232 value: u16,
233) -> ControlChange14BitMessage {
234 ControlChange14BitMessage::new(ch(channel), cn(msb_controller_number), u14(value))
235}
236
237pub fn nrpn(channel: u8, number: u16, value: u8) -> ParameterNumberMessage {
243 ParameterNumberMessage::non_registered_7_bit(ch(channel), u14(number), u7(value))
244}
245
246pub fn nrpn_14_bit(channel: u8, number: u16, value: u16) -> ParameterNumberMessage {
252 ParameterNumberMessage::non_registered_14_bit(ch(channel), u14(number), u14(value))
253}
254
255pub fn rpn(channel: u8, number: u16, value: u8) -> ParameterNumberMessage {
261 ParameterNumberMessage::registered_7_bit(ch(channel), u14(number), u7(value))
262}
263
264pub fn rpn_14_bit(channel: u8, number: u16, value: u16) -> ParameterNumberMessage {
270 ParameterNumberMessage::registered_14_bit(ch(channel), u14(number), u14(value))
271}