JV880/JUCE on raspberry

Hi Paolo :slight_smile:,

Some weeks ago, I built an FX chain for a Mac installation of the emu, as instrument channel inserts in Cubase, which I have more or less reconstructed from memory in the previous post.

I would have to retrieve the related project, but if I were to throw an idea for an effects signal chain on Zynthian, to be tested, I would propose:

Calf Filter (LP 12 Db/Oct) at about 15000-16000 Hz.

Tube Amp with a Drive setting around 0.2-0.3

Calf Multi Chorus at slow rate, or Cloud Reverb with short timing.

Dragonfly Hall.

3 Likes

Unfortunately it does not work on my MiniDexed :face_with_raised_eyebrow:

How about this:

Very nice build, good audio quality. Works from 5V. I like it.

2 Likes

miniJV880 requires a few things that minidexed doesn’t (necessarily):

  • rPI4 (max) - not yet supported on the 5 (i could never get it to run on a 4 either, but zero → 3 works just fine)

  • Rotary encoder w. button click integrated (e.g. data-wheel on the jv880)

Mine is RPi3, with rotary encoder. Can’t even get the 16x2 LCD working. I’ll let it run MiniDexed, that works fine. For jv880, Zynthian is better.

I have a small mixer but that’s not fancy enough :smiley:

2 Likes

Main issue is that MiniJV880 seems more a proof of concept at the current stage.

On my experience, I had issues running it on rpi3A, but worked nicelyon a rpi4. I made a build for rpi 3 4 and 5, there should be the link up above. I also tweaked the build scripts for the last 3 rpis.

There are some forks with extra features and optimizations.

@Kirtai posted a repo which is not a fork of the original miniJV880, but seems more avance and solid. Would definitely try it.

1 Like

I can certainly accept that there’s a limitation in high frequency performance if VirtualJV has a sample rate of 32000, but it seems to me that if that is indeed the sample rate out from the emulator, then there needs to be a sample-rate converter to convert to the sample rate used by Zynthian, the quality of which of course seriously can impact the sound, but, if done correctly should have no audible degradation.

But I should really try to temporarily set the Zynthian sample rate to 32000 to see (hear) if there is a difference.

My experience with older samplers is limited, but I am a great fan of the Roland S-10, which has a maximum sample rate of 30 kHz, but even so, Roland’s engineers got it right, so there’s very little aliasing or other artifacts in the sound (apart from the limited top range, which my aging ears can barely hear anyway). (I believe the more popular S-50, S-330, S-330 and W-30, and possibly a few more use the same underlying 15kHz/30kHz sample rate sampling engine). Having a low sample rate in itself should not incur any issues beyond a limited top range, but I think a lot of early sampler manufacturers either didn’t do their homework properly, or decided to sacrifice some cleanliness for a bit more top end, or a simpler and consequently cheaper implementation. But given that Roland apparently new what they were doing with the S-10, S-50 etc, I’m a bit surprised at the apparent sound quality of the JV-880, but as I said initially, I really don’t know exactly what it sounded like back in the day. Certainly the JV-880 would have been aimed more at a mass market than the S-10 and S-50 which were Roland’s first sampler attempts and they might have decided that it was worth doing really well to establish a position in the marketplace at that time, but that they then had to make compromises in order to remain competitive.

1 Like

Hi! That is indeed true, because the Zynthian software has to perform an internal resampling, to adapt the digital data of the waveforms before they hit the converters of the audio board, at the set sample rate.

We should also remember that the recent slew of low-level software emulators of digital synthesis architectures - made possible by computational power increased by orders of magnitude, with respect to the past - is based on exact replications of the DSP workings with their running DSP code.

This also means that nothing of what possibly surrounds or follows the signal chain of the digital sound, whose last stage are the DACs, is mirrored in the emulator’s audio output.

For example, the JV-880 was cleverly engineered with a simple and inexpensive post-DAC discrete circuitry stage, made of an op-amp and an elementary but effective fixed-freq 12 dB/Oct LP filter, set at about 15500 Hz, that is exactly at the upper threshold of the available bandwidth of 16 Khz at 32 Khz of sample rate.

