markusschloesser / MackieC4_P3

A Mackie C4 Midi Remote Script for Ableton 11
20 stars 2 forks source link

Next "parameter page" arrow controls in top row only visible and working for first device on track #4

Closed BilldarBagdar closed 3 years ago

BilldarBagdar commented 3 years ago

Hi Markus,

I am the theoretically anonymous person you mentioned in the readMe. I use GitHub at work, but it's a closed hosted version. This is my first adventure into public GitHub land. I couldn't find a place here for us to talk like a forum or whatever. So I opened this issue.

The title of this issue is actually something I would like to fix in the script, so it's a real issue too. If I have some devices on a track in track view, the view shows the first 8 devices on that track and a bunch of "sends" where you can adjust the send level. One of the features I really like with the script is the way you can click the "vpot button" of the device in track view and jump to device view of that device where you have 24 encoders automatically mapped to control the first 24 automation parameters of that device.

A feature of device view is supposed to be that you can "page through" all of the automation parameters any device exposes, 24 at a time. (up to 128 which is the max size in the script's database (parameter list max sizes); although Live I think also has a 128 parameter limit of some kind, some devices expose hundreds more controllable parameters) But in my experience that "paging" (using the '>>' and '<<' labeled pots in the top row) only works when you are in device view for the first device on a track. (if you got to device view by that vpot button jump only?). If you click the second or later device on a Track, it takes you to device view and you have the first 24 parameters mapped to the pots, but you don't have the '<<' or '>>' pots for paging to any "higher" parameters. I will often have a "midi transpose" or "midi velocity" plugin in front of an instrument plugin, so this bug really impacts my "C4 workflow" in Live - I often would like to get to the second page of parameters on the C4 but can't because no '>>'.


Currently, my PyCharm setup is still exactly how I left it last May, and I don't have Live 11 yet. But I do have a Python 3 version of Live 10 (10.1.28 - last v10 version), so I think I just need to get my local repository and IDE setup upgraded to Python 3 and catch up with your work. BTW - I don't normally work in Python, but I wanted some experience in a new language like Python and was motivated by this C4 scripting opportunity. But I'm still very green, a rookie, in Python-land. Some of the programming concepts are just opposite or not-a-concern compared with languages I'm more familiar with. For example, I don't really understand how class inheritance works, why you would use inheritance in Python, when "private" data or methods aren't really a thing. I'm much more used to working in languages where there is a distinct line (without using "reflection") between "private" and "publicly" exposed data and methods. So, the fact that these script classes are in a bit of an inheritance hierarchy doesn't completely make sense to me. Something else I have trouble wrapping my head around is the "methods are first class objects" thing in Python that makes "method calls" expensive (in terms of processor overhead cycles) compared to other languages. Separating distinct logical operations into well named methods is a primary way I keep track of things in code. Normally I would prefer calling a well named method that executes a single boolean operation than executing that same boolean operation directly, but in Python, not only is it "expensive" to call a method that just does one operation like that, you can't make that method "private" so it is only callable from inside the class where it appears. Perhaps a person with more Python experience than either of us will start contributing and can teach us both a thing or two along the way.

One thing I recommend for starters though is to make a "deprecated" branch of this repository where a python 2 version of the script is hosted. If anyone has an older Python 2 version of Live and a C4, that version might be exactly what they would want to work on or use. In other words, the repo would have essentially 2 "master branches", a P2 master and a P3 master. But the P2 master might not ever see any updates because all contributors contribute to the P3 side. But who knows, many updates or bug fixes might apply to both P2 and P3 anyway. If you really want to go "historical preservation", you could also make a "deprecated branch" that consists of just what was originally decompiled from Leigh's script (what you shared with me), and then another dead end branch with just what I contributed last year. "Code development history" is a big part of why source code repositories are popular. IMHO, the "best way" to have done it would have been to have had a source code repository going all along, and you could have just started this public repo from that "existing" repo including all the history. Since it doesn't look like you did that, we have what we have. It's not a show-stopping issue, it just means we would need to be careful when "inserting history" in "deprecated branches". If that sounds like too much, I'll see what I can do from my end about setting up something for the historical aspects, perhaps in parallel. Regardless, good job on everything you have accomplished so far. I don't know how many Live and C4 users are out there who also want to customize and improve this C4 script, but there are at least 2 of us...

markusschloesser commented 3 years ago

Hey there :-) Glad to see you here!

