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:

29 Sep 2016

challism wrote:Since you aren't hurting for space on the front and the device isn't crowded, why not move the reset duration knob and cv trim knobs to the front? Might as well have all the controls on the front for convenience. And knobs on the back are easy to forget about.
I can move the reset duration knob to the front (will make sure with the final design) but cv trim is not allowed by the SDK to be on the front.

Dcook18
Posts: 15
Joined: 14 Apr 2016

29 Sep 2016

Looks very cool

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

30 Sep 2016

pongasoft wrote:
challism wrote:Since you aren't hurting for space on the front and the device isn't crowded, why not move the reset duration knob and cv trim knobs to the front? Might as well have all the controls on the front for convenience. And knobs on the back are easy to forget about.
I can move the reset duration knob to the front (will make sure with the final design) but cv trim is not allowed by the SDK to be on the front.
Ah, CV trim.... the same thing that's on the back of pretty much all the devices... gotcha. I guess I didn't put 2 and 2 together on that one.

But I think the reset duration knob would be much more useful on the front.
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:

30 Sep 2016

Ok I will move it (+ a few surprises... ;)

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

01 Oct 2016

Preview 5 is out! (1.0.0d9)

Here are the changes:

* moved auto reset knob to the front (I know it's in the LCD controls section which is wrong...)
* added automation for every control (yes even color ;). It works for the scrollbar, the selection point, etc... You need to add a track for the device and select the automation in the little menu
* added remote override for every control (some of the controls require the Edit override menu as you cannot right click on the LCD for example)
* fixed reset not working (sorry about that)
* and finally icing on the cake: now there are 4 CV thru each of them being configurable to be standard (=cvin), inverse, unipolar or bipolar!

This is what automation looks like:
Screen Shot 2016-10-01 at 08.07.58.png
Automation
Screen Shot 2016-10-01 at 08.07.58.png (421.86 KiB) Viewed 2251 times
This is what CV Thru looks like:
Screen Shot 2016-10-01 at 08.09.27.png
CV thru
Screen Shot 2016-10-01 at 08.09.27.png (38.87 KiB) Viewed 2251 times
I have added beta license to everyone who requested it

Thanks
Yan

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

01 Oct 2016

Fantastic. I've just tried chaining several CVAs, successively inverting/unipolaring(?)/bipolaring the signal: whatever the length of the chain, the conversions are always correct, down to the last decimal. Are you going to rename it CVAaPC (CV Analyzer and Polarity Converter)? :lol:

Being able to control several CVAs controls through a combi is great!! You can pause all devices and check how the signal is transformed, step by step, very powerful (and also helps immensely with the debug).

The logo looks soooo much better on a black background (sorry for random thought order, I'm trying to not forget anything).

Now I feel stupid, I didn't know you were going to add polarity conversion: CV Thru isn't technically Thru anymore (MIDI Thru meant that it was echoing the input signal without any kind of transformation). Now it's a CV Out, with the first option on the top (and only this one) being Thru. So I would rename the whole block as "CV Out" as it was previously, and the current "Standard" as either "Thru" or "Passthrough" (english not being my first language, I'm not sure which one fits better. Challism, would love for you to chime in on this). Bear in mind this is hair-splitting at its finest as absolutely no one will ever notice this :)

Remote override is great as well! Very convenient.

A very small detail: the CV Thru plugs are not exactly aligned with the CV In one (they're a couple of pixels too high). Also, the space between "CV In" and the plug below is smaller than the space between"1 2 3 4" and the plugs below. Probably not your concern right now, I guess you'll do all design tasks at once?

Are you planning a manual at all? If you are, we can help as well!

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

01 Oct 2016

This is just a preview so not at all the final look and feel. So the fact that the CV are not aligned will definitely be fixed in the final design. And I agree with you about the naming for CV Out/Thru!

That being said I think this is done from a feature point of view!

Thanks for the offer for the manual but I should be able to do it. I will definitely ask if I get stuck :)

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

03 Oct 2016

In regards to conversion between Internal value and standard, I have been experimenting with Revolver CV (which is no longer available, but I do have it) and I have noticed that the formula used by this RE is the following: round(internal * 127). Or in other words

