Introducing CVA-7 CV Analyzer Preview (needs help testing/design!)

This forum is for discussing Rack Extensions. Devs are all welcome to show off their goods.
User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

16 Sep 2016

I wanted to explain a couple of things and get your feedback and opinions.

The CV value is internally transmitted as a number in the range [-1.0, +1.0] (for the purists, the range is technically [-10000, +10000], but I have yet to find a device that transmits outside the [-1.0, +1.0] range so I have decided to handle this range only). As you know you can hook up any CV out to any CV in. Obviously what matters is how the device receiving CV "interprets" this data. And this is what is crucial in this device and what I wanted to display.

When CV is hooked to a Gate input, then the range [-1.0, +1.0] is "scaled" to [0, 127] (negative is dropped) to interpret it as a gate/velocity value.
When CV is hooked to a Note input, then the range [-1.0, +1.0] is "scaled" to [0, 127] (negative is dropped) to interpret it as a midi note value (the formula is a bit strange due to historical reasons and is different than gate).

This is why my device lets you "interpret" the "CV In" value as different things, like gate, note or just a number. The "Display Scale" (probably the name is misleading and confusing) lets you choose how the number gets displayed.

* 1x means show it as a floating point number in the range [-1.0, +1.0] which is EXACTLY the number that actually goes on the wire.
* 127x simply scales this range to [-127, +127] (so it is similar to gate except that gate does not handle negative values). Most knobs use a 127x scale (if you are familiar with Revolver RE which is no longer available, it was using this scale to display CV). It just displays it this way but under the cover it is still a number in the range [-1.0, +1.0]
* 100x simply scales this range to [-100, +100]. Some devices interprets cv this way.

In the grand scheme of things Gate/Note/1x/100x/127x are all showing the SAME data simply differently. I currently have separate displays for each one of those interpretations (+ a toggle). That being said, it can be confusing. Another design could be to only have one display with a toggle to change which interpretation you want to give to CV In. For example, if "CV In" is representing a Note, it does not make too much sense to show this value as a Gate... Of course doing this would throw away the current design but may allow more room for CV In 2 :)

Comments?

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

20 Sep 2016

No comments? :)

I am ready for Preview 2 (incorporating some of the feedback I got) but PH build servers are currently not cooperating... Will post as soon as it works again...

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

21 Sep 2016

I guess my only comment is that this is a pretty straight-forward and simple tool. I think it's fine the way it is. Maybe the different parts just need new labels, to clear up the confusion. 1x, 100x and 127x aren't very obvious what they are, exactly. But I can't think of any better names for them. Maybe pulse (1 0 -1), midi (0-127), and percentage(0-100)?

I think you should definitely keep it the way it is with the toggle, though, and don't confuse it by adding more displays at the same time.
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
dioxide
Posts: 1788
Joined: 15 Jul 2015

21 Sep 2016

I think it's great, there is definitely a need for a tool like this in Reason. I don't have suggestions for improvements as I think you have it covered but I'm interested to see what the additions are.

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

21 Sep 2016

Preview 2 is finally here.
Screen Shot 2016-09-21 at 07.30.57.png
CVA-7 Front Preview 2
Screen Shot 2016-09-21 at 07.30.57.png (944.48 KiB) Viewed 1626 times
Here is the list of changes:
* Added scrollbar to navigate in the history/display. As a result, got rid of unnecessary fast/step forward and backward buttons. You can drag the scrollbar left and right (note that clicking in the scrollbar area will automatically pause the display). If you click outside the scrollbar it will move a page at a time (essentially works like most scrollbars do ;).
* Added Zoom Knob to zoom from essentially real time to the entire history. The size of the scrollbar (below the display) represents the amount of history you see at at time. Note that when zooming, the highlighted pixel in pause mode only shows an approximate value since it is made up of more than 1 data point. If you zoom in completely (max) then you get the real value.
* Got rid of the Unipolar/Bipolar buttons as this was confusing (was affecting the display only). But could bring it back easily if there is demand :)

Implementing zoom and (smooth) scroll was definitely quite challenging. I will now work on Preview 3 with other changes coming from the feedback I already got and should be simpler.

I have added a beta license to all the ones that had asked for one in Preview 1. It's available right now. If you want to get one and you were not on this list, simply send me your PH nickname and I will add one for you.

Obviously comments and feedback (and design ;) are more than welcome!

Thanks
Yan

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

21 Sep 2016

I am also looking for Win32 beta tester... During one of my build there was an issue with a Win32 test. Since I am on Mac it is hard for me to reproduce. So if you have a Win32 machine and can test the device that would be very cool.