If I have some devices on a track in track view, the view shows the first 8 devices on that track and a bunch of "sends" where you can adjust the send level. One of the features I really like with the script is the way you can click the "vpot button" of the device in track view and jump to device view of that device where you have 24 encoders automatically mapped to control the first 24 automation parameters of that device. A feature of device view is supposed to be that you can "page through" all of the automation parameters any device exposes, 24 at a time. (up to 128 which is the max size in the script's database (parameter list max sizes); although Live I think also has a 128 parameter limit of some kind, some devices expose hundreds more controllable parameters) But in my experience that "paging" (using the '>>' and '<<' labeled pots in the top row) only works when you are in device view for the first device on a track. (if you got to device view by that vpot button jump only?). If you click the second or later device on a Track, it takes you to device view and you have the first 24 parameters mapped to the pots, but you don't have the '<<' or '>>' pots for paging to any "higher" parameters. I will often have a "midi transpose" or "midi velocity" plugin in front of an instrument plugin, so this bug really impacts my "C4 workflow" in Live - I often would like to get to the second page of parameters on the C4 but can't because no '>>'.

I just checked and you're correct, it does not populate for more than the first page for the second, third device (or it doesn't show the bank switching). I did not know this and nor is this fixed in my version of the script.

Currently, my PyCharm setup is still exactly how I left it last May, and I don't have Live 11 yet. But I do have a Python 3 version of Live 10 (10.1.28 - last v10 version), so I think I just need to get my local repository and IDE setup upgraded to Python 3 and catch up with your work. BTW - I don't normally work in Python, but I wanted some experience in a new language like Python and was motivated by this C4 scripting opportunity. But I'm still very green, a rookie, in Python-land. Some of the programming concepts are just opposite or not-a-concern compared with languages I'm more familiar with. For example, I don't really understand how class inheritance works, why you would use inheritance in Python, when "private" data or methods aren't really a thing. I'm much more used to working in languages where there is a distinct line (without using "reflection") between "private" and "publicly" exposed data and methods. So, the fact that these script classes are in a bit of an inheritance hierarchy doesn't completely make sense to me. Something else I have trouble wrapping my head around is the "methods are first class objects" thing in Python that makes "method calls" expensive (in terms of processor overhead cycles) compared to other languages. Separating distinct logical operations into well named methods is a primary way I keep track of things in code. Normally I would prefer calling a well named method that executes a single boolean operation than executing that same boolean operation directly, but in Python, not only is it "expensive" to call a method that just does one operation like that, you can't make that method "private" so it is only callable from inside the class where it appears. Perhaps a person with more Python experience than either of us will start contributing and can teach us both a thing or two along the way.

I can only recommend Live 11, lots of cool things were added. Having said that, I am still running it thru tests to determine if everything is ok. Wrt Python 3: Live 11 b24 was the first Py3 version, so I don't think that you're running Live 10 with it :-) wrt rookie: at least you know development and GitHub 😂 For me those two are new as well. But yeah, I am currently in the middle of teaching myself coding/python for the first time ever, right now at "modules". So inheritance and how to instantiate properly and call stuff from somewhere is where I'm struggling with. At the same time, I read the code that's out there and try to understand what's going on and copy ways of doing things. And the whole boost thing, so calling c++ is a whole other level.

