Voxglitch Community Feedback

Coming very soon…

I’ve been working with Daniel at Tempest Midi Gear on a VCV Rack companion module for his hardware. The rack module will be free.

The entire setup is super easy to use. Here are the features so far:

  • Extremely easy to set up. Plug in the module to your computer. Select the midi device by clicking on a button on the module’s front panel. Done.
  • Mouse over any control and the associated output port will highlight in blue.
  • Knobs on the module track the physical position of the hardware knobs. (You can also use the mouse instead.)
  • Buttons send trigger outputs
  • Rotary knob sends trigger outputs for left and right
  • Switch sets 0 to 10v on output

I’m not making any money off this project, but if any big controller manufacturers want something like this, I’m available!

Ok, so before you ask, “What purpose does it really have if I can already route MIDI signals directly to inputs?” Yeah, I mean, you’re right. But that requires thinking, and clicking, and time. This is like, BOOM. Done.

11 Likes

Quick question to the community:

Is the Wav Bank module missing any interesting features? Here are a few that come to mind:

  1. “Segment output”, which would output trigger pulses at some division of the sample. For example, every 1/64th of sample playback would output a pulse. This would be neat for timed effects or clock sync.

  2. A wider display for the loaded samples?

  3. Waveform display (necessary, or just fluff that takes up panel space??)

  4. An attenuator for pitch?

Keep in mind that I always think about the benefits and drawbacks of adding additional features. I try to keep things simple for certain modules.

I’m being a bit sneaky about asking these questions, because my intention isn’t exactly what it seems. :eyes: :face_with_open_eyes_and_hand_over_mouth: However, your feedback would be very helpful to me, and good things await.

As a reminder, here’s what the wavbank looks like:

And here’s the context menu:

Ok, I thought of an idea. :smiley:

What if the module was smart enough to understand version numbers in the filenames? Like:

dark_techno_loop_v1.wav
dark_techno_loop_v2.wav

And there was a separate “version” CV input to modulate between them?

2 Likes

Hi Bret,
I would like the “Segment output” the most,
and the attenuator for pitch is my second.
The waveform display is not really needed imho.

1 Like

Yes to segmented output! As for CV input to modulate versions, here’s an expansion to your idea: what if you had a CV input/knob to choose a position that you modulate. So, for example, you have

ambient_whatever.wav
dark_ambient_v1.wav
dark_techno_kick_v1.wav
dark_techno_loop_v1.wav
dark_techno_loop_v2.wav

So you can modulate between all the samples if you choose the first symbol, you can modulate between dark ambient and dark techno if you choose a position where these symbols are different and you can modulate between techno kicks, snares and loops.

But now that I think about it, you would need another CV/knob to choose the starting point for a mask… So maybe that’s not extremely compact…

Well, for my purposes (voice samples for vocoding), I already got the feature I wanted (auto-advance).

The other feature I would really love (but understand that it is not so simple) would be playback speed and playback pitch to be independently controllable (so that, for example, I could play a sample slower, but not at a lower pitch).

edit: just thought of another one, I set up a very crude transient detector for my vocoder patch (acts similar to the suggested segment output, but the goal is to fire a trigger at the start of a word or syllable, which can be used to change the pitch of the vocoder for a more musical delivery), would be really cool if the module had a proper transient detector to output a trigger

I have something like that on the horizon! Actually, two different modules that support that should be coming relatively soon.

Would this have any benefit by being built into the sample player rather than being an external module? I haven’t coded an effective transient detector before, so I don’t know if that requires some type of pre-processing?

I’m not sure about this! Let me ponder it. :thinking:

You got it!

in my imagination a super wavbank would have :

restart on a new trigger

cv-able start stop points

a pitch scale that has normal speed at 1volt, stop at 0volt, and reverse playback at-1volt, double speed at 2volt, etc

cv-able loop on off

a high gate during playback

I know, its a lot but I let my imagination run wild

That’s totally fine! Some of these are pretty unique ideas!

Looking forward to it!

Well, in my very crude implementation, it is just a full rectifier followed by a slew, but the slew only applies to fall, not rise. Then I use a comparator with a variable threshold, set somewhere between 1v and 3v.