Thanks!
Yan

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

21 Sep 2016

challism wrote:I guess my only comment is that this is a pretty straight-forward and simple tool. I think it's fine the way it is. Maybe the different parts just need new labels, to clear up the confusion. 1x, 100x and 127x aren't very obvious what they are, exactly. But I can't think of any better names for them. Maybe pulse (1 0 -1), midi (0-127), and percentage(0-100)?

I think you should definitely keep it the way it is with the toggle, though, and don't confuse it by adding more displays at the same time.
I am definitely leaning towards keeping the device as what it is right now: a simple tool to analyze CV in great details without cluttering it with other functionalities (like the ability to change the CV signal at all). With Preview 2 there is certainly space to add invert and bipolar/unipolar cv conversion but then it no longer is an analyzer tool

In regards to the naming confusion, I was thinking changing it to something like: "Numeric Display" with values being:

Internal (because it is what internally the CV signal is being represented in any RE/device and correspond to the former 1x)
Standard (because most displays and knobs use the [-128, 128] scale and it corresponds to the former 128x)
Percent (because it uses the [-100, 100] scale which represent it essentially as a percent value and it corresponds to the former 100x)

What do you think?

WongoTheSane
Moderator
Posts: 1851
Joined: 14 Sep 2015
Location: Paris, France

21 Sep 2016

pongasoft wrote:In regards to the naming confusion, I was thinking changing it to something like: "Numeric Display" with values being:

Internal (because it is what internally the CV signal is being represented in any RE/device and correspond to the former 1x)
Standard (because most displays and knobs use the [-128, 128] scale and it corresponds to the former 128x)
Percent (because it uses the [-100, 100] scale which represent it essentially as a percent value and it corresponds to the former 100x)

What do you think?
I vote for compromise, why not keep both ways of representing the scale?

- Internal [-1...1]
- Standard [-127...127]
- Percent [-100...100]

Zooming around the cursor is super useful!

Also, I'm not sure this is normal:

- Program Thor's sequencer to output notes (whichever, it doesn't matter, we just want CV/Gate signals).
- Connect Thor's Seq Note Output (not Gate!) to CVA-7's CV in.
- Set "Display Type" to 127x.
- Start Thor's sequencer, pause after a while and inspect the note.
- The "CV" value shows a number, while the "Gate" value shows that number plus 1. I expected the same value.
gate-cv.PNG
gate-cv.PNG (57.29 KiB) Viewed 1605 times
Connecting Thor's Gate Output (instead of Note Output) works as expected, the values are the same. I'm not certain that both values are meant to be the same, though, if Gates/Velocities are supposed to be off by 1 then the values are correct (can't remember). I'm under the assumption that the "Gate" value display is the same as "CV" except it's always set to 127x for convenience. Is this correct?

Edit: would it be possible to have a couple of switches to change the color of the main display? Red (as now), Green (as IRL oscilloscope), maybe White (for high contrast) and Blue (for SciFi movies)?

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

21 Sep 2016

WongoTheSane wrote: I vote for compromise, why not keep both ways of representing the scale?

- Internal [-1...1]
- Standard [-127...127]
- Percent [-100...100]
Sounds good (if there is room :). And you are right it is 127 not 128 like I wrote ;)
WongoTheSane wrote:
Zooming around the cursor is super useful!
Sweet! It was very hard to achieve this result! So I am glad it is useful.
WongoTheSane wrote:
Also, I'm not sure this is normal:

- Program Thor's sequencer to output notes (whichever, it doesn't matter, we just want CV/Gate signals).
- Connect Thor's Seq Note Output (not Gate!) to CVA-7's CV in.
- Set "Display Type" to 127x.
- Start Thor's sequencer, pause after a while and inspect the note.
- The "CV" value shows a number, while the "Gate" value shows that number plus 1. I expected the same value.

Connecting Thor's Gate Output (instead of Note Output) works as expected, the values are the same. I'm not certain that both values are meant to be the same, though, if Gates/Velocities are supposed to be off by 1 then the values are correct (can't remember). I'm under the assumption that the "Gate" value display is the same as "CV" except it's always set to 127x for convenience. Is this correct?
Yes I meant to fix this. I will fix it in the next preview.
WongoTheSane wrote:
Edit: would it be possible to have a couple of switches to change the color of the main display? Red (as now), Green (as IRL oscilloscope), maybe White (for high contrast) and Blue (for SciFi movies)?
Great idea. After all there is room :)

Yan