This cheap hardware provision imparted analog softness, air and delicacy, to the upper range of the digital spectrum, thus masking the unavoidable digital artifacts of quantisation, and possibly any residual audio bleed from the anti-aliasing filter’s carrier frequency.

I guess that in later implementations of digital synthesis, like the mid-90s and ensuing VA engines, the impact of any discrete circuitry possibly present after the DAC stage was less impacting on the sonic quality, due to higher DSP power and better converters. Hence, the exceptional results - mostly identical to the original hardware - of the various DSP emulators of a later generation of VA synths (among which the ones from T.U.S., included in the Oram installation).

Anyway, for anyone like me keen of the 1990s catalogue of the JV/JD/XV manufacturer, this is the Don Solaris’ widely acknowledged Internet Bible, for tech specs of these venerable and still beloved instruments:

3 Likes

That’s actually quite interesting. I wonder what other emulations could benefit from such post-DAC analogue hardware (or emulations thereof)?

MT32-pi?
MiniDexed?
Any of The Usual Suspects emulations?

/me wanders off to have a look…

1 Like

A 12 dB/octave filter with a cutoff frequency of 15500 Hz will not have much effect within the audible frequency range; being 12 dB/octave it will be 12 dB down one octave up from 15500 Hz, i.e. 33000 Hz, so at 20000 Hz it will be about 6 dB down or so. Although above-15500 Hz frequency components will certainly be reduced, they would still be quite audible. The purpose of a filter like that is primarily to limit the amount of high frequencies that might cause problems further down the signal chain.

What I’m hearing in the output from VirtualJV sounds more like what I think would be interpolation problems in the sample playback engine, There’s an unevenness to the sound which has nothing to do with high frequencies, indeed the artifacts are will within the audible frequency range, and perhaps even lower than the note being played.

So based on the discussion above I’m thinking it’s more of a limitation of the original JV-880 rather than an emulation issue, but of course it depends on what level the emulator emulates the JV-880 behavior.

I’m thinking there would basically be two main routes: one, to sample-by-sample emulate what the JV-880 hardware and software does, which gives an exact emulation, or, create a playback engine and post-sample-playback processing chain that are based on the same general specifications but are not an exact cycle-by-cycle emulation of the original hardware and code. I have no idea where on this scale the VirtualJV implementation lies, but I get the feeling that it’s more of a sample-by-sample emulator than just ā€œsomething which behaves sortof like a JV-880ā€.

I cannot speak about VirtualJV due to the lack of roms. But I really find the discussions really interesting.

What I really wonder about is how a post-dac (post processing) lowpass filter should be able to deal with samplerate related artifacts at all. If you introduce frequencies higher than nyquist frequency (samplerate/2) these frequencies will fold back into the audible range anyway. The fun thing about digital audio processing is that there is no frequency above nyquist present (only indended or unintended, folded back frequencies below).

As far as I know where such a lowpass filter totally makes sense is while oversampling before downsampling again.

It’s a pure hardware level emulator.

i.e. it emulates the chips and circuits in the JV-880 and runs the original firmware on them in the exact same way it ran on the original hardware.

I guess that a 12 dB/Oct slope, rather smooth in gradient and thus not very immediately cutting above 16000 Hz, is a sort of compromise choice, between getting rid of the maximum amount of digital artifacts and making the already restricted spectrum response even narrower, with a strong exclusion of high frequency shine. We could certainly experiment and compare with either a four-pole or six-pole filter gradient, to verify in which way it affects the final audio output.

I’m not an electronics engineer, but I find quite logical that in early digital synths some kind of ingenious post-DAC analogue workaround afforded presence, warmth and timbral coherence, across the instrument’s range of the purely digital signal.

As for the VirtualJV, like other DSP emus it simply replicates sample-by-sample and operation-by-operation the workings of the hardware ICs, precisely mirrored in a software code. So, I think that any possible timbral defects (including the wavefolding of mirrored spurious low frequencies, due to quantisation errors) are an integral part of the device’s nature and colour, as it is, and are destined to mostly stay there, whatever acoustic remedies we might devise :wink:.

