AFG 2 Zebra (input/help needed)

Official support for: u-he.com
Post Reply New Topic
RELATED
PRODUCTS

Post

I made my first attempt to convert the oscillators of a synth in a way that remained faithful to the original (thanks Jupiter8 for your wonderful wav2zebra tool), sadly I'm not getting there. I'm trying to convert some wave shapes from my Livewire Audio Frequency Generator, specifically I'm trying to somewhat realistically reproduce the harmonic animation, alien saws and animated pulse. I'm also trying to morph from the matter to antimatter modes.

So far morphing between matter and antimatter waves sounds good and morphing through a PWM sequence is okay but morphing through harmonic animation sequence just isn't cutting it. Try the six oscillators I've completed for reference. I'll post the original .wav files if someone requests them.

afg2zbra

I guess I just want to know how to get the best results out of wav2zebra. I'm using 16bit/44.1K .wavs, which contain a single cycle at C1. Of course once I have results I'm happy with the oscillators will be made available to the ever expanding patch library. Any help would be appreciated.

Post

bump, I just realized what time it was when I posted this.

any suggestions guys? How many samples can a table consist of? Will I get better results if my samples are closer to the size of the table?

Post

Not sure if this is what you want but I'll try anyway. Some of it you not doubt understand already, sorry if I'm repeating info for you. BTW, there is a new thread in the u-he forum about OSC files and the utillity, maybe post over there too.

Zebra can hold up to 16 waves per oscillator and will create the "in-between" waves in real time. As far as I know wav2zebra encodes only the cells that you load via it's interface in to the OSC file, but will create morphs where there are gaps between cells, with a default sine wave in the final cell to complete the wavetable if you don't load that cell. Zebra will load the waves calculated by wav2zebra directly in to the 16 slots in the interface for real-time generation of the in-between waves, or "waves between waves". This is one area where we have way more power than the original Waldorf series of synths.

How much information you supply by loading cells with single cycle wave forms will directly impact the quality and type of sound you achieve with the OSC file. This is one area that I am currently experimenting with, to find the right balance of sample cycles that I use to re-create the analogue waveforms. Is there an optimum series of cycles to load from a given sample? Does this change for every wavetable you create? (the answer is probably yes!).

One thing I'm uncertain of is whether or not to normalise the single cycle sample before importing it in to wav2zebra. Perhaps it is better to have that available for control in Zebra?

The resolution parameter in Zebra controls how often the wavetable is checked when generating sound from the oscillator wavetable. This is directly related to performance, as it can be a CPU intensive process. This is from the Zebra manual:

The resolution paramter determines the length of the intervals between calculations. Higher
resolution results in more exact (and faster) transitions from waveform to waveform.
The range of the resolution is between 4 seconds and less than one millisecond.


If it's anything like wavetable synthesis on a Waldorf Microwave XT (which was a recreation of the technique used in the original Waldorf PPG synths) then the results will never be perfect. The Mircrowave XT allows 60 slots per wavetable but uses 8-bit waves so of course the results are not going to be high-resolution, or digital sounding.

It takes some effort to set it up a sweep of the wavetable to hear for example the wavetable that contains a spoken "1-2-3-4-5". The result only barely manages to recreate the sound of the original source. There are some tricks that can be used to setup the synth so that different starting point in the wavetable are used depending on note played, velocity etc. which I am sure can be replicated in Zebra as we have at least the same amount of modulation options. I think this is where you have to get a little intimate with the whole process ;)

Here is a tip I found on a forum regarding the MW XT, which we can apply here:

You can sample a tone... loop one cycle and have fun. I would suggest sampling the lowest possible even note (divisable by 440) so you capture the highest amount of harmonic content. If you sample something at say 440 or 880... you get kind of weak sounding bass because the harmonic content is from 440 up to 20k... sort of like a ratio kind of thing. If you sample lower... say 50hz, you get content all the way up to 20k even if it doesn't go that far.

BTW, some of the "classic" wavetables that appeared in the Waldorf synths came about completely by accident ...

