Voxglitch modules - beta testers welcome!

Nice! Definitely want to see more granular stuff in VCV, and I’m a big fan of travelizer as well :slight_smile: Builds OK on Mac. Will try it once I get the chance

@clone45 I’m sorry I stopped trying them but I cannot build/compile by myself.

as soon as I found them compiled for linux I’ll give’em a try :beer:

not tested it audibly yet but quantity knob fully CW takes 23 % of my CPU (i5 2500k at 4ghz)

Similar for me tops out at ~17.5% thought it was a memory leak at first but probably just because there is so many samples playing at the one time.

2020-01-16_18-46-13 that’s the most brutal settings here) Ram only 300mb (as usual), SSD as well. Sample is around 500kb so pretty short

Thanks for the feedback. I hadn’t been paying attention to CPU. I’ll dig around and see if I can figure out where the inefficiencies are, or I’ll consider capping the Quantity. I’ll keep you posted!

Even 0.5 is still pretty high. 0.05 seems to be a good setting.

Could definitely do with a pitch / v/oct param. Possibly attack and decay also.

2 Likes

The high CPU issues should be fixed!

@Coirt : After you mentioned an attack decay envelope for the grains, I realized the my implementation of granular synthesis might be slightly different than the norm. My grains loop, which would make it tricky to add attack/decay.

Instead of “fixing” my module (Dear module, you’re beautiful for who you are!), I plan on creating a more traditional granular sample player with pitch and attack/decay. I’ll have a lot more control with grains that are single-shot. The new module may have a lot more elements on the front panel which may increase the learning curve, but that’s OK.

Thanks!

1 Like

wow waw! I got very interesting results sometimes, although there is nothing similar to sampler I brought to it) but it doesn’t matter, unpredictability is a key of this machine. Could you implement some anti-click stuff when drop the trigger to Purge? This tool can be used in quite musical\rhytmical way but clicks sometimes are annoying. And what about internal recording in vcv rack and then manipulating with cache files?

1 Like

Could you implement some anti-click stuff when drop the trigger to Purge?

I’ll try! I haven’t been using the purge feature much, so I didn’t notice the clicking. I’ll see what I can do.

I love that idea. I’ve been thinking of something similar. That’d be a different module, for sure, but I’ll put it on my list to experiment with!

1 Like

but clicks sometimes are annoying

I sympathize with you on this. I put some piano music into Ghosts and it was far too clicky. I tried once already to smooth out the clicks introduced by the looping grains but it didn’t have any effect. I think I’ll try again since the code has evolved since then. Another source of clicks may be when new grains are added or old grains are removed from the sound. It’ll probably take me a few days to experiment with this. Luckily, the code is still rather organized. Ha ha ha. I’ll let you know if I can solve this!

1 Like

Just love to see that kind of sample manipulator that based not only on repitch (speed) modulation or position in usual terms. Ghosts definitely offers something more! It’s pretty hard to guess what exactly it does but on the other side is pretty controlable if add modulations to it. Keep up the good work!

1 Like

It’s a bit mysterious for sure! Here’s what’s going on under the hood:

  • Every so often (based on respawn rate), create a new “ghost”, passing in the Length input and Position input values. Those values are locked in for the lifespan of the ghost.

  • The “ghosts” all reference the raw data from the loaded .wav file. It’s as if you told a ghost, “Here’s a .wav file. Your job is to start playback at this position and loop at this length”. The ghost does that until it is destroyed.

  • Once there are too many ghosts (based on the Quantity input) the oldest ghosts are killed off.

  • All of the ghost’s outputs are summed together and output.

That’s essentially it. The code for jitter simply randomizes the Position a little bit when a ghost is first created.

Cool beans,
Bret

Playing with it now for the first time. This thing is very interesting. :slight_smile:

Thanks!