So for real time audio, the rectification removes having to deal with negative voltages. A transient would jump the value above the comparator threshold, and the slew holds it long enough for a trigger to fire. (I describe this as crude, because I don’t think it is the best technique, its just what I could achieve easily with other modules. I think using a small averaging window might give better results. Actually, I might ask Gemini what the best way is…)

For real time audio, even if you used a window, I don’t think there would be any benefit in it being the same module as the sample player.

But potentially since you have all the sample audio, there might be a better implementation that detects the transients on sample load maybe? Don’t know for sure, but I imagine that beat detection is very similar to transient detection, but maybe with some sort of interval heuristic?

Thought of another feature too, when I am preparing a sample, I often use the normalise effect in Audacity to ensure the sample is a similar loudness to other audio. Again, don’t know how difficult this would be, but it would be a very handy feature to have in a sample player…


edit: this is what Gemini reckons:

The most straightforward and widely used method for real-time transient detection in audio is the Differential Envelope (or two-envelope follower) method.

This technique is effective because transients—like drum hits or guitar plucks—are characterised by a rapid, sudden increase in volume that is much faster than the gradual volume changes of sustained sounds. The system works by measuring the signal’s volume (envelope) at two different speeds and checking for a large difference between them.


Simple Real-Time Transient Detection

The core idea is to create a Transient Detection Function by comparing a fast-tracking volume measurement with a slower one. A large, positive difference indicates a sharp, sudden energy increase, which is a transient.

The Three Steps

1. Create a Fast Envelope Follower

This circuit/algorithm tracks the volume (amplitude) of the incoming audio signal very closely and quickly.

  • Process: The raw audio is rectified (absolute value taken) and then passed through a low-pass filter (LPF) with a very fast attack time (e.g., 1-5 milliseconds) and a moderate release time. This quickly follows the signal’s peak volume.
  • Output: You get an output signal, let’s call it E_{\text{fast}}, that is a waveform representing the audio’s volume with minimal delay.

2. Create a Slow Envelope Follower

This circuit/algorithm tracks the volume of the signal more sluggishly, smoothing out any rapid jumps.

  • Process: A copy of the raw audio is rectified and passed through an LPF with a slow attack time (e.g., 20-50 milliseconds) and a slow release time. This effectively measures the general, steady level of the signal.
  • Output: You get an output signal, E_{\text{slow}}, that represents the average background volume.

3. Calculate the Difference and Apply a Threshold

The transient is the part that is fast-rising.

  • Process: You calculate the difference between the two envelopes:

    D = E_{\text{fast}} - E_{\text{slow}}

  • During a sudden attack (a transient), E_{\text{fast}} shoots up much quicker than E_{\text{slow}}, resulting in a large, positive value for D. For a steady note or silence, D will be close to zero.

  • Detection: If the value of D exceeds a pre-set \mathbf{threshold} value, the system registers a transient event.


Why This Method Works Best for Real-Time

Feature Explanation
Low Latency It only looks at the current and immediately past samples, using simple filtering and subtraction. This is crucial for real-time processing (like a live audio effect) where a delay of more than about 10 milliseconds is noticeable.
Simplicity It avoids complex calculations like the Fast Fourier Transform (FFT) or multi-band spectral analysis, which are computationally expensive and introduce more delay.
Gain Independent The difference in the rate of change between the two envelopes is used, which makes the detection less sensitive to the overall volume of the audio.

This method is the foundation of many commercial devices and plugins, such as the famous SPL Transient Designer, where it is known as Differential Envelope Technology.

I’ll dig into it! Having the transients marked on load would certainly be nice, since it would reduce overall CPU.

And talking about doing things on-load, maybe an option should be to have the normalization done on sample load. I feel like I’ve done that in the past with one of the modules. :thinking:

Sorry for the short response, but I’ll dig in a bit more later. I appreciate your feedback a ton!

1 Like

Not available yet. :ghost: But in development and the basics are working…

Announcing!!! :drum: :drum: :drum:

Voxglitch NetRunner

I know… underwhelming. :yawning_face:

Clearly the panel is in development, but here are the key features:

  1. Think “wavbank”, but it takes a config file.
  2. The config file contains the filenames OR URLs where the files should be loaded.
  3. Loading happens in a separate thread and does not affect patch playback
  4. The user’s “rack token” (vcvrack.com user token) is optionally sent along with the request to download the samples from URLs.

Here’s an example config file:

{
  "samples": [
    {
      "name": "Kick",
      "url": "https://example.com/samples/kick.wav"
    },
    {
      "name": "Snare",
      "url": "https://example.com/samples/snare.wav"
    },
    {
      "name": "HiHat",
      "url": "https://example.com/samples/hihat.wav"
    },
    {
      "name": "Bass",
      "url": "https://example.com/samples/bass.wav?version=2"
    },
    {
      "name": "Clap",
      "url": "https://drive.google.com/file/d/1aBcDeFgHiJkLmNoPqRsTuVwXyZ/view?usp=sharing"
    },
    {
      "name": "Tom",
      "url": "C:/Users/YourName/Music/samples/tom.wav"
    }
  ]
}

Over the next few days, I’ll be incorporating your ideas into this new module. The basics are working already. This will be free and open source. :free:

Let me explain the user experience:

  1. You’ll need to write or obtain a config file.
  2. You load the NetRunner module from the rack library.
  3. You use the context menu (or perhaps a button on the front panel) to load the config file.
  4. The audio files defined in the config file are then downloaded from the net and ready for playback.
  5. Once downloaded, the audio files are on your drive and won’t need downloading again.

It’s… a little bit experimental!

I don’t know if it will be popular, or completely ignored?

As always, your thoughts are always appreciated.

2 Likes

I like the config idea. :+1:

What is the idea here? Do you expect that sample files could be licensed, or sold?

Would it be feasible to add support for formats other than wav, that are smaller file sizes and more common?

2 Likes

Hey everyone! So cool to see all these joined efforts coming along really nicely. Am I seeing some time stretch developments here or am I wrong? Also +1 for the .aiff or even .flac possibility.

1 Like

One of my favorite things about wavbank is how easy it makes it to audition a large folder full of samples. I filled some folders with kick/snare/hat/clap/random percussions and I like to randomize the wave selection to find new combinations of sounds for drum kits.

So anyway, here are my crazy ideas to add to the Wavbank wishlist:

A module that lists all the selected samples from all the samplers in a patch into a text file. (I made a python script once that reads the .vcv patch file and gets this information but it only works if the sample is selected using the knob since it can’t get the voltage at the wave selection input if that was used to select the sample). I suppose if you wanted to get really advanced you could add file-management or preset-creation capability such as gathering all the samples into a folder or even updating the wavbank modules in-place to point to the new locations.

An expander that could sit between a wavbank module and for example groovebox with buttons to send the selected sample to a groovebank slot. (or one of your other samplers)

3 Likes

I looked in to this about two weeks ago and initially didn’t succeed. In my mind, MP3 would be ideal, but my initial attempt at integrating a 3rd party MP3 library failed. I’ll try again before launching the new module. I’d LOVE to be able to do that.

Noted!

Yes! That’s in the back of my mind. Sample packs could be licensed, sold, or just shared for free. For example, if I ever get off my butt and launch a voxglitch website, I might post sample packs every so often. But again, I don’t know if anyone will really care, unless… maybe there could be a sample pack directory somewhere. Maybe I shouldn’t get too ahead of myself.

But I also wanted it to more “open” for other uses. For example, perhaps rack running in a browser or on devices might benefit from skipping the filesystem to access samples.

1 Like

The VCV Rec module supports a bunch of formats, might be worth an email to support to ask if the native implementation is available?

2 Likes

this reminds me of the envion net audio thing!

I had AI do some research, and it found that the record module uses FFmpeg. I’ll look into using it myself. :slight_smile:

Holy excrement! It worked! I have MP3s loading! This is fantastic. I’m going to spend a day or two improving the file loading for all of my modules to support all of the same types that the VCV Rec module does. @dan.tilley , I can’t thank you enough for pointing that out. This is going to be a huge upgrade to many of my modules!! :man_bowing:

6 Likes