I've been using mono 24bit 96 Khz single cycle waveforms, which wav2zebra loads no problem. I'm trying to achieve a similar result i.e. sample the waveforms from an analogue synth (Future Retro 777) with the aim of having Zebra recreate as closely as possible the original sound. So far my success has been limited in that respect, but I have managed to create some really solid bass notes that have more body than if I used a regular square or sawtooth wave.

Wavetable synthesis is discussed a lot on the 'net because of the Waldorf legacy. You can Google around for techniques that will help you out. If you find any nice links, post them back here or in the other thread, and I'll do the same!!

Sharing tips on maximising the performance of Zebra wavetables with wav2zebra is a good idea :)

Peace,
Andy.

Post

Some comments:
Normalizing the waves i think is a good idea. Does'nt really change the quality but gives the wavetable an even volume. I tried some a while back that was'nt and to me that was annoying. Could be an effect initself but i did'nt care for it.

Zebra2 oscillators have a length of 128 sample points. Everything gets resampled to a length of 128. So there's little point in having samples longer than 128 samplepoints. Does'nt really hurt and you should'nt go shorter than that preferably. It has a resolution of 32 bit float. So for best quality sample a note that is close to 128 samples long in one cycle. Highest bit depth possible. To me sampling in 96 kHz is counterproductive but probably does'nt matter in practice. "Vasting" half of the 128 samplepoints on unhearrable frequencies when you could have used them for an extra octave instead. But as i said i doubt it's noticable. There's so much going on in Z2 under the hood that the wav import is more of a suggestion. "Could you do a wave somewhat resembling this,please?" It will rarely if ever play the exact wave you have imported.

One thing to note is that the first Wav2Zebra2 (The C++ windows only) always resynthesizes the waveforms by FFT/iFFT. This was done for a couple of reasons that i won't go inot. Boring stuff mostly and was an experiment. The Java one does RAW export as well where it exports what it gets (resampled to a length of 128 of course). That means the resynthesized version can be pretty different from the original. So if you want fidelity you go with RAW export (or both.It can do both at the same time). The FFT/iFFT combo has a DFT prefix and raw ones has a RAW prefix. Z2 already does a lot of the stuff i put in the first version so they we're kinda redundant. That's why there's no morphing on the RAW version for example. You can do that in Z2 which i did'nt know when i wrote the program. I found that out later.

To the OP: I believe the reason you're having little success is that morphing does one thing and what you need is another. Kinda hard to explain.
Say you have two squarewaves,one with 10% duty cycle and one with 90% duty cycle and you want pwm and all you have is waveform mixing. If you simply look at the waveforms it is easy to imagine what should happen. Move the points where it switches from 1 to -1 to the right and you're done. However if you simply mix them that won't happen. It's probably something similar here.
You expect the points to move in a certain pattern but morphing them moves them in another.
I dunno, that's the best explanation i can give and if that is the case there's little to do about that.

Post

Thanks for the detailed information jupiter8, and a very useful app ... it certainly launches Zebra into the realms of "a lifetime of sound exploration" :D

You've put a few things in perspective for me. Seems selecting the "right" kind of waveforms for this type of synthesis is going to involve plenty of trial and error, which is why I wasn't "getting it" in the past. The "wobbly sine" I generated from the analogue source works really well for bass, but it was truly an accident. All I know is that it would have been very difficult to draw by hand, let alone realise how well it would work!

Using 96 Khz files was a symptom of my recording settings but what you say makes sense. It also illustrates that it will be possible to get some really interesting results (e.g. lo-fi, glitch) by reducing the sampled waveforms to very low resolution to intentionally damage the results :)

I'm going to stick with "un-normalised" waveforms for now, but I'll experiment with the results further. It must have some effect on the final wave, even if it's only because Zebra's normalisation technique is applied to a slightly different waveform than the original.

Using the waves effectively within Zebra is another topic I guess, but one thing I've learned from researching how it's done with the Microwave XT is that by carefully setting up various modulation sources you can control (either precisely or not depending on application) which wave within the set of 16 the sound is generated from, and also the starting point within a specific wave. This can have a profound impact on the sound that is generated, and is particularly useful in terms of FM synthesis (among other things).

I'll have some OSC files + patches for those who are interested uploaded soon.

Peace,
Andy.

Post Reply

Return to “u-he”