Obviously, an unwanted degree of digital signal’s degradation is likely to be introduced, by a further stage of re-sampling or over-sampling at the exit of the computer’s audio board, but in software emulations of DSP-based synthesisers this is unavoidable, because of the lack of the same exact data conversion circuitry, and possibly line-level amplification components, as the original instrument.

Cheers!

I tested changing the Zynthian sample rate from the default 48000 to 32000. And what a difference that made! With a sample rate of 48000 I start hearing obvious artifacts in JV-880 sounds in the 4th octave of a 5-octave keyboard on sounds like E.Organ 2. At 32000 it sounds essentially clean up to at least one octave above a 5 octave keyboard, sometimes more.

So, in short, if you want to experience the JV-880, set the Zynthian sample rate to 32000.

Also, I was clearly wrong about the artifacts being due to interpolation errors in the sample playback engine, it’s definitely due to the resampling that takes place from the internal sample rate in the plugin to whatever it is expected to deliver.

EDIT: Hm, no, it’s not as clean cut as this: setting the sample rate to 44100 sounds much cleaner in the higher octaves than 48000. At 44100, E.Organ 2 sounds clean over the whole range of a 5 octave keyboard, and starts getting barely noticeable artifacts in the octave above. Halfway up the next octave it gets really out of hand, which is more or less the same as at 32000. But at 48000 things get bad much faster as noted above. Which is strange, because if anything it should be easier to rate convert from 32000 to 48000 (because the ratio 48000/32000 is a simple fraction (3/2)) than from 32000 to 44100.

So it would seem either the plugin isn’t designed to handle 48000, or there is some form of misconfiguration when this rate is selected.

So for the moment, as far as I’m concerned, I’ll set Zynthian to 44100 which seems to work well enough with VirtualJV while at the same time offering almost the same amount of high end as 48000 for other plugins.

7 Likes

Thanks @ricard for your thorough and useful investigation, on how to better handle the JV emu as far as SR is concerned.

At the moment I am (alas) too busy to test and compare, but I guess, also on the basis of you report, that two possible scenarios emerge, for getting the best results from VirtualJV:

1] Working with two Zynthians, or outsourcing anyway the FX/audio treatment, and setting SR to 32000.

2] Working on a single Zynthian and setting SR to 44100, in order to find a sweet spot between JV cleanness and operability of FX chain and other processors/tracks.

Best Regards :slight_smile:

Or the proverbial someone should get in contact with the plugin developer and ask for help or file a bug report.

BTW, I see that VirtualJV is installed from a pre built package hosted at os.zynthian.org (https://os.zynthian.org/plugins/aarch64). But what is it built from - simply from the upstream repository ( GitHub - giulioz/jv880_juce )?

EDIT: ā€œSomeoneā€ filed a bug report: Severe digital artifacts when running at 48000 on Zynthian Ā· Issue #107 Ā· giulioz/jv880_juce Ā· GitHub

1 Like

Hello out there…

to cut a long story short (is it the right idiom???):

VirtualJV on Zynthian Vangelis (now Oram), HW is Pi5 / HifiBerry.

Jack is on 64 Frames at 48000Hz:

Did not encounter any aliasing or whatsoever.

Regards.

Thorsten

That’s interesting.

Just to be clear, here are examples of what I’m talking about:

44.1 kHz (clean, except for highest two notes):

48 kHz (artifacts start manifesting themselves already after a couple of octaves):

Recorded directly on Zynthian using the Audio Recorder. Played from a MIDI keyboard transposed up two octaves, so I believe that makes the lowest note played MIDI note 60 (middle C).

(It’s a V4 RPi5 Zynthian, with the original V4 hardware except for the RPi5, with the audio buffer size set to 128).

2 Likes

3] Use a Zynthian and a Mini-JV880-pi :smiley:

Though seriously, I haven’t tried that yet and would be quite interested to hear if there are any differences.

1 Like

Currently in ORAM 2511 I see all the presets in the VirtualJV GUI but no presets in the Zynthian GUI. Is the python script here supposed to give preset visability in the Zynthian GUI? Was it ever determined for the Aethermind execution why the script (once permissions were set) returned KeyError: ā€˜1’.

Thanks Harry