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
challism
Moderator
Posts: 4653
Joined: 17 Jan 2015
Location: Fanboy Shill, Boomertown

25 Sep 2016

Ugh! So all that testing and screen shooting was a waste of time. I don't know why I didn't just add a 3rd instance and show the internal values as well.

As far as what I am saying is incorrect... Subtractor, for instance, shouldn't the max be 100 (percentage) and 127 (standard), instead of what it is showing, 99 and 126? Because the LFO is going from -100 to 100, but it is only showing that it goes to 99 (percentage). Same thing for standard mode. It goes from -127 to 127, but the display shows a max value of 126.

I'll do some more testing and get back to you with the internal numbers.

BTW, I tested Synchronous, too. It's working correctly with Synchronous. Maybe because there aren't any negative values?
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

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

25 Sep 2016

pongasoft wrote: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.
Following Challism's impressive sleuthing, I've tried this:
cv8x4.PNG
cv8x4.PNG (255.33 KiB) Viewed 1705 times
An instance of CV8X4 is plugged into two serial CVA-7, then into a CV (note) Input on a Subtractor (the gate being provided by a Redrum, so I can hear the notes themselves).

Almost at the top of the CV curve, CV8X4 shows 127 when CVA-7 shows 126, for a 0.9981 internal value. This got me thinking:

- With the formula math.floor(internal*127), each "slice" of standard CV represents a slice of 1/127th of internal CV, and the 128th slice is only represented by a slice being the exact value 1.0, which isn't logical (the last slice isn't the same size as the rest).
- I then thought each slice should be 1/128th of the standard scale, so math.floor(internal*128).
- It raises a problem with the standard value 1.0, which with this formula would amount to 128.
- Solution: clamp! This shouldn't be a problem as the upper limit is indeed only a limit and doesn't have a "width" per se.

So in the end, I think CV8X4 is doing this:

math.min(127, math.floor(internal*128))

So each slice in the Standard scale has a span of 0.0078 in the Internal scale, including the last one.

That's only for the standard/percent CV displays, as right now the Note conversion is correct (from what I can see).

I'm not saying either formula is wrong, but I think what Challism is seeing is the effect of two different formulas giving a different result. Instinctively, I would say your formula works better for stepped ranges, while the other would work better for continuous ones.

It might also be the cause of this:
126.PNG
126.PNG (40.08 KiB) Viewed 1705 times
It's the default Subtractor's LFO1 Out plugged into CVA-7: the Max value in Standard mode never reaches 127, while it does reach 1.0000 in Internal mode.

pongasoft wrote: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 :)
I didn't know about the +0.1, I stand corrected. Thanks for the explanation!

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

25 Sep 2016

Oh, and I forgot to say this...
pongasoft wrote:I guess you never noticed because no RE has ever shown you CV this way :)
Spot on. This device is, rather unexpectedly (*), extremely useful and informative. Same as VAC-6: at first glance, it looks like "just another way to visualize the same thing", but you soon realize it's completely original, incredibly useful, and doesn't duplicate any other tool. A couple of days ago I found a track that was blowing up my levels with too much low end thanks to VAC-6, which I hadn't found with the default tools (SSL indicators and spectrum analyser). Big thanks for that!

(*) I'm saying "rather unexpectedly" because I use Lectric Panda's tools an awful lot, love them and couldn't do without (Skope and Spektrum particularly); when I saw CVA-7, I thought "what can it do that Skope doesn't?", but quickly realized that they are completely different beasts and don't even overlap. Hence my unexpectations :lol:

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

25 Sep 2016

WongoTheSane wrote:Oh, and I forgot to say this...
pongasoft wrote:I guess you never noticed because no RE has ever shown you CV this way :)
Spot on. This device is, rather unexpectedly (*), extremely useful and informative. Same as VAC-6: at first glance, it looks like "just another way to visualize the same thing", but you soon realize it's completely original, incredibly useful, and doesn't duplicate any other tool. A couple of days ago I found a track that was blowing up my levels with too much low end thanks to VAC-6, which I hadn't found with the default tools (SSL indicators and spectrum analyser). Big thanks for that!