Quick update: I added two smoothing processes: 1) I smoothed the audio when grains loop and 2) I smoothed audio when grains are added and removed. Although I got rid of 90% of the pops, I can’t seem to get rid of them all. This may be due to multiple grains getting removed simultaneously. I was sooo close! I’m going to sleep on it and see if I can solve it tomorrow.

Another option is to try and write the output to a short buffer and add smoothing to the final output buffer. That would sure make my code a lot cleaner, but I do have my worries and doubts. I’ll keep you posted!

UPDATE!
BINGO! I fixed the smoothing process! No more pops! I’ll have a new build up sometime this weekend. It’s so much better! Because the grains take a bit of time to ramp to 0, I need to go in and fine tune the spawn rate. Spawning too quickly can cause issues. But don’t worry, most of the spawn range will be OK and you’ll still be able to squeeze some weird stuff out of it!

I’ll post here when the updated version is on Github.

1 Like

Updated version of Ghosts is now on github. Changes are:

  1. Added smoothing and got rid of all those annoying clicks and noise
  2. Moved the Jitter toggle from the Options menu to the front panel so that people notice it.
  3. Improved Purge so that it doesn’t cause any clicks or pops
  4. Tweaked the spawn rate. I had to decrease the maximum spawn rate because ghosts take a little time to die off now, and it was possible to generate too many ghosts and eat up CPU.

I’m thinking of creating a variation of this module called “Gobblins” that has no smoothing, but is really chaotic and strange. I don’t know exactly what that means yet, but I feel that Ghosts has become more and more “tame” and I want to offer something a variant that’s more experimental. :japanese_goblin:

Before I do, I’m going to take a break from working on new modules to formally release the ones that I have. But if you find any bugs, definitely let me know!

2 Likes

Link to a mac build please?

Thanks! Sounds much better for me A few suggestions to you if you don’t mind of course!)

  1. Trim is good but what about adding a CV input to this? I don’t want to crush the sound of this module by ordinary limiter but it has a huge variation in terms of volume. In that way we can place such envelope follower and connect it to the trim input to compress or limit it gently, like autogain sidechain or something like this. ALSO I’ve noticed that the volume correlated with value of Position - small value = higher volume and vice versa. Maybe it’s possible to make that connection inside the module as well And also it can acts as internal VCA and this is also quite cool (like Plaits)
  2. Jitter on the panel is a really cool decision and it has no click while switching. So…what about a CV gate input for on\off modulation?)
  3. Sometimes I can catch the sound I like but in certain settings it has disappeared quite fast. Maybe this suggestion is too much for this module but anyway - if this possible to implement some loop function with adjustable length and those anticlick feature that you have implemented in the last update?
  4. In some values of Position knob (sometimes) the sound just disappears. I look at the scope and see a huge offset, negative or positive. I don’t really know how module actually works but if you find this is something correlated with the lack of DC block maybe it’s worth to implement it in the future to get for whole of sound palette of this module!). I know it depends on uploaded sample but who knows. I still can get a sound by the way in that kind of settings this pic below has but it’s really out of range -10\10volts 2020-01-18_09-36-04
  5. Wav file knob selector inside the folder (as in your Wav Bank module) would be also helpful in sound manipulation process! It seems to me the sample only determines the timbre of the resulting sound. SO if we have a bunch samples in the folder the sound design process can be much faster with this feature…
  6. And also some cache folder as Nysthi samples module has would be handy when transfering a patch to another machine or to cloud for example. User just could grab a whole cache folder from voxglitch folder inside Rack directory within the patch to collect everything in one place or something.
  7. The pitch knob would be also quite appreciated but I don’t know if this possible at all.
  8. Purge is awesome feature now, it great for gates and much more. But could you also add a button next to it just to get some panic-like button to run the engine from starting point? WOw, that was maybe too much suggestion for me but who knows maybe you would like some of them! Cheers and thanks for your great work!
2 Likes

I’m really happy that you’re interested in the module enough to provide suggestions! Thank you!

Trim is good but what about adding a CV input to this?

