mungewell / A5Voice

HydraSynth util to replace/alter the Waveforms in the 'A5Voice' segment
MIT License
5 stars 1 forks source link

Filtering on the 17 waves (in each waveform) #3

Open mungewell opened 1 month ago

mungewell commented 1 month ago

From looking at a complex wave, we can see that the 17 waves appear to have some filtering. It's been suggested that this is done to make the realtime processing of the wave easier. montage

There is the 'wv2' parameter which is progressively lower, so does this represent a cut-off frequency?

wv2 = 15616 14848 14080 13312 12544 11776 11008 10240 9472 8704 7936 7168 6400 5632 4864 4096 3328

Can we use the 'harmonic series' (waveforms 196 thru 218) to work out what's what?

mungewell commented 1 month ago

Can we use the 'harmonic series' (waveforms 196 thru 218) to work out what's what? montage.zip

mungewell commented 1 month ago

So, it is NOT to do with low-pass filtering (as the filter is turned), but IS the waves that are played for different octaves on the keyboard. I presume that the filtering is to prevent higher harmonics getting close to the sampling frequency of the output.

I built a 'franken wave' collection: montage_2

With the lowest notes having a 16Kbyte sample to work with, and the highest having 4Kbyte.

# Franken #2 - different wave in 17 wave locations
cp `ls *_16_0.raw`      ../franken/franken_2_0.raw      # Low C -> G#
cp `ls *_15_1.raw`      ../franken/franken_2_1.raw      # A -> E
cp `ls *_14_2.raw`      ../franken/franken_2_2.raw      # F -> C
cp `ls *_13_3.raw`      ../franken/franken_2_3.raw      # C# -> G#
cp `ls *_12_4.raw`      ../franken/franken_2_4.raw      # A -> E
cp `ls *_11_5.raw`      ../franken/franken_2_5.raw      # F -> C
cp `ls *_10_6.raw`      ../franken/franken_2_6.raw      # C# -> G#
cp `ls *_9_7.raw`       ../franken/franken_2_7.raw      # A -> E
cp `ls *_8_8.raw`       ../franken/franken_2_8.raw      # F -> C
cp `ls *_7_9.raw`       ../franken/franken_2_9.raw      # C# -> E
cp `ls *_6_10.raw`      ../franken/franken_2_10.raw     # F -> C
cp `ls *_5_11.raw`      ../franken/franken_2_11.raw     # C# -> A#
cp `ls *_4_12.raw`      ../franken/franken_2_12.raw     # B -> A#
cp `ls *_3_13.raw`      ../franken/franken_2_13.raw     # B -> F#
cp `ls *_2_14.raw`      ../franken/franken_2_14.raw     # G -> ????
cp `ls *_1_15.raw`      ../franken/franken_2_15.raw     # 
cp `ls *_0_16.raw`      ../franken/franken_2_16.raw     # -> High C

franken_wave.sh.txt

Lost track of which wave was which at the higher harmonics as it's not clear on the screen. Have to dig out a scope...

mungewell commented 1 month ago

Made another wave, but my 'old' ears can't here the changes at the top end... franken_wave.pdf

mungewell commented 1 month ago

montage_annotated

mungewell commented 1 month ago

The harmonic series is actually multiples of the regular Sine and are low pass filtered...