Skip to content

Commit

Permalink
remove redundant midi2 from APIs and deprecate old versions
Browse files Browse the repository at this point in the history
  • Loading branch information
fdetro committed Oct 24, 2024
1 parent 3db6c53 commit 41fea52
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 56 deletions.
59 changes: 45 additions & 14 deletions inc/midi/midi2_channel_voice_message.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ struct midi2_channel_voice_message : universal_packet
//--------------------------------------------------------------------------

constexpr bool is_midi2_channel_voice_message(const universal_packet&);
constexpr bool is_midi2_registered_controller_message(const universal_packet&);
constexpr bool is_midi2_assignable_controller_message(const universal_packet&);
constexpr bool is_midi2_registered_per_note_controller_message(const universal_packet&);
constexpr bool is_midi2_assignable_per_note_controller_message(const universal_packet&);
constexpr bool is_midi2_per_note_pitch_bend_message(const universal_packet&);
constexpr bool is_registered_controller_message(const universal_packet&);
constexpr bool is_assignable_controller_message(const universal_packet&);
constexpr bool is_registered_per_note_controller_message(const universal_packet&);
constexpr bool is_assignable_per_note_controller_message(const universal_packet&);
constexpr bool is_per_note_pitch_bend_message(const universal_packet&);

//--------------------------------------------------------------------------

Expand All @@ -67,7 +67,7 @@ constexpr bool is_note_on_with_pitch_7_9(const universal_packet&);
constexpr uint8_t get_midi2_note_attribute(const universal_packet&);
constexpr uint16_t get_midi2_note_attribute_data(const universal_packet&);

constexpr uint8_t get_midi2_per_note_controller_index(const universal_packet&);
constexpr uint8_t get_per_note_controller_index(const universal_packet&);

constexpr bool is_pitch_bend_sensitivity_message(const universal_packet&);
constexpr bool is_per_note_pitch_bend_sensitivity_message(const universal_packet&);
Expand Down Expand Up @@ -388,25 +388,25 @@ constexpr midi2_channel_voice_message make_per_note_pitch_bend_message(group_t
return { group, channel_voice_status::per_note_pitch_bend, channel, note_nr, 0, pb.value };
}

