View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0006299 | ardour | features | public | 2015-05-03 22:55 | 2020-04-19 20:17 |
| Reporter | ovenwerks | Assigned To | paul | ||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | closed | Resolution | fixed | ||
| Product Version | 4.X git (version in description) | ||||
| Summary | 0006299: Control surfaces: Bank left/right should always hit the same bank boundary | ||||
| Description | Banking 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. | ||||
| Tags | control, mackie, surface | ||||
|
|
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 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. |
|
|
patch applied and committed. thanks! |
|
|
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. |
| 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 |