| Re: [hatari-devel] STe DMA sound -> new downsampling method | 
[ Thread Index | 
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
] 
Le 15/04/2018 à 13:33, Nicolas Pomarède a écrit :
But in Hatari 2.1, ym2149 emulation is now cycle exact and produce a raw 
250 kHz sound output, containing all frequencies/periods (which is 
important to emulate some specific cases using low periods). The 250 kHz 
sample is then downsampled to the audio card output freq (44.1 kHz for 
example).
This is the tricky part ; there're tons of ways to do this, some very 
fast, some really slow (see audacity's quality parameter when 
downsampling for some examples).
For now, Hatari uses 2 methods to downsamples :
  - YM2149_Next_Resample_Nearest : simple "closest" sample choice, fast 
but will give aliasing
  - YM2149_Next_Resample_Weighted_Average_2 : interpolation of previous 
and next sample. This works quite well for low periods, but not for very 
low such as 1,2 or 3.
  - YM2149_Next_Resample_Weighted_Average_N : this is the missing 
function that was not available yet for Hatari 2.1 (no time to complete 
at this time when 2.1 was released)
For example, with per=0, you need to average approx 6 input samples to 
get 1 output sample. Weighted average on only 2 samples will not be 
enough to filter correctly, which might explain the 7 kHz freq you see 
in the result.
I will try to complete "Weighted_Average_N" in the next days/weeks, this 
might fix the problem (in all cases doing an average on "n" samples is 
needed for very low period, even if in most cases "n" will be 2 because 
it's very rare that period <= 6 are used)
Hi
better later than never :) , I finally added the missing function that 
average 'n' samples on the given interval.
Unlike the function currenltly used in Hatari 2.2.1 which used 2*44100 
samples to create an output sound at 44.1 kHz, leaving approx 2/3 of the 
250000 samples not taken into account, the new function will now use all 
the 250000 input samples to compute the 441000 output samples, thus 
leaving less artifacts when the input signal contains high freq YM sound.
I tried with "Lethal Xcess" and when using "effects only" I can hear a 
difference at the end of a game when reaching the hall of fame part and 
the digi drums are playing. The high sound that could be heard at the 
same time (because per=0 on voice C) is now gone with this new 
downsampling method.
This method should use slightly more cpu, but in the end sound 
processing is still rather small compared to the cpu and video 
emulation, so I don't think this new method will slow down emulation in 
a noticable way.
Vincent, could you give a try to the devel version of Hatari and 
see/hear if this improves/fixes the problem you reported  ?
Nicolas