fluid-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[fluid-dev] DSP testing


From: Peter Hanappe
Subject: [fluid-dev] DSP testing
Date: Mon, 29 Mar 2004 19:46:22 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031107 Debian/1.5-3

Hi all,

1)

I started to set up a series of tests to validate the DSP of the
synthesizer. It's been a slow process so I can't say much, yet.

The first test was simply checking the audio going straight through
the synthesizer. When playing a sample at the rootkey and velocity
127, the output is identical to the original sample. Even when forcing
it to go through the filter.

The second test was to verify the reverb module. I compared the output
of the synthesizer with the original sound file processed with the
Freeverb3 LADSPA plugin. I changed some of the internal parameters to
match those of the Freeverb3 plugin. After those changes, the output
of FluidSynth is identical to the output of the plugin.

I verified the signals through visual inspection of the wave forms,
calculating their correlation, and simply listening.

2)

A should add a note on how the parameters of the original Freeverb3
code relate the the reverb parameters in FluidSynth. I write this down
also as I kind of reference and for documentation purposes.

Freeverb3 has 6 parameters: freeze mode, room size, damping, width,
wet, and dry. The room size, the width, and the damping are identical
in both Freeverb3 and FluidSynth. Their values should be between 0 and
1. FluidSynth does not have the freeze mode. If I understand
correctly, toggling the reverb to freeze mode silences the audio input
and outputs the audio still in the delay lines.

The wet and the dry parameters specify the gain of reverberated signal
(the wet signal) and the gain of the direct signal (the dry
signal). In FluidSynth, this balance between reverberated versus
direct signal is specified by the "reverb_send" generator in the
SoundFont.

Maybe a little diagram explains things more clearly:

* Freeverb3 uses the dry and wet parameters to mix the original and
  reverb signal:

  input -+----------[ * dry]-+-> output
         |                   |
         +-[reverb]-[ * wet]-+

* FluidSynth Freeverb uses the reverb_send parameter:

  output synth -[ * gain]-+------------------------+--> output
                          |                        |
                          +-[ * rev_send]-[reverb]-+

The reverb_send parameter has the same effective scale as the wet
parameter: a reverb_send of 100% corresponds to a wet value of 1.

Since the synthesis model of the SoundFont2 specification mixes the
return of the reverb with the original, the dry parameter is not used.

Of the arguments to the function fluid_synth_set_reverb() in the
FluidSynth API, only the roomsize, damping, and width are taken into
account. The 'level' argument, which is the 'wet' value, is ignored
because reverb_send fills in that function.



I hope this was useful.

Cheers,
Peter







reply via email to

[Prev in Thread] Current Thread [Next in Thread]