Skip to content

Commit

Permalink
Merged in b/AUD-290_track_gain_and_pan_not_connected_to_OSC_API (pull…
Browse files Browse the repository at this point in the history
… request #165)

B/AUD-290 track gain and pan not connected to OSC API

Approved-by: Gustav Andersson
Approved-by: Stefano Zambon
  • Loading branch information
ruben-elk committed Apr 14, 2020
2 parents b591006 + fd6dca1 commit 7e3e820
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 67 deletions.
47 changes: 27 additions & 20 deletions src/control_frontends/osc_frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ static int osc_send_bypass_state_event(const char* /*path*/,
connection->controller->set_processor_bypass_state(connection->processor, isBypassed);
SUSHI_LOG_DEBUG("Setting processor {} bypass to {}", connection->processor, isBypassed);
return 0;
}
}

static int osc_send_keyboard_note_event(const char* /*path*/,
const char* /*types*/,
Expand Down Expand Up @@ -234,7 +234,7 @@ static int osc_reset_timing_statistics(const char* /*path*/,
}
SUSHI_LOG_DEBUG("Resetting {} timing statistics", output_text);
return 0;
}
}

static int osc_set_tempo(const char* /*path*/,
const char* /*types*/,
Expand Down Expand Up @@ -391,7 +391,7 @@ std::pair<OscConnection*, std::string> OSCFrontend::_create_parameter_connection
connection->instance = this;
connection->controller = _controller;
return {connection, osc_path};
}
}

bool OSCFrontend::connect_to_parameter(const std::string& processor_name,
const std::string& parameter_name)
Expand Down Expand Up @@ -497,35 +497,42 @@ bool OSCFrontend::connect_to_program_change(const std::string& processor_name)
return true;
}

bool OSCFrontend::connect_processor_parameters(const std::string& processor_name, int processor_id)
{
auto [parameters_status, parameters] = _controller->get_processor_parameters(processor_id);
if (parameters_status != ext::ControlStatus::OK)
{
return false;
}
for (auto& param : parameters)
{
if (param.type == ext::ParameterType::FLOAT || param.type == ext::ParameterType::INT || param.type == ext::ParameterType::BOOL)
{
connect_to_parameter(processor_name, param.name);
connect_from_parameter(processor_name, param.name);
}
if (param.type == ext::ParameterType::STRING_PROPERTY)
{
connect_to_string_parameter(processor_name, param.name);
}
}
return true;
}