if internal is 0.9962 then internal * 127 = 126.5174 => 127
if internal is 0.9959 then internal * 127 = 126.4793 => 126

which is different from the formula I am using floor(internal * 128) (clamped at 127)

As I have pointed out several times, there is not "right" or "wrong" formula to convert from the internal value to what I am calling "standard" as it is obvious that every RE will always get the same internal value, but is free to interpret it the way they want. The only time when there is a standard is to convert to Note (for obvious reasons...).

So I am not too sure what to do. When you compare my device to Revolver, they don't display the same value (when using Standard). On the other end, I also think that displaying -1 when the internal value is -0.0001 is a bit odd (which is what my device currently does).

Any comments? Feedback?

Thanks

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

03 Oct 2016

The most "fair" method I can think of would be to split the space [-1.0, 1.0] in 255 slots of equal size which means the formula is

(for positive numbers):

Code: Select all

ceil(((abs(internal) * 255) - 1) / 2)
which has the nice property of being symmetric around 0. But I am not sure it qualifies as "standard"...

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

03 Oct 2016

I tried the new formula (from https://www.reasontalk.com/posting.php? ... 0#pr285668) and hooked up a Thor to CVA-7 using CV Output 1 and the mapping Rotary 1 -> 100 -> CV Out 1

The rotary varies from 0 to 127 and CVA-7 followed perfectly for all positions which I guess is good news :)
Screen Shot 2016-10-03 at 11.02.29.png
Thor connected
Screen Shot 2016-10-03 at 11.02.29.png (168.73 KiB) Viewed 2207 times
PS: Preview 5 does NOT contain this formula...

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

03 Oct 2016

If Revolver is indeed using this formula, the result should be wrong at the other end of the range:

if internal == -1 then internal * 127 = -127 => -127

So they have a "hole" in the negative range (it would be interesting if you could check this on your end as I don't have Revolver, how does it show negative values around -127/-128?). It is very possible they use two different formulas for negative and positive though (swapping floor for ceiling for instance).

I agree with you it's a matter of choice on the programmer, but this particular formula has one inherent problem (IMHO): the two extreme values are not represented by a range (the same size as for other values), but only by a limit. So I wondered how PH themselves handle it, and did this test:

- Pulsar plugged into CVA showing Internal.
- The interpreted "Standard" values are shown on the "Level" knob on Pulsar in the popup help.
- Go to 99% level on Pulsar.
- Now press shift and very slllooowwwly turn the knob clockwise.
- The first time Pulsar shows "100%", the internal value is 0.9894.
- I can still move it clockwise one more step: Pulsar still shows 100%, but the internal value is now 1.0000.

So they do have the standard value "100" mapped to a range of reals, and not just the exact value 1.0. To me, that excludes the *127 bit in the formula.

I expect their mapping to be 2/256 for each standard step (i.e. the full range from -1 to 1 divided in 256 equal sections).

I'm not worried about the fact that -0.0001 translates to -1, after all the positive range goes from 0 to 127 so anything below zero cannot be positive (it would be if the range had an odd number of steps).

But you're right that there's something wrong with the floor function in the current formula for negative values. How about this one:

double _rangeMapping = 2.0/256.0; /* 0.0078125 */
if (internal < 0) then standard = ceiling(internal/_rangeMapping)
else standard = floor(internal/_rangeMapping);
if (standard == 128) standard --;

I've just mapped this (on Excel, because lazy) for all values between -1 and 1 with a .001 step, and it works quite well:

- All integer standard values are mapped to 8 real internal values (so the physical range on the knob will be the same for all values)
- All "round" values match (i.e. natural -0.7500 maps to standard -96, -0.5000 maps to -64, 0.0000 maps to 0, 0.5000 maps to 64, etc)
- The upper limit still must be clamped to 127 (no need for the lower one)
- Swapping floor for ceiling for negative values makes sense, numerically.

I'm still amazed that the formula round(internal*127) is in PH's samples, but it might be given for positive stepped values (as opposed to bipolar continuous values) on one hand, and for saving cycles when it doesn't have to be precise (you're saving two "if" and a subtraction, so three cycles per iteration, that can add up quickly in Reason's context) on the other. But in CVA's case, I would argue this quick'n'dirty method doesn't quite fit.

I rest my case, your honor :lol:

Edit: I wrote this before your last two messages, I'll check after diner!

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

03 Oct 2016

WongoTheSane wrote:
I expect their mapping to be 2/256 for each standard step (i.e. the full range from -1 to 1 divided in 256 equal sections).
Unless I am mistaken, there are 255 values not 256 ([0,127] = 128 positive values, [-1,-127] = 127 negative values). The formula I used

Code: Select all

sign(internal) * [ceil(((abs(internal) * 255) - 1) / 2)]
divides the entire space in exactly 255 slices each of the same dimension (2/255).

This is why I called this formula "fair". But it is true that -.0001 will be treated as 0 not -1 which could be view as a bug or a feature :)

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

