Monday, November 30, 2009

Reverse Echo

Just updated reverse echo effect. I have audio samples coming as soon as I export them from Ardour.

My TODO list for reverse echo:
1) Volume swell where reverse array pointer crosses recent-old boundary in delay buffer. Right now you hear the discontinuous blip every time the playback loops around. With the current code, the work-around is a long delay time so you get a natural string swell from the natural note decay. No good on short delay times. It sounds worse and worse the more you shorten it up.

2) Update GUI. I don't think I have yet seen a reverse delay FX pedal nor plugin that lets you crossfade between forward and reverse delays. This is precisely the operation of the GUI slider. The more you slide it to the maximum, the more of the reverse you'll hear in the playback. Either extreme is full reverse or full forward. Pretty nifty, hey? I'm anxious to try it.

Otherwise it's pretty much done. See list of links below:

Here are links to the current code. My recent change of directory broke the links in prior blogs...I will try to fix them later.

Tuesday, November 17, 2009

Analog Phaser committed to Rakarrack CVS

Analog Phaser committed to Rakarrack CVS as new effect.

Since this technically is no longer a hack, I will defer any code seekers directly to CVS:

Leave comments if there are questions about what some of the parameters are meant to control.
As an update to this, here are links to some experimental code implementing envelope control. Since there is no control parameter on the Rakarrack GUI, a different control may need to be hijacked to test it. I have hi-jacked the distortion parameter, so the distortion amount must increase as your envelope deviation increases.
See line 116:
envpct = distortion; //This is a Hack to hijack distortion slider for ef control.

Here's the code.
And you'll need APhaser.h

Friday, November 6, 2009

Tube Modeling diversion

This has nothing to do with Rakarrack hacking, but just thought I'd put it out there:

undefined muse reason = none;
undefined muse insanity = reason - insanity_threshold;

undefined muse model_tube_amp()

if (insanity > reason)
return 0;

...and my thoughts about amp modeling:
It seems the most reliable way is to use convolution for frequency response and a look-up table for nonlinearities.

These can be measured directly from the tube amp. Most of the pre-amp filtering & tone controls can be accurately modeled with regular digital 1rst order filters.

It gets the most sticky when you are dealing with output power amp stage to the speakers. It's hard to decouple the impulse response from the nonlinear effects of transformer saturation, so the lookup table + convolution solution is only an approximation. A fair mathematical model requires a noteworthy DSP engine to process in real time.

Though, honestly, the sounds I love from my tube amp come from the preamp. I rarely turn it up to the point where power amp + transformer become notably nonlinear, and I don't actually prefer the resulting loose and mushy sound. One could make a fine FOSS tube preamp with some accurately modeled tone/frequency shaping filters and a look-up table generated from a trace of a 12AX7 tube.

Convolution with a good cabinet IR would be the final stage, simply ignoring nonlinear effects in the power amp & transformer stage. This is reasonable, since higher-end amps are designed to be rather hi-fidelity on the power amp stage. It's funny how the analog engineers are trying to minimize these kinds of distortion and the DSP engineers are trying introduce it into the system.

The result may not produce a perfect replica of amp "X", but it could produce the same nice interactive characteristic. It all depends whether the goal is a good sound, or a convincing model of something specific.

In the FOSS world, there's much more flexibility since you don't have pressure from a marketing department to produce a sound that sells. You can apply some creativity to the software development process and create something that sets its own precedent.

Most of my complaint about tube amp simulators is not so much how well the amp is simulated, but it's about what amps are modeled. I have a Peavey Duel 212, and have modified the circuitry to my taste. Line6 has yet to produce a product that behaves in any way like my amp, even though their modeling algorithms are perfectly capable. Only, I can't open up the hood on a POD and change a few capacitor and resistor values...

So you say, "well they have the DSP development kit for the ToneCore docks". They don't give you their proprietary amp modeling algorithms to you have to develop your own, and here's what I have to say about that:

Sunday, November 1, 2009

Phaser Files

You can find the source code two blogs down with instructions to compile it into your current version of Rakarrack. I keep it up to date with my current work.

Here is a zip archive of Audio samples recorded from a jam session playing with my rakarrack and the analog phaser model.

Sound Files

The zip file is a tar.gz, and the audio files are .ogg format. If either is a problem, leave a comment and I may feel inclined to submit a regular .zip full of .mp3 format files. I figure if you aren't using Linux, then Rakarrack is probably of little interest for you.

Recording setup is:
Vox V810 overdrive Pedal (modified) --> Peavey Duel 212 --> EFX loop send--> Behringer UCA202 in (left)--> Rakarrack --> Ardour --UCA202 out --> EFX loop return --> Power Amp.

Any distortion sounds come from either the Vox OD pedal or the tube preamp, or a combination of the two. Sorry I can't claim the sweet chunky sounds are coming from rakarrack.

My todo list is now down to this:
1) Change names of hi-jacked parameters to names more appropriate to what they're controlling. For example, "Panning" actually adjusts the amount of JFET distortion level, where -64 corresponds to 0. This produces a subtle effect even at maximum (which seems reasonable, since the real Analog phaser doesn't make the signal outright fuzzy).
2) Model component mismatches. JFET's vary drastically in manufacturing process. Even hand-matched units can be different by 5%. My working hypothesis is this increases the "swirl" as this causes the bandwidth of the phase cancellation notches to become wider, even though the cancellation depth may not be as great. Particularly narrow notches are not quite as audible. This will probably provided as a slider that makes the variance between stages adjustable from perfect to abysmal.
3) Rename files to Phaser_Analog.C (and .h) and integrate as a separate selectable effect into Rakarrack.