(*) I'm saying "rather unexpectedly" because I use Lectric Panda's tools an awful lot, love them and couldn't do without (Skope and Spektrum particularly); when I saw CVA-7, I thought "what can it do that Skope doesn't?", but quickly realized that they are completely different beasts and don't even overlap. Hence my unexpectations :lol:
Thank you so much for that. I usually develop RE because I actually have a need for it that no other RE helps with.

For VAC-6 my initial need was to be able to "flag" (orange color) when my level goes beyond -6dB (wanted to leave headroom for professional mastering which I don't do). I could not find anything that would let me do that and in a way that was actually useful to me.

For A/B switch, I needed to compare several masterings instantly. Again no other device let you switch instantly with just one click (+ as my first RE that was a good learning tool since at the end of the day it's kind of a big IF statement...)

For CVA-7, I needed to see CV very precisely (because I have an idea for another CV tool so essentially CVA-7 will be my debugging tool... which I will reveal in time ;)

I am definitely a tools guy... Synth and all that are cool, but tools can be indispensable. When you have the right tool, it makes all the difference. It's kind of killing me right now when I read the thread about people trying to convert unipolar <-> bipolar. It's such an easy tool to write and yet without it, it's really hard to do. If only the SDK were allowing me to do half rack ;)

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

26 Sep 2016

SONG FILE ATTACHED so you guys can play with it yourselves, and see my results.

OK, with my examples shown previously, the "internal" numbers seem to be correct. Much like Wongo was saying. There seem to be a problem with the conversion to the max value. It needs to have a +1 added to it, I think.

Pulsar (pulse wave)
internal 0.1250/-0.1250 (correct)
standard 015/-16 (should be min -15, right?)
Pulsar - ran it again with a different Pulsar (pulse wave again)
internal 0.4487/-0.4488 (should be min -0.4487, right?)
WEIRD that I am getting different results with Pulsar (same wave form) ????

Thor (pulse wave)
internal 0.5000/-0.5000 (correct)
standard 063/-64 (should be min -63, right?)

Synchronous (straight line)
internal -0.6154 the entire time (correct)
standard -79 (correct)

Ammo (step wave from zero up)
internal 0.8752/-0.000 (correct)
standard 111/-01 (should be min zero, right?)
Ammo (pulse)
internal 0.8752/-0.8752 (correct)
standard 111/-112 (should be min -111, right?)

Little LFO (pulse wave)
internal 0.5894/-0.5894 (correct) this one is actually acting kind of weird. It takes a long time for the min/max values to reach a point of inverted equality (for lack of a better phrase). I think this might be an issue with Little LFO not putting out a very reliable LFO.... there appear to be a lot of artifacts which are causing a fluctuating signal. See picture below.
standard 074/-75 (should be min -74, right?)

Malstrom (step from zero up)
internal 1.0000/0.0000 (correct)
standard 127/0 (correct)
percent 100/0 (correct)
Malstrom (pulse)
internal 1.0000/-1.0000 (correct)
standard 127/-127 (correct)
percent 100/-100 (correct)

Subtractor (triangle)
internal 1.0000/-1.0000 (correct). This one is acting a lot like Little LFO, in that it is taking a while for the values to reach their appropriate measurement. If I hit the rest button, it takes a few seconds of the LFO running through it's cycle to finally show the right value. Weird.
standard 126/-127 (should be max 127, right?) Also notice how this is different than the rest, in that the MAX is the one that is off by one, not the MIN. Isn't that odd?
Subtractor (pulse)
internal 1.0000/-1.0000 (correct). The pulse isn't behaving strangely after I hit reset. It immediately went to 1/-1.
standard 127/-127 (correct). So the pulse wave is correct, but the triangle is incorrect. Weird.

Notice how the graph shows some artifacts? Maybe that is causing the weird result with Little LFO and Subtractor. IE, maybe it's not an issue with CVA-7.
littlelfo.jpg
littlelfo.jpg (161.12 KiB) Viewed 1687 times
CVA-7.zip
(132.04 KiB) Downloaded 49 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:

26 Sep 2016

Thank you again for testing the device so deeply. I will try to reproduce and most likely try WongoTheSane suggestion which seems very interesting to me. I will post Preview 4 sometime this week.

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

26 Sep 2016

pongasoft wrote:Thank you so much for that. I usually develop RE because I actually have a need for it that no other RE helps with.

For VAC-6 my initial need was to be able to "flag" (orange color) when my level goes beyond -6dB (wanted to leave headroom for professional mastering which I don't do). I could not find anything that would let me do that and in a way that was actually useful to me.

For A/B switch, I needed to compare several masterings instantly. Again no other device let you switch instantly with just one click (+ as my first RE that was a good learning tool since at the end of the day it's kind of a big IF statement...)

For CVA-7, I needed to see CV very precisely (because I have an idea for another CV tool so essentially CVA-7 will be my debugging tool... which I will reveal in time ;)

I am definitely a tools guy... Synth and all that are cool, but tools can be indispensable. When you have the right tool, it makes all the difference. It's kind of killing me right now when I read the thread about people trying to convert unipolar <-> bipolar. It's such an easy tool to write and yet without it, it's really hard to do. If only the SDK were allowing me to do half rack ;)
You seem to have a knack for finding those seemingly-easy-tools-except-they-don't-exist-yet, so that begs the question: A/B is #1, A/B 12 is #2, VAC is #6 and CVA is #7; what were #3, 4 and 5? (can't wait for #8 too!)

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

26 Sep 2016

challism wrote:standard 015/-16 (should be min -15, right?)
I'm checking your file right now, and this drew my attention: positive values are left-padded to three digits (001, 002...), while negative values aren't (-1, -2). I would vote to remove the left padding for positive values (but keep the right padding of the decimal part for internal values: 0.2000). It's not a big issue though :)

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

26 Sep 2016

Some more strange behavior. I was just playing with the amp knob of Little LFO and noticed the values are all messed up.
Little LFO sin wave
Internal: min-0.9865/max 0.8594 (these should be matching, with min being a negative)
Percentage: min -99/ max 085 (these should match with min being a negative)
Standard: min-126/max 109 (these should match with min being a negative)

combinator file attached below
little.jpg
little.jpg (143.82 KiB) Viewed 1655 times
little lfo.zip
(1.88 KiB) Downloaded 44 times
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

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

26 Sep 2016

challism wrote:Some more strange behavior. I was just playing with the amp knob of Little LFO and noticed the values are all messed up.
Little LFO sin wave
Internal: min-0.9865/max 0.8594 (these should be matching, with min being a negative)
Percentage: min -99/ max 085 (these should match with min being a negative)
Standard: min-126/max 109 (these should match with min being a negative)

combinator file attached below

little.jpg

little lfo.zip
What du you expect, when you zoom out? You even cannot see each pixel of picture if you zoom out?

Maybe it could help to display the numeric range for the cursor, but this wont give yiu an exact value. Actually you see the average.
Reason12, Win10

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

26 Sep 2016

I'm unable to reproduce the same weird results with Little LFO that I discovered earlier. I'm not sure what the issue was, but I think it was probably on Little LFO's end because Skope was also showing the positive and negative values having a big discrepancy. But since I discovered that, I turned the amp knob on Little LFO some more and it's acting normally again. I think that was a Little LFO bug or something. Now the values at the same amp knob setting are showing standard: -108/107.

Logue, I don't understand exactly what you are asking. I zoomed in and out but still don't see the numbers change in regard to max and min values, when the cursor is at its max and min locations.
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

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

26 Sep 2016

challism wrote:I'm unable to reproduce the same weird results with Little LFO that I discovered earlier. I'm not sure what the issue was, but I think it was probably on Little LFO's end because Skope was also showing the positive and negative values having a big discrepancy. But since I discovered that, I turned the amp knob on Little LFO some more and it's acting normally again. I think that was a Little LFO bug or something. Now the values at the same amp knob setting are showing standard: -108/107.

Logue, I don't understand exactly what you are asking. I zoomed in and out but still don't see the numbers change in regard to max and min values, when the cursor is at its max and min locations.
I've been toying with your combi for a while, and I might have an explanation. I noticed that in your screenshot, the "Corr" knob on LittleLFO was not at 100%, while it was in the combi you attached. I didn't know what "Corr" meant but the ballon help says "Tempo phase correction", so I guess it's the time LLFO takes to adapt the phase upon tempo changes. So I tried changing the tempo (in the sequencer, not the "Tempo" knob in LLFO) while having "Corr" set to a high value, and I can see something very much like what you're describing: with an auto-reset of 4 seconds on the back of CVA, the Min and Max values don't match more often than they do. It does it too with the "Tempo" knob on LLFO, but to a lesser extent. It always ends up matching in the end, but depending on various settings, it can take up to several seconds to "settle". So I think you're right, it's a consequence of LLFO's handling of phase and tempo.

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

26 Sep 2016

Could we have some sort of grey line in the middle of the graph to show the half-point of the CV scale?
line.PNG
line.PNG (9.9 KiB) Viewed 1639 times

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

27 Sep 2016

I second Wongo's request for a 1/2 way line. That would be helpful.
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:

27 Sep 2016

I will add it for Preview 4

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

28 Sep 2016

Preview 4 is here (1.0.0d8)!

Here is what has changed based on the requested features:

* added 0 +0.5 and -0.5 axis
* use different formula to convert from Internal to Standard and Percent (use (value * 128) clamped to [-127, 127] as suggested)
* fixed issue with cv min and cv max: when zooming, a single pixel in the LCD represents multiple samples so the value displayed is the average of those samples. Now min and max are properly computed from those samples (was setting to average in Preview 3).
=> as a result here is a neat trick: in Pause mode (when zoomed in), select a point of interest and then click reset => now CV display the average for this single point MIN shows the min of all the samples comprising this single point and MAX shows the max of all the samples comprising this single point

At 44100 sample rate, when zooming out completely, the entire 10s history is represented by 256 pixels => each pixel is made up of about 37 samples. Here is an example: the pixel selected in this picture has a value of -0.3280 (which is the average of the 37 samples comprising this pixel) while the min is -0.3366 and the max is -0.3197 (those are actual values).
Screen Shot 2016-09-28 at 16.43.46.png
local min/max
Screen Shot 2016-09-28 at 16.43.46.png (42.24 KiB) Viewed 1615 times
* added 3 CVs on the back reflecting the 3 windows in the front (CV/MIN/MAX). At this moment I am debating whether those CVs should remain in the final product (hence the DEBUG section) :
debug_cvs.jpg
Debug CVs
debug_cvs.jpg (38.17 KiB) Viewed 1615 times
Note that CV Out is a simple pass through of CV In no matter what happens. CV (in the debug section) represents what is shown in the CV window on the front which means that it will follow that window. So in pause mode, it stops and follow the cursor which is kind of interesting as it is a way of recording CV and then playing it at any speed forward, backward by just moving the selection. Also if you zoom in, the zoomed in (= average) value is output (unlike CV out).

I have added a beta license to all who requested one in the past.

Comments/Feedback welcome!

User avatar
Carly(Poohbear)
Competition Winner
Posts: 2881
Joined: 25 Jan 2015
Location: UK

28 Sep 2016

Looks interesting, someone was asking this sort of thing today..

If you need anymore testers.... @Poohbear69

Regards

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

28 Sep 2016

Carly(Poohbear) wrote:Looks interesting, someone was asking this sort of thing today..

If you need anymore testers.... @Poohbear69

Regards
Added

Thanks

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

29 Sep 2016

- Thanks for the line!
- The average calculation (when in Pause) is great! This might be worthy of an explanation on the back for new users, to avoid confusion.
- The Debug CVs are very interesting. Average is a de facto CV smoother, and both Min and Max could be used for some serious mangling. Coupled with RavenHerz's DVC-1 for instance, or Lectric Panda's Janitor, it could yield very interesting results. This does break the "this is only an analyzer" paradigm though, but on another hand, no other device does that (that I know) so it would be a shame to remove them.
- Shouldn't "CV Out" on the back be labeled "CV Thru", like on hardware?

I haven't had the time to check for values correctness yet, will report later.

Now for some fun:

- Plug any CV source into CVA-7.
- Plug CVA-7's Average Out to some modulation input on a synth for example.
- Pause CVA.
- You can now click and scrub the display to change the output CV, kinda like CV8X4's knobs, except it's a visual scrubbing and not a knob!


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

29 Sep 2016

I did not know that on hardware it is called "CV Thru" (I don't have hardware :)... But it sounds like a good name! And definitely less confusing.

How do you do those little animated images? It's pretty awesome!

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

29 Sep 2016

WongoTheSane wrote:- Thanks for the line!
- The average calculation (when in Pause) is great! This might be worthy of an explanation on the back for new users, to avoid confusion.
- The Debug CVs are very interesting. Average is a de facto CV smoother, and both Min and Max could be used for some serious mangling. Coupled with RavenHerz's DVC-1 for instance, or Lectric Panda's Janitor, it could yield very interesting results. This does break the "this is only an analyzer" paradigm though, but on another hand, no other device does that (that I know) so it would be a shame to remove them.
- Shouldn't "CV Out" on the back be labeled "CV Thru", like on hardware?

I haven't had the time to check for values correctness yet, will report later.

Now for some fun:

- Plug any CV source into CVA-7.
- Plug CVA-7's Average Out to some modulation input on a synth for example.
- Pause CVA.
- You can now click and scrub the display to change the output CV, kinda like CV8X4's knobs, except it's a visual scrubbing and not a knob!

And now ther comes autmation in...
Reason12, Win10

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

29 Sep 2016

pongasoft wrote:I did not know that on hardware it is called "CV Thru" (I don't have hardware :)... But it sounds like a good name! And definitely less confusing.

How do you do those little animated images? It's pretty awesome!
It's LICEcap: http://www.cockos.com/licecap/

Free, works on PC and Mac, source on Github so no crapware, you simply place the transparent window (which you can resize) above what you want to record and it saves an animated GIF automatically, with a very good compression factor (that's relative obviously, but for a GIF it's quite compact). The animation above was resized by Imgur unfortunately, not by LICEcap, which records at full size. And you can even move the window while recording, highlight mouse clicks, add text, etc.

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

29 Sep 2016

Loque wrote:And now ther comes autmation in...
My thoughts exactly. Not that I couldn't do without, but if there was some degree of automation (and by "some degree" I mean "automate everything"), I would certainly find uses for it. I'm aware this might be far outside of Yan's plans though (I honestly have no idea how long it would take).

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

29 Sep 2016

WongoTheSane wrote:
Loque wrote:And now ther comes autmation in...
My thoughts exactly. Not that I couldn't do without, but if there was some degree of automation (and by "some degree" I mean "automate everything"), I would certainly find uses for it. I'm aware this might be far outside of Yan's plans though (I honestly have no idea how long it would take).
I will look into it. I like challenges ;). But I won't promise anything as I am not sure that it is possible (due to possible limitations with SDK)...

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

29 Sep 2016

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.
Players are to MIDI what synthesizers are to waveforms.

ReasonTalk Rules and Guidelines

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 11 guests