One thing I recommend for starters though is to make a "deprecated" branch of this repository where a python 2 version of the script is hosted. If anyone has an older Python 2 version of Live and a C4, that version might be exactly what they would want to work on or use. In other words, the repo would have essentially 2 "master branches", a P2 master and a P3 master. But the P2 master might not ever see any updates because all contributors contribute to the P3 side. But who knows, many updates or bug fixes might apply to both P2 and P3 anyway. If you really want to go "historical preservation", you could also make a "deprecated branch" that consists of just what was originally decompiled from Leigh's script (what you shared with me), and then another dead end branch with just what I contributed last year. "Code development history" is a big part of why source code repositories are popular. IMHO, the "best way" to have done it would have been to have had a source code repository going all along, and you could have just started this public repo from that "existing" repo including all the history. Since it doesn't look like you did that, we have what we have. It's not a show-stopping issue, it just means we would need to be careful when "inserting history" in "deprecated branches". If that sounds like too much, I'll see what I can do from my end about setting up something for the historical aspects, perhaps in parallel. Regardless, good job on everything you have accomplished so far. I don't know how many Live and C4 users are out there who also want to customize and improve this C4 script, but there are at least 2 of us...

From my understanding one can use the SAME script for both py2 and py3. Mainly with the help of "future imports", so with that we wouldn't need 2 branches. But the other thing is how to address LOM changes or different versions thereof. My current goal is to just bring everything up to speed for py3 and Live 11. However I still have the old stuff on my PC and could do different branches (1. decompiled versions I sent you, 2. decompiled versions I did later which were "better" decompiled, 3 the code you sent me, PLUS all the different Mackie Control scripts versions). But for that I need to understand branching better and how to manage that with pycharm. I am still struggling with more basic stuff I looked a lot and am really good at searching but could only find very little about (more complex) remote scripts less alone remote scripts and the C4. What I DID find was this https://intellij-support.jetbrains.com/hc/en-us/community/posts/360006921160-virtual-environment-for-developing-Ableton-Live-Midi-Remote-scripts-in-PyCharm?page=1#community_comment_360002795740

markusschloesser commented 3 years ago

oh and I enabled the "Discussions"!

BilldarBagdar commented 3 years ago

Looks like I'm spamming you 4 times with this, sorry but I'm not sure which one to pick...  I guess this email reply is going into the issue thread, hopefully only once.

You might want to check out a program called sourcetree.  It's a GUI for git that helps to visually understand project branching and merging and visually keep track of project movement over time.

Typically, a "source controlled" project would have a master branch and maybe a development branch that are more or less permanent, and then there is some metric for determining when code is ready to pull from the development branch to the master branch and "go to release".  Then developers "clone the repo" and create as many task or feature oriented branches as desired locally, but then only upload or "commit" branches back to the "origin" (GitHub) repo when whatever the "feature" is in the branch is done and ready to go.  Again there is usually some agreed upon metric for how it works and it's usually very easy to get a "Pull Request" approved to go to the development branch, and then more hurdles must be cleared before another Pull request would be approved to go to the master branch and then release.  We don't necessarily need to get that fancy and/or bureaucratic especially if it's just the two of us.  At a minimum I suggest we start with the master branch you already have and then a development branch where we "share" work.  I.E I can test your stuff and you can test mine before it goes to the master branch.  With the correct "team permissions" I can approve my own "Pulls" to the development branch from any local branch when I "push" it to origin (GitHub), and you can do the same.  Then each of us can "Pull" from the  origin's development branch to get the other's work locally without messing with any of our own local branching or the master branch. (and we can choose when and where to merge the other's work into our own local branches) 

I also suggest doing "lazy initialization" on any draconian Pull request approval mechanics.  What I mean is, we wait for the first accident to occur, or maybe 2 other people to start contributing, before instituting any rules about who can do what when.  We can just agree to agree in a discussion thread when something is ready for the master branch and postpone any other "rule making" until/unless needed.  There are also nearly infinitely many ways to organize a project and its branching structure, but most of them are way more complex than necessary for a little project like this.  If we attract 100 enthusiastic developers, we'll need a pretty organized structure to keep the ship afloat.  But if it's just you and I for years to come, any structure can stay fairly organically organized for a long time without issues.

