home *** CD-ROM | disk | FTP | other *** search
- anew task-fft_tools
-
-
- \ zeros out all magnitude values of a given partial
- \ same as 0 dim# FILL.DIM: MAGNITUDES.
-
- : ZERO.DIM.MAG ( dim# -- )
- 0 SWAP FILL.DIM: MAGNITUDES
- ;
-
- : ZERO.ALL.MAG
- WINDOW-SIZE @ 2/ 0 DO
- 0 I FILL.DIM: MAGNITUDES
- LOOP
- ;
-
- : ZERO.DIM.PHASE ( dim# -- )
- 0 SWAP FILL.DIM: PHASE-INDICES
- ;
-
- : ZERO.ALL.PHASE
- WINDOW-SIZE @ 0 DO
- 0 I FILL.DIM: PHASE-INDICES
- LOOP
- ;
-
- \ Fills values of a given partial with given value.
-
- : FILL.DIM.MAG ( value dim -- )
- SWAP 0 127 CLIPTO SWAP
- FILL.DIM: MAGNITUDES
- ;
-
- : FILL.DIM.PHASE ( value dim -- )
- SWAP 0 127 CLIPTO 0 |X|.SCALE.UP SWAP ( get value up where ifft can see it)
- FILL.DIM: PHASE-INDICES
- ;
-
- \ ************************** LISTENING STUFF *******************************
-
- : INIT.INSTRUMENTS
- TUNING-EQUAL PUT.TUNING: INS-AMIGA-1
- TUNING-EQUAL PUT.TUNING: INS-AMIGA-2
- 0 PUT.ENVELOPE: INS-AMIGA-1
- 0 PUT.ENVELOPE: INS-AMIGA-2
- SAMPLE-IN PUT.WAVEFORM: INS-AMIGA-1
- SAMPLE-OUT PUT.WAVEFORM: INS-AMIGA-2
- ;
-
- : PLAY.BOTH ( end-note start-note -- )
- INIT.INSTRUMENTS
- DEPTH 2 < IF cr ." PLAY.BOTH expects end and start notes" cr 50 30 THEN
- DO
- I 128 NOTE.ON: INS-AMIGA-1
- 700 MSEC
- I 128 NOTE.ON: INS-AMIGA-2
- 700 MSEC
- LOOP
- ;
-
- : PLAY.OUT ( end-note start-note -- )
- INIT.INSTRUMENTS
- DO
- I 128 NOTE.ON: INS-AMIGA-2
- 1000 MSEC
- LOOP
- ;
-
-
-
- \ THIS WORD TESTS INVERSE IFFT FOR A SIMPLE SINE WAVE ADDITION
-
- : INIT.SINE.TEST
- 60 1 FILL.DIM.MAG
- 40 2 FILL.DIM.MAG
- ;
-
-
- : COMPARE.THEM ( start -- prints values from sample-in and sample-out)
- CR ." INDEX SAMPLE-IN SAMPLE-OUT" CR
- MAX-SAMPLE-SIZE @ SWAP DO
- 5 SPACES I .
- 5 SPACES
- I AT: SAMPLE-IN .
- 10 SPACES
- I AT: SAMPLE-OUT .
- CR
- ?terminal if leave then
- LOOP
- ;
-
- : CCC COMPARE.THEM ;
-
- \ ******************************* PLOTTER **********************************
-
- \ These routines plot time sliced frequency spectra. You get a pretty picture
- \ of how the magnitudes of the partials are changing over time.
- \ Usage is PLOT.SLICES ( el# --), plots 50 time slices starting at el#.
-
- VARIABLE X.OFFSET
- VARIABLE Y.OFFSET
- VARIABLE MAG.INCREMENT
- 0 X.OFFSET !
- 0 Y.OFFSET !
- VARIABLE PLOT-SCALE
-
- : PLOT.TIME.SLICE ( el# --, plots spectrum at el#)
- DUP 0 ED.AT: MAGNITUDES PLOT-SCALE @ 100 */
- X.OFFSET @ SWAP 150 - ABS Y.OFFSET @ - GR.MOVE ( -- el#)
- WINDOW-SIZE @ 2/ 1 DO ( for each partial)
- I 600 WINDOW-SIZE @ 2/ / * ( horizontal subdivision)
- X.OFFSET @ + OVER I ED.AT: MAGNITUDES PLOT-SCALE @ 100 */
- 150 - ABS Y.OFFSET @ - GR.DRAW
- LOOP
- DROP
- ;
-
- \ 50 time slices spread by MAG.INCREMENT
-
- : PLOT.SLICES
- GR-CURWINDOW @ NOT IF GR.OPENTEST THEN
- GR.CLEAR
- CALC.STATS: MAGNITUDES
- 0 GET.DIM.MAX: MAGNITUDES ( -- start max)
- WINDOW-SIZE @ 2/ 1 DO
- I GET.DIM.MAX: MAGNITUDES ( -- start max.start max.new)
- MAX ( -- start new.max)
- LOOP
- 128 100 ROT */ PLOT-SCALE ! ( -- set max peak)
- 0 X.OFFSET !
- 0 Y.OFFSET !
- 50 MANY: MAGNITUDES MIN 0 DO
- X.OFFSET @ 3 + X.OFFSET !
- Y.OFFSET @ 3 + Y.OFFSET !
- I MAG.INCREMENT @ * PLOT.TIME.SLICE
- LOOP
- ;
-
- : PLOT.M
- MANY: MAGNITUDES 50 / MAG.INCREMENT !
- PLOT.SLICES
- ;
-
- : PLOT.FIRST.50
- 1 MAG.INCREMENT !
- PLOT.SLICES
- ;
-
- \ ******************** ENVELOPE GENERATOR FOR IFFT ADDITIVE SYNTH *************
-
- \ These routines make it easy to create simple n-stage envelopes, apply
- \ them to magnitudes of partials for resynthesis. Very much fun.
-
-
- OB.SHAPE ENV-TEMPLATE
-
- : STAGE.ENVELOPE ( #stages -- )
- FREE: ENV-TEMPLATE
- DUP DUP 2 NEW: ENV-TEMPLATE
- 0 60 1 PUT.DIM.LIMITS: ENV-TEMPLATE
- " POINT" 0 PUT.DIM.NAME: ENV-TEMPLATE
- " AMP" 1 PUT.DIM.NAME: ENV-TEMPLATE
- MANY: MAGNITUDES SWAP / SWAP 0 DO
- I OVER * 30 ADD: ENV-TEMPLATE
- LOOP
- DROP
- cr ." All amplitudes defaulting to 30" cr
- ;
-
- VARIABLE ELCOUNT
- VARIABLE TEMP-DIM
-
- : FILL.DIM.ENV ( dimension -- )
- TEMP-DIM !
- 0 ELCOUNT !
- MANY: ENV-TEMPLATE 1- 0 DO
- I GET: ENV-TEMPLATE I 1+ GET: ENV-TEMPLATE SET.INTERP
- I 1+ 0 ED.AT: ENV-TEMPLATE I 0 ED.AT: ENV-TEMPLATE DO
- I INTERP 0 127 CLIPTO ELCOUNT @ TEMP-DIM @ ED.TO: MAGNITUDES
- 1 ELCOUNT +!
- LOOP
- LOOP
- ;
-