Re: [hatari-devel] Gain too low in DmaSnd_LowPassFilter for STE ?

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]


----- Nicolas Pomarède wrote:
> Hi
> 
> as discussed here 
> http://atari-forum.com/viewtopic.php?f=16&t=29615&p=299270#p299270 the 
> STE DMA sound samples can't be heard when using an output freq < 50066 
> Hz in Hatari (for example, try "salamander : planet latis")
> 
> At 50066 Hz you hear the samples, but at 48 kHz you don't hear them 
> anymore. This is because 50066 explicitely turn DMA low pass filter OFF 
> in the code path.
> 
> David, do you think it would be possible to increase the gain in 
> DmaSnd_LowPassFilter to hear the samples even when using < 50 kHz output 
> freq ?
> 
> Note that in this music demo, samples already have a low volume (if you 
> just listen to the wav file with Audacity for example), so maybe the 
> fact that the sample don't use the full 8 bit range is fooling the 
> filter and you get an even lower volume in the end ?
> 
> Nicolas
> 
Hi,

I will look into this later today. Note that 55 KHz has no filter so
that one can re-sample it with their own filter, thus, 55 KHz
samples should be sharper than a real STE.

The low pass filter Hatari uses filters high frequencies a little
too much.

see /****** return (in * 3) << 3;  */ below. Which refers to
hatari/src/dmaSnd.c

This will increase the gain by approx 3dB

Experiment until you like it. Note that low frequencies will
be boosted also. Note that just increasing the cutoff
frequency will require an expensive filter.

/**
 * LowPass Filter Left
 */
static Sint16 DmaSnd_LowPassFilterLeft(Sint16 in)
{
	static	Sint16	lowPassFilter[2] = { 0, 0 };
	static	Sint16	out = 0;

	if (DmaSnd_LowPass)
	{
		out = lowPassFilter[0] + (lowPassFilter[1]<<1) + in;
		lowPassFilter[0] = lowPassFilter[1];
		lowPassFilter[1] = in;

		return out; /* Filter Gain = 4 */
	}else
	{
		return in << 2;  /****** return (in * 3) << 3;  */
	}
}

/**
 * LowPass Filter Right
 */
static Sint16 DmaSnd_LowPassFilterRight(Sint16 in)
{
	static	Sint16	lowPassFilter[2] = { 0, 0 };
	static	Sint16	out = 0;

	if (DmaSnd_LowPass)
	{
		out = lowPassFilter[0] + (lowPassFilter[1]<<1) + in;
		lowPassFilter[0] = lowPassFilter[1];
		lowPassFilter[1] = in;

		return out; /* Filter Gain = 4 */
	}else
	{
		return in << 2;  /****** return (in * 3) << 3;  */
	}
}




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/