constexpr bool is_midi2_registered_controller_message(const universal_packet& p)
constexpr bool is_registered_controller_message(const universal_packet& p)
{
return is_midi2_channel_voice_message(p) && (p.status() & 0xF0) == channel_voice_status::registered_controller;
}
constexpr bool is_midi2_assignable_controller_message(const universal_packet& p)
constexpr bool is_assignable_controller_message(const universal_packet& p)
{
return is_midi2_channel_voice_message(p) && (p.status() & 0xF0) == channel_voice_status::assignable_controller;
}
constexpr bool is_midi2_registered_per_note_controller_message(const universal_packet& p)
constexpr bool is_registered_per_note_controller_message(const universal_packet& p)
{
return is_midi2_channel_voice_message(p) &&
(p.status() & 0xF0) == channel_voice_status::registered_per_note_controller;
}
constexpr bool is_midi2_assignable_per_note_controller_message(const universal_packet& p)
constexpr bool is_assignable_per_note_controller_message(const universal_packet& p)
{
return is_midi2_channel_voice_message(p) &&
(p.status() & 0xF0) == channel_voice_status::assignable_per_note_controller;
}
constexpr bool is_midi2_per_note_pitch_bend_message(const universal_packet& p)
constexpr bool is_per_note_pitch_bend_message(const universal_packet& p)
{
return is_midi2_channel_voice_message(p) && (p.status() & 0xF0) == channel_voice_status::per_note_pitch_bend;
}
Expand All @@ -420,6 +420,31 @@ constexpr bool is_note_off_with_attribute(const universal_packet& p, uint8_t att
return is_midi2_channel_voice_message(p) && ((p.status() & 0xF0) == channel_voice_status::note_off) &&
(p.byte4() == attribute);
}
[[deprecated("use is_registered_controller_message instead")]]
constexpr bool is_midi2_registered_controller_message(const universal_packet& p)
{
return is_registered_controller_message(p);
}
[[deprecated("use is_assignable_controller_message instead")]]
constexpr bool is_midi2_assignable_controller_message(const universal_packet& p)
{
return is_assignable_controller_message(p);
}
[[deprecated("use is_registered_per_note_controller_message instead")]]
constexpr bool is_midi2_registered_per_note_controller_message(const universal_packet& p)
{
return is_registered_per_note_controller_message(p);
}
[[deprecated("use is_assignable_per_note_controller_message instead")]]
constexpr bool is_midi2_assignable_per_note_controller_message(const universal_packet& p)
{
return is_assignable_per_note_controller_message(p);
}
[[deprecated("use is_per_note_pitch_bend_message instead")]]
constexpr bool is_midi2_per_note_pitch_bend_message(const universal_packet& p)
{
return is_per_note_pitch_bend_message(p);
}
constexpr bool is_note_on_with_pitch_7_9(const universal_packet& p)
{
return is_note_on_with_attribute(p, note_attribute::pitch_7_9);
Expand All @@ -432,18 +457,24 @@ constexpr uint16_t get_midi2_note_attribute_data(const universal_packet& p)
{
return uint16_t(p.data[1] & 0xFFFF);
}
constexpr uint8_t get_midi2_per_note_controller_index(const universal_packet& p)
constexpr uint8_t get_per_note_controller_index(const universal_packet& p)
{
return p.byte4();
}
[[deprecated("use get_per_note_controller_index instead")]]
constexpr uint8_t get_midi2_per_note_controller_index(const universal_packet& p)
{
return get_per_note_controller_index(p);
}

constexpr bool is_pitch_bend_sensitivity_message(const universal_packet& p)
{
return is_midi2_registered_controller_message(p) && (p.byte3() == 0) &&
return is_registered_controller_message(p) && (p.byte3() == 0) &&
(p.byte4() == registered_parameter_number::pitch_bend_sensitivity);
}
constexpr bool is_per_note_pitch_bend_sensitivity_message(const universal_packet& p)
{
return is_midi2_registered_controller_message(p) && (p.byte3() == 0) &&
return is_registered_controller_message(p) && (p.byte3() == 0) &&
(p.byte4() == registered_parameter_number::per_note_pitch_bend_sensitivity);
}
constexpr pitch_bend_sensitivity get_pitch_bend_sensitivity_value(const universal_packet& p)
Expand Down
120 changes: 78 additions & 42 deletions tests/midi2_channel_voice_message_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,14 +153,14 @@ TEST_F(midi2_channel_voice_message, make_midi2_channel_voice_message)
const auto m =
make_midi2_channel_voice_message(4, channel_voice_status::per_note_pitch_bend, 14, 0x43, 0x00, 0x8000D123);
EXPECT_EQ((universal_packet{ 0x446E4300, 0x8000D123 }), m);
EXPECT_TRUE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_TRUE(is_per_note_pitch_bend_message(m));
}

{
constexpr auto m =
make_midi2_channel_voice_message(12, channel_voice_status::registered_controller, 5, 4, 0x62, 0xABCDEF00);
EXPECT_EQ((universal_packet{ 0x4C250462, 0xABCDEF00 }), m);
EXPECT_TRUE(is_midi2_registered_controller_message(m));
EXPECT_TRUE(is_registered_controller_message(m));
}

{ // invalid channel in status
Expand Down Expand Up @@ -236,15 +236,15 @@ TEST_F(midi2_channel_voice_message, make_registered_per_note_controller_message)
constexpr auto m =
make_registered_per_note_controller_message(0xF, 0xE, 44, 77, controller_value{ 0x33445566u });
EXPECT_EQ((universal_packet{ 0x4F0E2C4D, 0x33445566 }), m);
EXPECT_TRUE(is_midi2_registered_per_note_controller_message(m));
EXPECT_TRUE(get_midi2_per_note_controller_index(m) == 77);
EXPECT_TRUE(is_registered_per_note_controller_message(m));
EXPECT_TRUE(get_per_note_controller_index(m) == 77);
}