User avatar
Loque
Moderator
Posts: 11187
Joined: 28 Dec 2015

23 Sep 2016

The display scaling is much better now. Great job!
Reason12, Win10

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

23 Sep 2016

Something seems off with the measurements. Specifically, the min value displayed. It should be zero, but it is showing -1. Also, the wave is dipping below the zero line. You can see on Skope that it does not do that. And also, the dispay screen of Ammo shows that the wave doesn't go below zero.
Untitled.jpg
Untitled.jpg (91.3 KiB) Viewed 1577 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

23 Sep 2016

challism wrote:Something seems off with the measurements. Specifically, the min value displayed. It should be zero, but it is showing -1. Also, the wave is dipping below the zero line. You can see on Skope that it does not do that. And also, the dispay screen of Ammo shows that the wave doesn't go below zero.
Untitled.jpg
Have you tried while zooming max (meaning being real time)? The fact that it dips below 0 may be an artifact of the zooming algorithm I am using (I am not saying it is right... I am just trying to understand what the problem could be...)

Also are you sure that the min is not from a long time ago? Unless you reset it, it will remain whatever it was...

Thanks
Yan

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

23 Sep 2016

challism wrote:Something seems off with the measurements. Specifically, the min value displayed. It should be zero, but it is showing -1. Also, the wave is dipping below the zero line. You can see on Skope that it does not do that. And also, the dispay screen of Ammo shows that the wave doesn't go below zero.
Also what are the values if you use 1x in the display scale to see internally what data is being sent?

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

23 Sep 2016

I just finished Preview 3 (and the build servers were up :)

Here it is
Screen Shot 2016-09-23 at 11.57.29.png
Front Preview 3
Screen Shot 2016-09-23 at 11.57.29.png (945.72 KiB) Viewed 1568 times
Screen Shot 2016-09-23 at 11.58.00.png
Auto Reset
Screen Shot 2016-09-23 at 11.58.00.png (88.14 KiB) Viewed 1568 times
Incorporating more feedback and requests, this is what has changed since Preview 2 (version 1.0.0d6):

* "Reset" flashes min/max windows (and act on release vs click, so you can hold reset as long as you want)
* added min/max auto reset. The control is on the back since it's more a configuration parameter of the device itself but open to suggestion. By default it is off and otherwise it represents the number of seconds between resets. I am debating whether I should add one more mode in which min/max represents the min/max in the entire LCD screen (depends on the zoom level). Feedback welcome.
* fixed bug with gate vs cv display... now they should be in sync
* added a color knob which lets you choose a different color for the LCD screen including turning it entirely off if you don't care about it

I have added a beta license to all the ones that had one in the past. Feel free to ask for one if you don't currently have one.

Feedback/Comments welcome.

WongoTheSane
Moderator
Posts: 1851
Joined: 14 Sep 2015
Location: Paris, France

23 Sep 2016

Wow, great!

Auto reset = aww fantastic. I was complaining only recently that the clipping indicators in the SSL didn't have that basic function.

Nice touch having the Numeric Display explanation in balloon help!

About the problem reported by challism, would it be possible to have a switch somewhere to choose how the average is calculated when several values are represented by the same pixel, e.g. either Peak, Min and Mean? (Min being the opposite of Peak, i.e. Peak = Math.Max(values[]) while Min = Math.Min(values[])).

Same problem still (or very similar to challism's): there seems to be some incoherency between the Note and CV displays. Here is how to visualize it:

- Create a Pulsar, set LFO1's level to max (so you get a sine going from 1 to -1).
- Plug Pulsar's LFO1 output to CVA.
- Make sure Zoom is at max value.
- Pause when you see the top of the curve.
- Slowly (pixel by pixel) scrub the main display.
test.gif
test.gif (146.53 KiB) Viewed 1558 times
You can see that both 127 and 126 are mapped to G8, both 126 and 125 are mapped to F#8, etc. Maybe some rounding error, like Ceiling instead of Floor, or something like that? This happens both in "Percent" and "Standard" modes.

Thanks for the colors! :) I've noticed you change the color of the scroll bar as well; what about the piano notes? (totally unnecessary obviously, just a fun thought).

Are you planning Remote Overrides (probably useful, I seldom use them but many people do) and Automation (probably completely useless but can turn CVA into a Disco Ball by modulating the Color knob :D )?

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

24 Sep 2016

WongoTheSane wrote:Wow, great!

Auto reset = aww fantastic. I was complaining only recently that the clipping indicators in the SSL didn't have that basic function.

