View Issue Details

IDProjectCategoryView StatusLast Update
0006299ardourfeaturespublic2020-04-19 20:17
Reporterovenwerks Assigned Topaul  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version4.X git (version in description) 
Summary0006299: Control surfaces: Bank left/right should always hit the same bank boundary
DescriptionBanking boundaries should always be in the same place even when the number of tracks is not an even 8 tracks. The beginning of each bank should be an even number of banksize banks from the first bank so that the operator always knows which set of strips they are controlling. (this is the way Logic operates, it is their manual I got the idea from) Even if the channel left/right keys are used to offset this, bank keys should go to know banks

Another idea would be to allow the user to set arbitrary banks... but I suspect this would be a headache. This would allow for situations where two channels that normally get used together (snare top/bottom) happen to cross a bank boundary.
Tagscontrol, mackie, surface

Activities

ovenwerks

2015-05-25 05:08

reporter   ~0016726

Last edited: 2015-05-25 05:22

There are two ways this can be done. The way Logic does things is to always use all surface strips. So for 20 Logic Strips the banks would be 1-8, 9-16 and 13-20.

The other possibility would be to always be n_strips multipules from the first strip, so that for 20 tracks the banks are 1-8, 9-16 and 17-20 leaving some dead surface strips on the last bank.

The advantage of the first way is that all the strips are always used and one can claim some standardization... though I don't know how all the other DAWs do this.

The second way is the one I think I would prefer. After some thought I realized that bank right gives me the expectation that the track/strip to the right of the last track now becomes my first track on the surface. If I have a large number of tracks, having the last track be the odd one out could be confusing.

So, to illustrate with 8 strips on the surface and 20 tracks:

The banks would be 1-8, 9-16 and 17-20 as above. Pressing bank right when on bank 17 would not move the bank, also pressing channel right should not have any effect either as it does not add any channel to the track.

Because channel left/right can leave the current surface strips starting in between banks, bank left/right may not move a whole 8 strips over. For example, if the surface is showing channels 10-18, a bank left should show 9-16 and a bank right would goto 17-20.

As I am thinking this is one of those things I can write a patch to... if my thinking is screwy, or needs to be bent one way or the other let me know.

2015-05-26 06:08

 

patch.txt (1,445 bytes)   
diff --git a/libs/surfaces/mackie/mcp_buttons.cc b/libs/surfaces/mackie/mcp_buttons.cc
index a1ea089..ee04d68 100644
--- a/libs/surfaces/mackie/mcp_buttons.cc
+++ b/libs/surfaces/mackie/mcp_buttons.cc
@@ -103,11 +103,7 @@ MackieControlProtocol::left_press (Button &)
 	DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank left with current initial = %1 nstrips = %2 tracks/busses = %3\n",
 							   _current_initial_bank, strip_cnt, sorted.size()));
 
-	if (_current_initial_bank > strip_cnt) {
-		switch_banks (_current_initial_bank - strip_cnt);
-	} else {
-		switch_banks (0);
-	}
+		switch_banks ((_current_initial_bank - 1) / strip_cnt * strip_cnt);
 
 	return on;
 }
@@ -124,12 +120,19 @@ MackieControlProtocol::right_press (Button &)
 	Sorted sorted = get_sorted_routes();
 	uint32_t strip_cnt = n_strips();
 	uint32_t route_cnt = sorted.size();
+	uint32_t max_bank = route_cnt / strip_cnt * strip_cnt;
+
 
 	DEBUG_TRACE (DEBUG::MackieControl, string_compose ("bank right with current initial = %1 nstrips = %2 tracks/busses = %3\n",
 							   _current_initial_bank, strip_cnt, route_cnt));
 
-	uint32_t new_initial = std::min (_current_initial_bank + strip_cnt, route_cnt - 1);
-	switch_banks (new_initial);
+	if (_current_initial_bank < max_bank) {
+		uint32_t new_initial = (_current_initial_bank / strip_cnt * strip_cnt) + strip_cnt;
+
+		switch_banks (new_initial);
+	} else {
+		switch_banks (max_bank);
+	}
 
 	return on;
 }
patch.txt (1,445 bytes)   

ovenwerks

2015-05-26 06:12

reporter   ~0016727

Last edited: 2015-05-26 13:13

Patch file attached. It changes the operation of only the two bank keys, but does not change the channel left/right keys.

The math "looks" wrong, but remember this is integer math which is why it works.

paul

2015-05-26 14:23

administrator   ~0016733

patch applied and committed. thanks!

system

2020-04-19 20:17

developer   ~0023454

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
2015-05-03 22:55 ovenwerks New Issue
2015-05-04 04:36 ovenwerks Tag Attached: control
2015-05-25 05:08 ovenwerks Note Added: 0016726
2015-05-25 05:08 ovenwerks Tag Attached: surface
2015-05-25 05:08 ovenwerks Tag Attached: mackie
2015-05-25 05:22 ovenwerks Note Edited: 0016726
2015-05-26 06:08 ovenwerks File Added: patch.txt
2015-05-26 06:12 ovenwerks Note Added: 0016727
2015-05-26 13:13 ovenwerks Note Edited: 0016727
2015-05-26 14:23 paul Note Added: 0016733
2015-05-26 14:23 paul Status new => resolved
2015-05-26 14:23 paul Resolution open => fixed
2015-05-26 14:23 paul Assigned To => paul
2020-04-19 20:17 system Note Added: 0023454
2020-04-19 20:17 system Status resolved => closed