void OSCFrontend::connect_all()
{
auto tracks = _controller->get_tracks();
for (auto& track : tracks)
{
connect_processor_parameters(track.name, track.id);
auto [processors_status, processors] = _controller->get_track_processors(track.id);
if (processors_status != ext::ControlStatus::OK)
{
return;
}
for (auto& processor : processors)
{
auto [parameters_status, parameters] = _controller->get_processor_parameters(processor.id);
if (parameters_status != ext::ControlStatus::OK)
{
return;
}
for (auto& param : parameters)
{
if (param.type == ext::ParameterType::FLOAT || param.type == ext::ParameterType::INT || param.type == ext::ParameterType::BOOL)
{
connect_to_parameter(processor.name, param.name);
connect_from_parameter(processor.name, param.name);
}
if (param.type == ext::ParameterType::STRING_PROPERTY)
{
connect_to_string_parameter(processor.name, param.name);
}
}
connect_processor_parameters(processor.name, processor.id);
if (processor.program_count > 0)
{
connect_to_program_change(processor.name);
Expand Down
13 changes: 11 additions & 2 deletions src/control_frontends/osc_frontend.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ class OSCFrontend : public BaseControlFrontend
* @brief Connect osc to the bypass state of a given processor.
* The resulting osc path will be:
* "/bypass/processor_name,i(enabled == 1, disabled == 0)"
*
* @param processor_name
*
* @param processor_name
* @return
*/
bool connect_to_bypass_state(const std::string &processor_name);
Expand Down Expand Up @@ -104,6 +104,15 @@ class OSCFrontend : public BaseControlFrontend
*/
bool connect_kb_to_track(const std::string &track_name);

/**
* @brief Connect all parameters from a given processor.
*
* @param processor_name The name of the processor to connect.
* @param processor_id The id of the processor to connect.
* @return
*/
bool connect_processor_parameters(const std::string& processor_name, int procesor_id);

/**
* @brief Register OSC callbacks far all parameters of all plugins and
* connect midi kb data to a track.
Expand Down
32 changes: 23 additions & 9 deletions test/unittests/control_frontends/osc_frontend_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,20 @@ class TestOSCFrontend : public ::testing::Test
OSCFrontend _module_under_test{&_test_engine, &_controller, OSC_TEST_SERVER_PORT, OSC_TEST_SEND_PORT};
};

TEST_F(TestOSCFrontend, TestConnectAll)
{
_module_under_test.connect_all();
lo_send(_address, "/parameter/track_1/param_1", "f", 0.5f);
ASSERT_TRUE(wait_for_event());
lo_send(_address, "/parameter/track_2/param_2", "f", 0.5f);
ASSERT_TRUE(wait_for_event());
lo_send(_address, "/parameter/proc_1/param_1", "f", 0.5f);
ASSERT_TRUE(wait_for_event());
lo_send(_address, "/parameter/proc_2/param_2", "f", 0.5f);
ASSERT_TRUE(wait_for_event());
lo_send(_address, "/parameter/non/existing", "f", 0.5f);
ASSERT_FALSE(wait_for_event());
}

TEST_F(TestOSCFrontend, TestSendParameterChange)
{
Expand All @@ -92,7 +106,7 @@ TEST_F(TestOSCFrontend, TestSendNoteOn)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "siif", "note_on", 0, 46, 0.8f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand All @@ -110,7 +124,7 @@ TEST_F(TestOSCFrontend, TestSendNoteOff)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "siif", "note_off", 1, 52, 0.7f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand All @@ -128,7 +142,7 @@ TEST_F(TestOSCFrontend, TestSendNoteAftertouch)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "siif", "note_aftertouch", 10, 36, 0.1f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand All @@ -146,7 +160,7 @@ TEST_F(TestOSCFrontend, TestSendKeyboardModulation)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "sif", "modulation", 9, 0.5f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand All @@ -163,7 +177,7 @@ TEST_F(TestOSCFrontend, TestSendKeyboardPitchBend)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "sif", "pitch_bend", 3, 0.3f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand All @@ -180,7 +194,7 @@ TEST_F(TestOSCFrontend, TestSendKeyboardAftertouch)
{
ASSERT_TRUE(_module_under_test.connect_kb_to_track("sampler"));
lo_send(_address, "/keyboard_event/sampler", "sif", "aftertouch", 11, 0.11f);

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ(0, std::stoi(args["track id"]));
Expand Down Expand Up @@ -245,7 +259,7 @@ TEST_F(TestOSCFrontend, TestSetTimeSignature)
TEST_F(TestOSCFrontend, TestSetPlayingMode)
{
lo_send(_address, "/engine/set_playing_mode", "s", "playing");

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ("PLAYING", args["playing mode"]);
Expand All @@ -254,7 +268,7 @@ TEST_F(TestOSCFrontend, TestSetPlayingMode)
TEST_F(TestOSCFrontend, TestSetSyncMode)
{
lo_send(_address, "/engine/set_sync_mode", "s", "midi");

ASSERT_TRUE(wait_for_event());
auto args = _controller.get_args_from_last_call();
EXPECT_EQ("MIDI", args["sync mode"]);
Expand Down Expand Up @@ -298,4 +312,4 @@ TEST(TestOSCFrontendInternal, TestMakeSafePath)
{
EXPECT_EQ("s_p_a_c_e_", make_safe_path("s p a c e "));
EXPECT_EQ("in_valid", make_safe_path("in\\\" v*[a]{l}id"));
}
}
Loading

0 comments on commit 7e3e820

Please sign in to comment.