Nice touch having the Numeric Display explanation in balloon help!
Thanks for the feedback!
WongoTheSane wrote:About the problem reported by challism, would it be possible to have a switch somewhere to choose how the average is calculated when several values are represented by the same pixel, e.g. either Peak, Min and Mean? (Min being the opposite of Peak, i.e. Peak = Math.Max(values[]) while Min = Math.Min(values[])).
I will investigate having multiple algorithm for zooming. I don't think it will be too hard.
WongoTheSane wrote: Same problem still (or very similar to challism's): there seems to be some incoherency between the Note and CV displays. Here is how to visualize it:

- Create a Pulsar, set LFO1's level to max (so you get a sine going from 1 to -1).
- Plug Pulsar's LFO1 output to CVA.
- Make sure Zoom is at max value.
- Pause when you see the top of the curve.
- Slowly (pixel by pixel) scrub the main display.

You can see that both 127 and 126 are mapped to G8, both 126 and 125 are mapped to F#8, etc. Maybe some rounding error, like Ceiling instead of Floor, or something like that? This happens both in "Percent" and "Standard" modes.
This is not exactly the same problem. Now the CV & Gate windows show the exact same value when numeric display is set to standard. The math to compute the key and the math to convert CV to the 127 scale is different. If you set the numeric display to Internal you can understand why:

when CV = 0.9904 Note = (int) (0.9904 * 127 + 0.1) = (int) (125.8808) = 125 => F8, Gate = int(0.9904*127) = int(125.7808) = 125
when CV = 0.9920 Note = (int) (0.9920 * 127 + 0.1) = (int) (126.084) = 126 => F#8, Gate = int(0.9904*127) = int(125.984) = 125

As I mentioned in a previous post, what matter is how the "Internal" CV value gets interpreted. In the case of Note, there is a very well defined (albeit odd) formula to interpret CV as a Note that everybody is following for obvious reasons: F8 is not F#8. For everything else, including Gate, it's pretty much open to interpretation. So I kind of followed the example given with the SDK. Whether you interpret the value as 125 or 126 will not make a difference for Gate. No matter how the rounding is done for Gate, because of this odd formula with Note which adds 0.1 after the fact, there will always be discrepancy at some point. I guess you never noticed because no RE has ever shown you CV this way :)


WongoTheSane wrote: Thanks for the colors! :) I've noticed you change the color of the scroll bar as well; what about the piano notes? (totally unnecessary obviously, just a fun thought).
I thought about it. At this moment the piano notes are really painted so it would be fairly trivial to change their colors (although white might be a bit challenging...). I don't think that in the final design the keyboard will be rendered this way and so I won't be able to change the colors anymore.
WongoTheSane wrote: Are you planning Remote Overrides (probably useful, I seldom use them but many people do) and Automation (probably completely useless but can turn CVA into a Disco Ball by modulating the Color knob :D )?
I was definitely not planning automation :) as there is really nothing to automate since the device does not modify its input. I think it's fairly easy to add Remote Overrides so if there is a need I can add it (for reset and zoom).

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

24 Sep 2016

I had clicked the reset button, yes. And it doesn't seem to be the zoom causing the problem. I am getting the same results whether it's zoomed in or out. It's also doing it with Pulsar. I have it set to a pulse wave, for instance. And it should be showing equal 12 max and -12 min, right? But it isn't. It's showing 12 max and -13 min. So the min value seems to be showing one below what it actually is.

And here is something I discovered, and it may have something to do with this issue: if you run notes into it, the gate should be the same as the CV, min and max numbers. For example, in 127x mode, if you run an A0 note, it shows up as gate 032, CV 032, min 032 and max 032. That makes sense, is expected and seems correct. But if you run run a G2, it shows the gate is 055 but CV, min and max are all showing 054. This shift seems to happen for anything that is C3 and above.
untitled.jpg
untitled.jpg (136.12 KiB) Viewed 1547 times

Regarding my original report and the picture I posted previously: I went back and tested with Ammo (to answer your question about 1x mode) and that mode is actually reading cv -0.0000, min -0.0000, max 0.8752. Notice the tiny difference in the line where the cursor is? It should be a straight line, but it goes down a bit. IT should be a straight line with a 0 value. The left side is showing 0.0 and the right side (after it drops a tiny bit) is showing -0.0. That's kind of weird.
FYI, 127x mode is showing cv -01, min -01, max 111.
untitled.jpg
untitled.jpg (92.86 KiB) Viewed 1545 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

24 Sep 2016

Can you try with Preview 3 (1.0.0d6) as I addressed an issue with Gate/CV not being consistent (it should fix your first issue)?