{
const auto m = make_registered_per_note_controller_message(1, 5, 0x33, 0x44, controller_value{ 0x55u });
EXPECT_EQ((universal_packet{ 0x41053344, 0x00000055 }), m);
EXPECT_TRUE(is_midi2_registered_per_note_controller_message(m));
EXPECT_TRUE(get_midi2_per_note_controller_index(m) == 0x44);
EXPECT_TRUE(is_registered_per_note_controller_message(m));
EXPECT_TRUE(get_per_note_controller_index(m) == 0x44);
}
}

Expand All @@ -258,8 +258,8 @@ TEST_F(midi2_channel_voice_message, make_assignable_per_note_controller_message)
constexpr auto m =
make_assignable_per_note_controller_message(0xE, 0xD, 0x12, 0x34, controller_value{ 0x44556677u });
EXPECT_EQ((universal_packet{ 0x4E1D1234, 0x44556677 }), m);
EXPECT_TRUE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_TRUE(get_midi2_per_note_controller_index(m) == 0x34);
EXPECT_TRUE(is_assignable_per_note_controller_message(m));
EXPECT_TRUE(get_per_note_controller_index(m) == 0x34);
}

{
Expand Down Expand Up @@ -316,7 +316,7 @@ TEST_F(midi2_channel_voice_message, make_registered_controller_message)
{
constexpr auto m = make_registered_controller_message(3, 7, 9, 0x45, controller_value{ 0x80101010u });
EXPECT_EQ((universal_packet{ 0x43270945, 0x80101010 }), m);
EXPECT_TRUE(is_midi2_registered_controller_message(m));
EXPECT_TRUE(is_registered_controller_message(m));
}

{ // invalid bank bits
Expand All @@ -339,7 +339,7 @@ TEST_F(midi2_channel_voice_message, make_assignable_controller_message)
{
constexpr auto m = make_assignable_controller_message(3, 7, 9, 0x45, controller_value{ 0x80101010u });
EXPECT_EQ((universal_packet{ 0x43370945, 0x80101010 }), m);
EXPECT_TRUE(is_midi2_assignable_controller_message(m));
EXPECT_TRUE(is_assignable_controller_message(m));
}

{ // invalid bank bits
Expand Down Expand Up @@ -486,66 +486,66 @@ TEST_F(midi2_channel_voice_message, is_midi2_type_query_functions)
{
constexpr auto m = make_midi1_note_on_message(1, 1, 60, velocity{ uint7_t{ 90 } });
EXPECT_FALSE(is_midi2_channel_voice_message(m));
EXPECT_FALSE(is_midi2_registered_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_controller_message(m));
EXPECT_FALSE(is_midi2_registered_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_FALSE(is_registered_controller_message(m));
EXPECT_FALSE(is_assignable_controller_message(m));
EXPECT_FALSE(is_registered_per_note_controller_message(m));
EXPECT_FALSE(is_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_per_note_pitch_bend_message(m));
}

{
constexpr auto m =
make_midi2_channel_voice_message(12, channel_voice_status::registered_controller, 5, 4, 0x62, 0xABCDEF00);
EXPECT_TRUE(is_midi2_channel_voice_message(m));
EXPECT_TRUE(is_midi2_registered_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_controller_message(m));
EXPECT_FALSE(is_midi2_registered_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_TRUE(is_registered_controller_message(m));
EXPECT_FALSE(is_assignable_controller_message(m));
EXPECT_FALSE(is_registered_per_note_controller_message(m));
EXPECT_FALSE(is_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_per_note_pitch_bend_message(m));
}

{
constexpr auto m = make_assignable_controller_message(3, 7, 9, 0x45, controller_value{ 0x80101010u });
EXPECT_TRUE(is_midi2_channel_voice_message(m));
EXPECT_FALSE(is_midi2_registered_controller_message(m));
EXPECT_TRUE(is_midi2_assignable_controller_message(m));
EXPECT_FALSE(is_midi2_registered_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_FALSE(is_registered_controller_message(m));
EXPECT_TRUE(is_assignable_controller_message(m));
EXPECT_FALSE(is_registered_per_note_controller_message(m));
EXPECT_FALSE(is_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_per_note_pitch_bend_message(m));
}

{
const auto m = make_registered_per_note_controller_message(1, 5, 0x33, 0x44, controller_value{ 0x55u });
EXPECT_TRUE(is_midi2_channel_voice_message(m));
EXPECT_FALSE(is_midi2_registered_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_controller_message(m));
EXPECT_TRUE(is_midi2_registered_per_note_controller_message(m));
EXPECT_EQ(get_midi2_per_note_controller_index(m), 0x44);
EXPECT_FALSE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_FALSE(is_registered_controller_message(m));
EXPECT_FALSE(is_assignable_controller_message(m));
EXPECT_TRUE(is_registered_per_note_controller_message(m));
EXPECT_EQ(get_per_note_controller_index(m), 0x44);
EXPECT_FALSE(is_assignable_per_note_controller_message(m));
EXPECT_FALSE(is_per_note_pitch_bend_message(m));
}

{
const auto m =
make_assignable_per_note_controller_message(0xE, 0xD, 0x12, 0x34, controller_value{ 0x44556677u });
EXPECT_TRUE(is_midi2_channel_voice_message(m));
EXPECT_FALSE(is_midi2_registered_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_controller_message(m));
EXPECT_FALSE(is_midi2_registered_per_note_controller_message(m));
EXPECT_TRUE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_EQ(get_midi2_per_note_controller_index(m), 0x34);
EXPECT_FALSE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_FALSE(is_registered_controller_message(m));
EXPECT_FALSE(is_assignable_controller_message(m));
EXPECT_FALSE(is_registered_per_note_controller_message(m));
EXPECT_TRUE(is_assignable_per_note_controller_message(m));
EXPECT_EQ(get_per_note_controller_index(m), 0x34);
EXPECT_FALSE(is_per_note_pitch_bend_message(m));
}

{
const auto m =
make_midi2_channel_voice_message(4, channel_voice_status::per_note_pitch_bend, 14, 0x43, 0x00, 0x8000D123);
EXPECT_TRUE(is_midi2_channel_voice_message(m));
EXPECT_FALSE(is_midi2_registered_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_controller_message(m));
EXPECT_FALSE(is_midi2_registered_per_note_controller_message(m));
EXPECT_FALSE(is_midi2_assignable_per_note_controller_message(m));
EXPECT_TRUE(is_midi2_per_note_pitch_bend_message(m));
EXPECT_FALSE(is_registered_controller_message(m));
EXPECT_FALSE(is_assignable_controller_message(m));
EXPECT_FALSE(is_registered_per_note_controller_message(m));
EXPECT_FALSE(is_assignable_per_note_controller_message(m));
EXPECT_TRUE(is_per_note_pitch_bend_message(m));
}
}

Expand Down Expand Up @@ -717,3 +717,39 @@ TEST_F(midi2_channel_voice_message, pitch_bend_sensitivities)
}

//-----------------------------------------------

TEST_F(midi2_channel_voice_message, deprecations)
{
using namespace midi;

#if defined(_MSC_VER)
__pragma( warning(push) )
__pragma( warning(disable: 4996) )
#elif defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#elif defined(__GNUC__) || defined(__GNUG__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#pragma GCC diagnostic pop
#endif

universal_packet p;
EXPECT_EQ(is_midi2_registered_controller_message(p), is_registered_controller_message(p));
EXPECT_EQ(is_midi2_assignable_controller_message(p), is_assignable_controller_message(p));
EXPECT_EQ(is_midi2_registered_per_note_controller_message(p), is_registered_per_note_controller_message(p));
EXPECT_EQ(is_midi2_assignable_per_note_controller_message(p), is_assignable_per_note_controller_message(p));
EXPECT_EQ(is_midi2_per_note_pitch_bend_message(p), is_per_note_pitch_bend_message(p));
if (is_registered_per_note_controller_message(p) || is_assignable_per_note_controller_message(p))
EXPECT_EQ(get_midi2_per_note_controller_index(p), get_per_note_controller_index(p));

#if defined(_MSC_VER)
__pragma( warning(pop) )
#elif defined(__clang__)
#pragma clang diagnostic pop
#elif defined(__GNUC__) || defined(__GNUG__)
#pragma GCC diagnostic pop
#endif
}

//-----------------------------------------------

0 comments on commit 41fea52

Please sign in to comment.