The only reason to "fork" a repo (AFAIK) would be to take the project in a different direction.  Famously, the Android source code was "forked" early on so open source developers could remove as much of the "Google monster" as was practical or whatever they wanted.  But I'm sure phone manufacturers like Samsung just cloned the Android repo they build their Samsung phone OS on so when Google updates the source, Samsung can just update their clone.  Developers doing "Forked" projects on the other hand, often have much more effort involved bringing in new Android features they want because the new features might be built with "Google monster" parts and pieces that were removed/replaced from/in the forked project.

markusschloesser commented 3 years ago
  1. thanks for explanation! I agree, now knowing better. But I still need to understand the workings of GH with pycharm better, will learn
  2. I invited you as collaborator :-)
  3. have a look at https://github.com/markusschloesser/MackieC4_P3/discussions/8, could help with this issue here
  4. i cleaned up your reply, cos it included the original quote as well
markusschloesser commented 3 years ago

I didn't even know about the "show devices on track" view, but I seem to have fixed that a bit image SOMETIMES devices are now shown in channel strip mode and can be clicked :-) right now unfortunately only for exactly 1 track in my template and I can't find out why, but making progress. Also clicking a vpot button for where there is no device still leads to an index out of range error. Can you find out why it's only working for 1 track?

BilldarBagdar commented 3 years ago

There are 4 distinct "assignment modes" in the script mapped to the 4 buttons in the ASSIGNMENT box on the device: User = "Marker", Plugins = "Track", Channel_Strip, and Function. IIRC, only channel_strip and Plugins modes had any functionality when I started and all I did to "user mode" was put a message on the LCD screens.

I won't be able to help figure out why it only works for one track until I can "run your code" which means Live 11, I suspect. But I can tell you that navigating tracks works for me with my version from last spring. I can navigate "selected track" back and forth using any remote device or the mouse and the C4 works (responds or transmits), and I can see "devices" listed, even "midi devices". For me, the "next level down" isn't working. If I click on "not device 1 of 8", but 2 - 8, then the "device view" doesn't "page" any parameters. But your issue is probably related to a very similar "array indexing" issue.

I would really love to get a look at the original Mackie Remote Script for the C4 that was part of the whole Mackie Control lineup before they discontinued the C4. I think it might be substantially easier to figure out and modify than what we have from Leigh. I suspect Leigh actually started from such a copy, but maybe he started by copying from the "Control Expander" script or something else. But it sure seems to me that this C4 script might have been meant to "play nice" with the rest of the Mackie Control surfaces configured in the same session.

markusschloesser commented 3 years ago

There are 4 distinct "assignment modes" in the script mapped to the 4 buttons in the ASSIGNMENT box on the device: User = "Marker", Plugins = "Track", Channel_Strip, and Function. IIRC, only channel_strip and Plugins modes had any functionality when I started and all I did to "user mode" was put a message on the LCD screens.

I am aware of the 2 modes that do not function, but don't care right now, lots more stuff to fix for the existing 2 modes :-)

But I can tell you that navigating tracks works for me with my version from last spring. I can navigate "selected track" back and forth using any remote device or the mouse and the C4 works (responds or transmits), and I can see "devices" listed, even "midi devices". For me, the "next level down" isn't working. If I click on "not device 1 of 8", but 2 - 8, then the "device view" doesn't "page" any parameters. But your issue is probably related to a very similar "array indexing" issue.

Maybe a couple of misunderstandings:

  1. I can navigate tracks.
  2. I can see devices, but only if there are normal devices, not grouped devices and not if a m4l device is involved.
  3. I did switch around the arrow buttons for navigating devices, because it bugged the hell out of me and was imho not logical. Up should count up/right in the device list.
  4. And I CAN navigate using the buttons, IF devices are shown in track mode :D see 3
  5. I cannot "bank" parameters for the devices which are not the first device

I would really love to get a look at the original Mackie Remote Script for the C4 that was part of the whole Mackie Control lineup before they discontinued the C4. I think it might be substantially easier to figure out and modify than what we have from Leigh. I suspect Leigh actually started from such a copy, but maybe he started by copying from the "Control Expander" script or something else. But it sure seems to me that this C4 script might have been meant to "play nice" with the rest of the Mackie Control surfaces configured in the same session.

