[sdiy] Fourier Analysis Question
Tom Wiltshire
tom at electricdruid.net
Fri Dec 17 16:09:19 CET 2010
Hi All,
The last few days I've been messing around doing various analyses of piano tones, recorded from my old piano downstairs. I've come up with a question, at the foot of this mail. The next bit is how I got to the question, which you may or may not find interesting.
<background>
I started off by looking at attack times, since it occurred to me to wonder whether the typical synth trick of sending velocity to envelope times (higher velocity=shorter attack) was justified by evidence or "just seems right".
I still don't have a definitive answer, but on the face of it, it seems not to be so for my piano. The attacks in general seem to have the same *rate* of attack, with louder notes attacking for longer. The other important pattern is (unsurprisingly) that lower notes have slower attacks than the higher ones. Neither relationship seems to be simply linear, but we could be polite and say it's a "highly nonlinear" piano.
I've also been doing fourier analysis of the piano note samples. I've tried both analysing single samples from various parts of the waveform and the whole note sample as a unit (80 or 100,000 samples perhaps). Doing this latter, it is possible to generate a highly accurate fourier series for the sample. I've done this up to 3000 harmonics (e.g. the lowest 3000 of the 50,000 possible for a 100K Sample). The output from the fourier function is a pair of arrays containing the magnitudes and phases of 3000 sine waves that can be used to reconstruct the original sample.
Comparing a resynthesized version of this sample with the original produces a file which is indistinguishable from the original. Examples below:
The original note sample
http://electricdruid.com/piano/original.aiff
The resynthesized note
http://electricdruid.com/piano/resyn_note_3000.aiff
The differences between them (remaining high end which has not been analysed)
http://electricdruid.com/piano/resyn_error_3000.aiff
I'd also like to generate a sequence of waveforms for use as a wavetable from this note. I can do this by finding and analysing single cycle waveforms from the sample, but I'd like to know if there's any mathematical way to do it. I'd like to replace the 3000-point fourier result with a series of small (say 128-point) fourier 'snapshots'. Synthesis of a piano note would then come down to building a wavetable when the sound is loaded and then interpolating sequentially between individual waveforms to create the final sound.
</background>
So the question is this:
Can you break one long fourier analysis result into an approximate copy based on a series of lower resolution fourier analyses without going back to the time domain?
Any clues or comments appreciated.
Thanks,
Tom
More information about the Synth-diy
mailing list