[sdiy] Fourier Analysis Question

Scott Gravenhorst music.maker at gte.net
Fri Dec 17 15:26:03 CET 2010

Top-posted because I have nothing directly to add other than I am very interested in this
and will be following this thread.  It also reminds me that I need to learn about how to
do FFT (need to look for and at algorithms and methods).

Tom Wiltshire <tom at electricdruid.net> wrote:
>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. 
>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. 
>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.
>Synth-diy mailing list
>Synth-diy at dropmix.xs4all.nl

-- ScottG
-- Scott Gravenhorst
-- FPGA MIDI Synthesizer Information: home1.gte.net/res0658s/FPGA_synth/
-- FatMan: home1.gte.net/res0658s/fatman/
-- NonFatMan: home1.gte.net/res0658s/electronics/
-- When the going gets tough, the tough use the command line.

More information about the Synth-diy mailing list