There never was an original C4 script! Leigh must have built everything by hand.

BilldarBagdar commented 3 years ago

I agree. Plenty to do with the two "working modes" for starters. But I suspect maybe one of those "unused modes" might become a slot for "expanded rack view" or something...

I guess I was confused by

SOMETIMES devices are now shown in channel strip mode and can be clicked :-) right now unfortunately only for exactly 1 track in my template and I can't find out why, but making progress. Also clicking a vpot button for where there is no device still leads to an index out of range error.

The reason clicking a button for the 4th device when only three are loaded causes index out of bounds is because of the big "list database" hard coded to be 128 deep for everything and there is no "array-out-of-bounds error checking" in the script. The button click event gets routed to all the same places expecting to connect with a "vpot_parameter[0] object" that won't be there because there's no 4th device. The "list index" for the 4th device exists (128 "list indexes" always exist), but there's no tuple at that "list index" where index 0 in the tuple "is" the device object or device parameter object. (I suspect index out of bounds is actually referring to "index 0 in a non-existent tuple" rather than the "4th device" index in the giant "list database" which always exists)

markusschloesser commented 3 years ago

NOW I get it! 😂😂 I was always looking for the way the LOM is somehow accessed for "THE DB" without me noticing it, when in fact is is not, but hard coded. That explains sooo much. My first venture into decorators and bringing the LOM into play has failed until now, even though I spent something like 6 hrs on it. Will need to learn more about @listen, @subject and what it does

BilldarBagdar commented 3 years ago

"Hard Coded" isn't exactly correct, unless you are strictly referring to the fact that the "list db" is hard coded to size 128 for every list. result = [(p, p.name) for p in self.__chosen_plugin.parameters] I think if you poke around you will see that self.__chosen_plugin.parameters member is populated from the LOM, or is supposed to be. But I suspect the code goes to the effort of doing that "DEVICE_DICT" lookup (in self.__reorder_parameters()) for default device parameters because populating a parameter list that way is much less costly in processor cycles than getting the parameters from the device itself in the LOM. But that is just a guess.

markusschloesser commented 3 years ago

btw just read today that m4l was only introduced in 2010, which explains why a script from 2008 doesn't know how to deal with them properly. There must be something special about them. re LOM: yep I saw that (been looking at all the scripts for weeks now). But there's definitely way more to get from there. For example when I expand a device, the C4 doesn't see the update.

markusschloesser commented 3 years ago

I seem to have fixed this issue by accident, I can now use the "parameter banking" function for all devices on a track. Also a lot more of device are shown in track mode now, but still not all of them. I have a special m4l track in my Live template which includes 5 m4l devices. 3 are shown in track mode, but I can also select 4 and 5, and after having selected them once, they are also shown in track mode. Update: and I have no fucking clue with what, when or how I fixed it 🙄😂😂

BilldarBagdar commented 3 years ago

Hmmm. Last night I was hunting on that other trail, but I noticed that although the Wavetable device exposes 60 some parameters (that get logged), the script/device was only loading one page of (the first 24) parameters. I couldn't "page right". If this issue is fixed or was never broken for you, probably same thing for me. I guess the reason I couldn't "page around" was because there really was no other page loaded (now you can tell though because)

#  current selected_track <3-Audio>
#  new selected_track <2-Descenting Dreams>

changed to the Wavetable track 2 (above) and the device parameters got enumerated coming out of LOM.

