View Issue Details

IDProjectCategoryView StatusLast Update
0007181ardourfeaturespublic2020-04-19 20:18
Reporter.onkel. Assigned Toovenwerks  
PrioritynormalSeverityminorReproducibilityN/A
Status closedResolutionfixed 
Product Version5.5 
Summary0007181: OSC unable to determine master strip ID
DescriptionWhile improvement of my Android app I ran in an issue regarding strip addressing.
On startup I request the current strip list via /strip/list and weakly assign the remote ID of the master strip as max-strip-id + 1. So in case of hidden strips, this calculation leads in a faulty value.

Even if most master controls are accessible via /master/xxxx messages, plugins and sends are not available.
Some deeper investigation didn't result in a robust way to determine the correct ID.

If you have an idea on how to work around this behavior, please let me know.

My suggestion would be to add the master strip information to the end of "/strip/list" result (see attached patch file).
TagsNo tags attached.

  Users sponsoring this issue
Sponsors List Total Sponsorship = US$ 5

2017-01-12 07:06: .onkel. (US$ 5)
  Users sponsoring this issue (Total Sponsorship = US$ 5)

Activities

.onkel.

2016-12-19 08:36

reporter  

master_strip.patch (903 bytes)   
--- 5.5.214/ardour/libs/surfaces/osc/osc.cc	2016-12-19 09:05:10.635417393 +0100
+++ 5.5/ardour/libs/surfaces/osc/osc.cc	2016-12-19 09:27:58.299191682 +0100
@@ -1206,6 +1206,20 @@
 		}
 	}
 
+	// send master strip 
+	boost::shared_ptr<Route> master = boost::dynamic_pointer_cast<Route>(session->master_out());
+	if (master) {
+		lo_message mreply = lo_message_new ();
+		lo_message_add_string (mreply, "M");
+		lo_message_add_string (mreply, master->name().c_str());
+		lo_message_add_int32 (mreply, master->n_inputs().n_audio());
+		lo_message_add_int32 (mreply, master->n_outputs().n_audio());
+		lo_message_add_int32 (mreply, master->muted());
+		lo_message_add_int32 (mreply, 0); // soloed
+		lo_message_add_int32 (mreply, get_sid (master, get_address (msg)));
+		lo_send_message (get_address (msg), "#reply", mreply);
+	}
+
 	// Send end of listing message
 	lo_message reply = lo_message_new ();
 
master_strip.patch (903 bytes)   

ovenwerks

2017-07-01 17:57

reporter   ~0019853

"On startup I request the current strip list via /strip/list and weakly assign the remote ID of the master strip as max-strip-id + 1. So in case of hidden strips, this calculation leads in a faulty value." Should not be true if the strip_types is set right. If strip types is set to allow master but not hidden, master should always be the last strip. (unless monitor is in use). If I set strip_types to 191 and then do a /strip/list, with the current session I get:
#reply ssiiiiii "AT" "Audio 1" 1 2 0 0 1 0
#reply ssiiiiii "AT" "Audio 2" 1 2 0 0 2 1
#reply ssiiiiii "AT" "Audio 3" 1 2 0 0 3 0
#reply ssiiiii "B" "Bus 1" 1 2 0 0 4
#reply ssiiiii "B" "Bus 2" 1 2 0 0 5
#reply ssiiiii "B" "Bus 3" 1 2 0 0 6
#reply ssiiiii "B" "Bus 4" 1 2 0 0 7
#reply ssiiiii "B" "Bus 5" 1 2 0 0 8
#reply ssiiiii "B" "Bus 6" 1 2 0 0 9
#reply ssiiiii "B" "Bus 7" 1 2 0 0 10
#reply ssiiiii "B" "Bus 8" 1 2 0 0 11
#reply siiiii "Master" 2 2 0 0 12
#reply shhi "end_route_list" 48000 32968063 1

Hmm, that is not quite right, I think Master should include the "B" for bus as well. Anyway, does this work for you?

ovenwerks

2017-07-01 18:35

reporter   ~0019855

Using either the GUI to set strip types to include master or the /set_surface/strip_types OSC command to 191 to include master (or 255 to include monitor as well) should solve you problem. I have added MA and MO as strip types for master and monitor so when I send /strip/types I get:
#reply ssiiiiii "AT" "Audio 1" 1 2 0 0 1 0
#reply ssiiiiii "AT" "Audio 2" 1 2 0 0 2 1
#reply ssiiiiii "AT" "Audio 3" 1 2 0 0 3 0
#reply ssiiiii "B" "Bus 1" 1 2 0 0 4
#reply ssiiiii "B" "Bus 2" 1 2 0 0 5
#reply ssiiiii "B" "Bus 3" 1 2 0 0 6
#reply ssiiiii "B" "Bus 4" 1 2 0 0 7
#reply ssiiiii "B" "Bus 5" 1 2 0 0 8
#reply ssiiiii "B" "Bus 6" 1 2 0 0 9
#reply ssiiiii "B" "Bus 7" 1 2 0 0 10
#reply ssiiiii "B" "Bus 8" 1 2 0 0 11
#reply ssiiiii "MA" "Master" 2 2 0 0 12
#reply ssiiiii "MO" "Monitor" 2 2 0 0 13
#reply shhi "end_route_list" 48000 32968063 1

Please note that while the selected strip is included in the above set of strips, hidden strips are not. However, they can be included if the strip types bitset includes the bit for hidden (add 512 to your strip types value) is set.

The ssid numbers are recalculated any time the strip types value is changed or a strip is added, moved or removed... Ardour will send a strip/list to the surface in such cases as an indication the surface should send it's own /strip/list and reset it's own list of strips.

system

2020-04-19 20:18

developer   ~0023697

Issue has been closed automatically, by Trigger Close Plugin.
Feel free to re-open with additional information if you think the issue is not resolved.

Issue History

Date Modified Username Field Change
2016-12-19 08:36 .onkel. New Issue
2016-12-19 08:36 .onkel. File Added: master_strip.patch
2017-01-12 07:06 .onkel. Sponsorship Added .onkel.: US$ 5
2017-01-12 07:06 .onkel. Sponsorship Total 0 => 5
2017-07-01 17:57 ovenwerks Note Added: 0019853
2017-07-01 17:57 ovenwerks Status new => feedback
2017-07-01 18:35 ovenwerks Note Added: 0019855
2017-07-01 18:35 ovenwerks Status feedback => resolved
2017-07-01 18:35 ovenwerks Resolution open => fixed
2017-07-01 18:35 ovenwerks Assigned To => ovenwerks
2020-04-19 20:18 system Note Added: 0023697
2020-04-19 20:18 system Status resolved => closed