Consider it done! That’s an easy one! To conserve on panel space, I may add an input without an attenuation. I hope that’s OK. I may also double the range of the trim knob to give you more control.

Jitter on the panel is a really cool decision and it has no click while switching. So…what about a CV gate input for on\off modulation?)

I’ll try. My only concern is panel space. I’m going to be moving the Jitter switch to the right so that it sits closer to the POSITION knob. I’m also going to draw a line between the Jitter switch and the Position knob to make it more obvious what jitter is affecting. If I can squeeze an input to the left of the Jitter switch and still maintain a nice layout, I’ll do it! (If necessary, I may move Purge to the left a bit to give it panel some breathing room. So my answer: Probably yes! If an input is connected to the Jitter gate input, it will override the switch.

Sometimes I can catch the sound I like but in certain settings it has disappeared quite fast. Maybe this suggestion is too much for this module but anyway - if this possible to implement some loop function with adjustable length and those anticlick feature that you have implemented in the last update?

Hmm… That feature would require a lot of additional front panel controls. However, if it doesn’t already exist, I can easily create a separate module for that type of thing? Oh wait - that might not be so simple. The reason is that VCV Rack currently doesn’t have a way to save large amounts of data, so I wouldn’t be able to save and load the sample buffer, and you’d lose it when you restart VCV Rack. I’ll keep thinking about this, but it might be difficult.

In some values of Position knob (sometimes) the sound just disappears.

Could you send me the sound that is causing this to happen? I’ll take a peek. I’d try to keep your sample lengths at around 3 to 4 seconds long. That might help?

And also some cache folder as Nysthi samples module has would be handy…

I’ll take a look and see what I can do. :slight_smile:

  • The pitch knob would be also quite appreciated but I don’t know if this possible at all.
  • Wav file knob selector inside the folder (as in your Wav Bank module) would be also helpful

Both of these features sound amazing. However, I’m going to add these to a larger version of this module that I’m planning on calling “grains”. The grains module will take a more traditional approach to granular synthesis and not loop the individual audio grains. For that module, I’ll add both of these features!

Purge is awesome feature now, it great for gates and much more. But could you also add a button next to it just to get some panic-like button to run the engine from starting point?

Maybe. I’m only hesitant because it’s really easy to use a RJModules BUTTON module to achieve the same result, and I’m trying to keep the front panel as minimal as possible. Let’s see how it pans out.

Cheers and thanks for your great work!

Absolutely! It’s my pleasure.

1 Like

@VCVRackIdeas Hi Artem,

I have some good news and bad news. First, the good news! I’ve added a CV input that, when connected, overrides the Jitter switch! Woo hoo!

image

Here’s the bad news. I decided not to implement the Trim CV control. It’s a great idea, but there are two reasons why I decided to pass on it:

#1. First reason is that it would make the front panel more visually “busy”, and I’m hoping to keep my panel designs super simple. The Ghosts module has four visual “quadrants”, which I think helps keep things clear:

image

If I added Trim, it would be very close to the POSITION input, which gets chaotic. This is totally me being picky and weird, so I apologize!

You may notice that I didn’t move the Jitter control closer to the Position knob like I said I would. I tried it but didn’t like it. :slight_smile:

#2.

In that way we can place such envelope follower and connect it to the trim input to compress or limit it gently, like autogain sidechain or something like this.

Wouldn’t it be fairly easy to implement what you’re suggesting by using an external amplifier module? It doesn’t seem essential that the TRIM CV be added. So if I can leave it out and keep the module looking beautiful, that would be my preference.

Onward!..

ALSO I’ve noticed that the volume correlated with value of Position

I may have fixed this! Previously, ghosts would stop playing if they reached the end of the loaded .wav file. I updated the code responsible for generating ghosts to (when necessary) shorten ghost playback length such that the ghost’s playback section is within the bounds of the .wav file.

My goal for today is to learn how to submit my modules to be included in the official library. :see_no_evil::hear_no_evil:

Cool beans.
Bret

1 Like