#  Param 0 name <Osc 1 Transp>
#  Param 1 name <Osc 1 Detune>
#  Param 2 name <Osc 1 Pos>
#  Param 3 name <Osc 1 Effect 1>
#  Param 4 name <Osc 1 Effect 2>
#  Param 5 name <Osc 1 Pan>
#  Param 6 name <Osc 1 Gain>
#  Param 7 name <Osc 1 On>
#  Param 8 name <Osc 2 Transp>
#  Param 9 name <Osc 2 Detune>
#  Param 10 name <Osc 2 Pos>
#  Param 11 name <Osc 2 Effect 1>
#  Param 12 name <Osc 2 Effect 2>
#  Param 13 name <Osc 2 Pan>
#  Param 14 name <Osc 2 Gain>
#  Param 15 name <Osc 2 On>
#  Param 16 name <Filter 1 On>
#  Param 17 name <Filter 1 Freq>
#  Param 18 name <Filter 1 Res>
#  Param 19 name <Filter 1 Drive>
#  Param 20 name <Filter 1 Type>
#  Param 21 name <Filter 1 Slope>
#  Param 22 name <Filter 1 LP/HP>
#  Param 23 name <Filter 1 BP/NO/Morph>
#  Param 24 name <Filter 2 On>
#  Param 25 name <Filter 2 Freq>
#  Param 26 name <Filter 2 Res>
#  Param 27 name <Filter 2 Drive>
#  Param 28 name <Filter 2 Type>
#  Param 29 name <Filter 2 Slope>
#  Param 30 name <Filter 2 LP/HP>
#  Param 31 name <Filter 2 BP/NO/Morph>
#  Param 32 name <Amp Attack>
#  Param 33 name <Amp Decay>
#  Param 34 name <Amp Sustain>
#  Param 35 name <Amp Release>
#  Param 36 name <Amp A Slope>
#  Param 37 name <Amp D Slope>
#  Param 38 name <Amp R Slope>
#  Param 39 name <Amp Loop Mode>
#  Param 40 name <Env 2 Attack>
#  Param 41 name <Env 2 Decay>
#  Param 42 name <Env 2 Sustain>
#  Param 43 name <Env 2 Release>
#  Param 44 name <Env 3 Attack>
#  Param 45 name <Env 3 Decay>
#  Param 46 name <Env 3 Sustain>
#  Param 47 name <Env 3 Release>
#  Param 48 name <LFO 1 Amount>
#  Param 49 name <LFO 1 Rate>
#  Param 50 name <LFO 1 S. Rate>
#  Param 51 name <LFO 1 Sync>
#  Param 52 name <LFO 2 Amount>
#  Param 53 name <LFO 2 Rate>
#  Param 54 name <LFO 2 S. Rate>
#  Param 55 name <LFO 2 Sync>
#  Param 56 name <Time>
#  Param 57 name <Global Mod Amount>
#  Param 58 name <Unison Amount>
#  Param 59 name <Transpose>
#  Param 60 name <Glide>
#  Param 61 name <Sub Gain>
#  Param 62 name <Sub Transpose>
#  Param 63 name <Volume>
#  Param name <A-Reverb>
#  Param name <B-Delay>

The last two lines are my "2 default sends" and Wavetable device actually exposes 0 - 63 = 64 parameters. There should be 3 pages of parameters. But, when those parameters are logged again...

 # Param 0 tuple name <Osc 1 Transp>
 # Param 1 tuple name <Osc 1 Detune>
 # Param 2 tuple name <Osc 1 Pos>
 # Param 3 tuple name <Osc 1 Effect 1>
 # Param 4 tuple name <Osc 1 Effect 2>
 # Param 5 tuple name <Osc 1 Pan>
 # Param 6 tuple name <Osc 1 Gain>
 # Param 7 tuple name <Osc 1 On>
 # Param 8 tuple name <Osc 2 Transp>
 # Param 9 tuple name <Osc 2 Detune>
 # Param 10 tuple name <Osc 2 Pos>
 # Param 11 tuple name <Osc 2 Effect 1>
 # Param 12 tuple name <Osc 2 Effect 2>
 # Param 13 tuple name <Osc 2 Pan>
 # Param 14 tuple name <Osc 2 Gain>
 # Param 15 tuple name <Osc 2 On>
 # Param 16 tuple name <Filter 1 On>
 # Param 17 tuple name <Filter 1 Freq>
 # Param 18 tuple name <Filter 1 Res>
 # Param 19 tuple name <Filter 1 Drive>
 # Param 20 tuple name <Filter 1 Type>
 # Param 21 tuple name <Filter 1 Slope>
 # Param 22 tuple name <Filter 1 LP/HP>
 # Param 23 tuple name <Filter 1 BP/NO/Morph>