Do you have a way to reproduce this not straight line with Pulsar? I do not have ammo... ;)

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

24 Sep 2016

The problem with trying to reproduce the same straight line with Pulsar is that Pulsar doesn't have a wave form that just goes to zero and returns up or down (negative or positive values). Anyway, I ran the same test with some other LFOs (Little LFO, Malstrom, Thor, Subractor and Robotic Bean's Compare to shift the LFO up a notch, which produced a strange result between the two instances of CVA-7). The problem seems to be gone with Malstrom, but is still there with the other LFOs I tested.

The issue with the notes above C3 seems to be fixed now. All the notes above C3 are now showing up as they should (with CV, max and min all being the same number as the gate).

Pulsar still showing -16 min to 15 max, when it should be -15 to 15
Untitled.jpg
Untitled.jpg (136.99 KiB) Viewed 1522 times
Ammo still showing -1 min, when it should be at 0
Untitled2.jpg
Untitled2.jpg (140.29 KiB) Viewed 1522 times
Notice the different "min" values on this one? Strange behavior when Compare shifted the LFO up .01 notch.
Untitled3.jpg
Untitled3.jpg (181.24 KiB) Viewed 1522 times
Last edited by challism on 24 Sep 2016, edited 1 time in total.
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

24 Sep 2016

Malstrom is showing 0 for min value, which is what I expect to see from all the other LFO.
Untitled4.jpg
Untitled4.jpg (188.04 KiB) Viewed 1520 times
Another shot of Malstrom with a different waveform. Working as expected.
Untitled5.jpg
Untitled5.jpg (190.65 KiB) Viewed 1520 times
Little LFO is showing different values from min/max, when they should be the same.
Untitled6.jpg
Untitled6.jpg (135.33 KiB) Viewed 1520 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

24 Sep 2016

Pulsar's min/max aren't showing as expected, either.
Untitled7.jpg
Untitled7.jpg (120.72 KiB) Viewed 1520 times
Subractor is off, too. Max should be 127 and 100, but is showing as 126 and 99, for the two different display modes.
Untitled8.jpg
Untitled8.jpg (121.24 KiB) Viewed 1520 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
challism
Moderator
Posts: 4659
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

24 Sep 2016

And finally, Thor. This one is weird. The triangle wave is showing to be off by one, as most of the rest of these.
Untitled9.jpg
Untitled9.jpg (164.17 KiB) Viewed 1520 times
But the pulse wave in Percentage mode is showing to be displaying correctly, while the Standard mode is displaying off one. Strange behavior.
Untitled10.jpg
Untitled10.jpg (164.96 KiB) Viewed 1520 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

User avatar
Loque
Moderator
Posts: 11187
Joined: 28 Dec 2015

25 Sep 2016

Excellent testing here!
Reason12, Win10

User avatar
dioxide
Posts: 1788
Joined: 15 Jul 2015

25 Sep 2016

In the case of Ammo, perhaps you could record the waveform as audio using some kind of CV to audio so that Pongasoft can examine this without actually having the Ammo RE? Just a thought.

User avatar
pongasoft
RE Developer
Posts: 478
Joined: 21 Apr 2016
Location: Las Vegas
Contact:

25 Sep 2016

Thanks for all the testing. What would be very useful is that you give the Internal version of the numbers that you believe are incorrect.

So for example when you say "Subractor is off, too. Max should be 127 and 100, but is showing as 126 and 99, for the two different display modes", can you provide the Internal versions of 126 and 99? Please provide both number (Standard and Internal).

As I described previously the issue is that internally I do not get 126 or 99, I get the Internal version [-1...1] (and so does every other device). So I am trying to figure out if my "interpretation" of Standard is not right. Or if there is some other issue. For example when you are zooming out, one pixel on the LCD screen can correspond to many samples. At this time I am computing the average to determine the value which is one way of doing it, but it also means that the value you read is not the actual value. Only when zoom is max will you get the real value. As suggested, I am working on some other algorithm for computing the zoomed out value, but no matter the algorithm, zooming out is lossy since one pixel = many samples, so there is no "right" or "wrong" way to determine the actual value of the pixel.

In Preview3, I use this formula which is based on PH SDK examples: Standard = math.floor(Internal * 127) which means that unless Internal = 1.0 you will never see 127. An internal value of 0.9999 would result in 126. I could try to switch to math.round(Internal * 127).

Since none of the device you compare with show internal value it is hard to compare since they themselves interpret the internal value for display.

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 17 guests