03 Oct 2016

pongasoft wrote:
WongoTheSane wrote:
I expect their mapping to be 2/256 for each standard step (i.e. the full range from -1 to 1 divided in 256 equal sections).
Unless I am mistaken, there are 255 values not 256 ([0,127] = 128 positive values, [-1,-127] = 127 negative values). The formula I used

Code: Select all

sign(internal) * [ceil(((abs(internal) * 255) - 1) / 2)]
divides the entire space in exactly 255 slices each of the same dimension (2/255).

This is why I called this formula "fair". But it is true that -.0001 will be treated as 0 not -1 which could be view as a bug or a feature :)
Er...All right, I see where I was wrong: I assumed it would be logical for the standard value to follow the signed byte range (-128...127, with 256 values because power of 2), whereas it's an arbitrary range going from -127 to 127 as you noted (with 255 values only). I thought I had seen devices going down to -128 but now I think I was just remembering CVA's preview 3, I checked other devices and the range starts at -127 indeed :duh: :slapsforehead:

So I recant: everything I wrote above is wrong, because based on a stupid assumption. :(

I've just tested your formula in c# and it works perfectly! The two upper and lower values are proper ranges the same size as the other ones, round values (-0.75, -0.5, 0.25...) map to round values (-96, -64, 32...), no clamping necessary, I think you found the absolute best solution!

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

03 Oct 2016

Sorry for my absence... I've been pretty busy with life/work the past few days.

It's nice to see the reset knob on the front.
I would agree that naming the cv out is appropriate and accurate, if the signal has been changed.

That's all the time I have right now.... gotta run to work really fast :/
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:

04 Oct 2016

I have released Preview6 (1.0.0d11).

I have added a Debug toggle on the back of the rack to switch between 4 algorithms for interpreting the internal value into the standard value (the algo used is described in the pop up ;).

Attaching a file (if you are interested) that shows the difference between the 4 algos.
cv_algos.csv
(67.45 KiB) Downloaded 91 times
This way you can experiment with each algo and see which one fits the best.

Note that algo #4 (Trunc N) is the one given as an example of computing the gate value in one of the sample projects in the SDK. It seems to be giving the worst result overall though :)


Yan

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

04 Oct 2016

Equal Divide seems much better than the rest, doesn't it? The others have problems at various points of the scale: Round's two extreme values have half the span, Trunc N1 has twice at -127, and Trunc is skewed towards positive values by 0.5. I have tried casting to int as well but it has the same problems (maybe it's your Trunc N1?).

AAaaand I have another request. Sorry :(

Currently, the internal values are clamped to [-1...+1]. Would it be possible to have an option/switch to unclamp them and display values that are above 1.0 or below -1.0? I wouldn't mind the graphic staying scaled to -1...+1, maybe showing the clipping through color:
clipping.PNG
clipping.PNG (9.74 KiB) Viewed 2163 times
Going outside -1...+1 can happen if you add several CV signals with the CV Merger before scaling down the result for instance. So that would be useful!

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

04 Oct 2016

WongoTheSane wrote:Equal Divide seems much better than the rest, doesn't it? The others have problems at various points of the scale: Round's two extreme values have half the span, Trunc N1 has twice at -127, and Trunc is skewed towards positive values by 0.5. I have tried casting to int as well but it has the same problems (maybe it's your Trunc N1?).

AAaaand I have another request. Sorry :(

Currently, the internal values are clamped to [-1...+1]. Would it be possible to have an option/switch to unclamp them and display values that are above 1.0 or below -1.0? I wouldn't mind the graphic staying scaled to -1...+1, maybe showing the clipping through color:

Going outside -1...+1 can happen if you add several CV signals with the CV Merger before scaling down the result for instance. So that would be useful!
I will investigate... ;)

TheGuyNotNamedBob
Posts: 150
Joined: 28 May 2016

04 Oct 2016

Maybe this is just Newbish naivety, but why is the display tripping out when I zoom in? If you take subtractor, and put the LFO on a square wave, and zoom out to about 21+, and the display starts tripping out.

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

04 Oct 2016

TheGuyNotNamedBob wrote:Maybe this is just Newbish naivety, but why is the display tripping out when I zoom in? If you take subtractor, and put the LFO on a square wave, and zoom out to about 21+, and the display starts tripping out.
Because the more you zoom out and the more samples are represented by a single dot on the screen. Since the average is computed, depending on the wave, it starts to not make too much sense anymore (ex: +1 -1 averaged will be 0...) If somebody has a zoom algorithm that preserves the original shape I would take but at some point I am not sure how it's possible (if you zoom out with google earth there is a point where you don't really see roads and/or individual buildings...)

TheGuyNotNamedBob
Posts: 150
Joined: 28 May 2016

05 Oct 2016

pongasoft wrote:
TheGuyNotNamedBob wrote:Maybe this is just Newbish naivety, but why is the display tripping out when I zoom in? If you take subtractor, and put the LFO on a square wave, and zoom out to about 21+, and the display starts tripping out.
Because the more you zoom out and the more samples are represented by a single dot on the screen. Since the average is computed, depending on the wave, it starts to not make too much sense anymore (ex: +1 -1 averaged will be 0...) If somebody has a zoom algorithm that preserves the original shape I would take but at some point I am not sure how it's possible (if you zoom out with google earth there is a point where you don't really see roads and/or individual buildings...)
Thanks. That clears things up. :)

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

05 Oct 2016

WongoTheSane wrote:Equal Divide seems much better than the rest, doesn't it?
I haven't had a chance to try this new version out yet (very deeply), but going off what Wongo said, perhaps it would be a good idea to make "equal divide" the default position of that toggle. I like the looks of the back of the device with all the different outputs and toggles. Looks interesting, and a bit confusing, actually. The words are pretty hard to read. Maybe you could use some different colors, and put an outline around the words to help clarify them?
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:

06 Oct 2016

challism wrote:
WongoTheSane wrote:Equal Divide seems much better than the rest, doesn't it?
I haven't had a chance to try this new version out yet (very deeply), but going off what Wongo said, perhaps it would be a good idea to make "equal divide" the default position of that toggle. I like the looks of the back of the device with all the different outputs and toggles. Looks interesting, and a bit confusing, actually. The words are pretty hard to read. Maybe you could use some different colors, and put an outline around the words to help clarify them?
This toggle won't exist in the final device. It's just here for debug so that it is easier to compare various ways of computing the number. And also this is not the final design. This is a the prototype, so both the front and back will change when it's done.

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

06 Oct 2016

Preview 7 (1.0.0d12) is now live for beta testers.

Changes thanks to the last feedback (@WongoTheSane)
* since the main purpose of the device is to analyze CV, constraining it to [-1,+1] range was not a good thing. As a result I now support the full range of CV [-10000, 10000] while emphasizing the [-1, 1] range. This will cover use cases when the CV signal is a little outside the main range (ex: if you convert a bipolar signal into a bipolar signal... you end up extending the range to -3.0). Note that the full range is supported only in "Internal" mode for numeric display while "Standard" and "Percent" remain clamped at their respective ranges (not sure it makes a lot of sense to extend this).
* the lcd screen now handles clipping (you can still select a clipped value and "see" it's actual value in the CV display)
* added a "Scale" knob which lets you zoom the LCD screen the other direction (Y axis) for the cases when you have clipping but you are still interested to see the shape of the signal

Here is what it looks like in action (need to learn this gif maker thingy :):
* note how the numeric displays go beyond [-1,1] range
* note the clipping on the LCD screens as well as scale
Screen Shot 2016-10-06 at 07.05.54.png
Screen Shot 2016-10-06 at 07.05.54.png (453.51 KiB) Viewed 2098 times

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

06 Oct 2016

Oh that's very very interesting. I need more time with it but right off the bat:

- Nice touch with the number of digits, quite smart (#decimal digits = 6 - #int digits).

- "Scale" is great, I'm not bothered at all by the fact it's limited to [-100...100]. Honestly, I would have been happy with [-10...10], and I have a hard time figuring a case where I would need more (well, probably when multiplying exponential scales or such, but I don't do that every day).

- Keeping the clamping on the Percent and Standard scales makes perfect sense.

- There's a small problem with the clipping colors, or rather two. I think the first one isn't from you, but due to graphic aliasing:
aliasing.PNG
aliasing.PNG (48.56 KiB) Viewed 2080 times
Although I'm not 100% sure because it changes when moving the zoom knob (I was playing with a [-256...256] signal). Notice the fact the vertical lines are the same color as the clipping color.

The second one is the clipping color itself: it's not very visible with the red setting and almost invisible with the other colors. I would choose a solid red for all non-red colors, because if (danger == red) & (clipping == danger) then (clipping = red), and for the red I would choose the most contrasted color in the context (red on black), which would be white. Or change the default red to magenta (or another cold color), which would save the red for clipping indication overall.

Out of curiosity, is it possible for a device to install a refill in the default "Rack Extensions" folder in the Browser, even if that device doesn't save/load patches itself? I'm asking because I just realised you could still provide patches including CVA by using combinators (to give usage/fun examples for instance).

Here's an example:
fractalizer.PNG
fractalizer.PNG (609.91 KiB) Viewed 2080 times
- First CVA shows the output of Pulsar's LFO1.
- The same LFO is sent to the second CVA.
- Pulsar's LFO2 is sent to the combi's CV1, and programmed to automate the Play/Pause button of the second CVA (told you I would find a legit use for that! :D)
- The third CVA shows the output of the second CVA's Aux CV out.

It kind of fractalizes the sine into a random moutain shape, and the effect can be modulated by changing Pulsar's LFO2 rate. In case anyone wants to try:
Fractalizer.zip
(1.66 KiB) Downloaded 88 times
(warning: it's just a visual demo, I haven't plugged the output into any synth so it doesn't produce any sound yet; also I think this patch will only work with preview 7).

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

06 Oct 2016

WongoTheSane wrote: Although I'm not 100% sure because it changes when moving the zoom knob (I was playing with a [-256...256] signal). Notice the fact the vertical lines are the same color as the clipping color.
This looks like a bug. If you have a way to reproduce I would take it.
WongoTheSane wrote: The second one is the clipping color itself: it's not very visible with the red setting and almost invisible with the other colors. I would choose a solid red for all non-red colors, because if (danger == red) & (clipping == danger) then (clipping = red), and for the red I would choose the most contrasted color in the context (red on black), which would be white. Or change the default red to magenta (or another cold color), which would save the red for clipping indication overall.
I tried really hard with the colors. I think the issue is that although I am painting lines with a solid color (no alpha!), with a regular line full red and a clipping line full white, the end result is a mix of the 2 colors most likely due to anti aliasing in the drawing calls (which unfortunately I have no control over :( ). I will play with it more to see if I can get better results.
WongoTheSane wrote: Out of curiosity, is it possible for a device to install a refill in the default "Rack Extensions" folder in the Browser, even if that device doesn't save/load patches itself? I'm asking because I just realised you could still provide patches including CVA by using combinators (to give usage/fun examples for instance).
I actually have no idea but will eventually investigate (most likely after 1.0 release).
WongoTheSane wrote: Here's an example:

fractalizer.PNG

- First CVA shows the output of Pulsar's LFO1.
- The same LFO is sent to the second CVA.
- Pulsar's LFO2 is sent to the combi's CV1, and programmed to automate the Play/Pause button of the second CVA (told you I would find a legit use for that! :D)
- The third CVA shows the output of the second CVA's Aux CV out.

It kind of fractalizes the sine into a random moutain shape, and the effect can be modulated by changing Pulsar's LFO2 rate. In case anyone wants to try:

Fractalizer.zip

(warning: it's just a visual demo, I haven't plugged the output into any synth so it doesn't produce any sound yet; also I think this patch will only work with preview 7).
[/quote]

Neat :)

Yan

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 34 guests