only one page of parameters loads (above) and only one page-of-parameters gets feedback (I think this is correct though, that's what "page banks" are for.)

 # potIndex<8> feedback<0 st> received
 # potIndex<9> feedback<0 ct> received
 # potIndex<10> feedback<44 %> received
 # potIndex<11> feedback<0.0 %> received
 # potIndex<12> feedback<42 %> received
 # potIndex<13> feedback<17L> received
 # potIndex<14> feedback<-0.9 dB> received
 # potIndex<15> feedback<On> received
 # potIndex<16> feedback<7 st> received
 # potIndex<17> feedback<7 ct> received
 # potIndex<18> feedback<18 %> received
 # potIndex<19> feedback<0.0 %> received
 # potIndex<20> feedback<0.0 %> received
 # potIndex<21> feedback<38R> received
 # potIndex<22> feedback<-2.7 dB> received
 # potIndex<23> feedback<On> received
 # potIndex<24> feedback<On> received
 # potIndex<25> feedback<4.15 kHz> received
 # potIndex<26> feedback<0.0 %> received
 # potIndex<27> feedback<0.00 dB> received
 # potIndex<28> feedback<Lowpass> received
 # potIndex<29> feedback<12> received
 # potIndex<30> feedback<Clean> received
 # potIndex<31> feedback<Clean> received

Do you have multiple pages of device parameters available? Always? Never? Sometimes?

I'm still investigating...

BilldarBagdar commented 3 years ago

I pushed an update to origin. With a fix for the above, like right after loading a default session (where the saved-selected-track has one device, Wavetable) and moving selected track left-right. (The Wavetable device name doesn't show correctly over the encoder in track mode, but it shows correctly once we enter device mode) But then by clicking the encoder button anyway, I can get into device mode and page to all 3 pages of parameters (again?) (on that Wavetable device)

Did I change anything on your end?

Edit: Also, I haven't checked "second and later" devices having those "page banks" working yet. that's next.

markusschloesser commented 3 years ago

I don't know if it works when it's the first track and device after loading Live, but other than that, it always works for me, that's why I closed this issue

markusschloesser commented 3 years ago

I pushed an update to origin. With a fix for the above, like right after loading a default session (where the saved-selected-track has one device, Wavetable) and moving selected track left-right. (The Wavetable device name doesn't show correctly over the encoder in track mode, but it shows correctly once we enter device mode) But then by clicking the encoder button anyway, I can get into device mode and page to all 3 pages of parameters (again?) (on that Wavetable device)

Did I change anything on your end?

Edit: Also, I haven't checked "second and later" devices having those "page banks" working yet. that's next.

@BilldarBagdar i checked out your latest commit and the big regression is, that param values are no longer updated on the C4 when you twist a vpot (sends and deviceparams). So turning everything to str is imho a bad idea.

BilldarBagdar commented 3 years ago

I'll look into that, because I'm recalling I was seeing the LCDs update both ways, as "float values" and as that prettier text.

The latest commit was last night, but the day before was the commit with "strings research".

markusschloesser commented 3 years ago

I undo-ed the str commit and that fixed it

BilldarBagdar commented 3 years ago

you mean directly in "display update"?

I just figured that out myself. sorry about that.

that's kind of surprising behavior to me. This vpot_display_text.set_text(plugin_param[0], plugin_param[1]) for example, works like the regular feedback (because it's a DeviceParameter object?) we expect. But this vpot_display_text.set_text(str(plugin_param[0]), plugin_param[1]) more or less obliterates the dynamic feedback aspect.

Did you notice that if you twisted an encoder like 32, switched to device mode and back to channel mode, the LCD was updated after the twist? It's like you would get the one "real" first (most recent) value each time the mode would load, and then no more updates.

BilldarBagdar commented 3 years ago

OK - I pushed another update that seems to resolve the problem with loading an AutoFilter device. I will comment also wherever that thread is...