view TODO.txt @ 96:6bf5220fa47e

Urgh .. use memset to silence some bogus GCC warnings about using potentially uninitialized values, while that will not actually be possible. In any case, it is annoying.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 02 Oct 2012 18:52:28 +0300
parents 32250b436bca
children
line wrap: on
line source

- HOX! envelope sustain ei toimi ihan oikein ilmeisesti!
  kts. crstrvl.xm

- volume envelopen asettama volyymi tarvitsee erillisen muuttujan
  vs. jmpCSet. sama homma panning envelopelle.

- lukitukset:
	- device
	- playeri

- tremolo, vibrato ym ... jääkö viimeinen taajuus/volume "päälle"?

- volume vibrato: miten volslide + volvibrato käyttäytyy?

- arpeggion toiminta? [korjattu nyt?]

- note delay: viivyttää nuottia ja samplea jne.

===============================================================================
FT2-emuloiva miksausrutiini
---------------------------
 - tarvitaan volume ramp-tuki, joka interpoloi halutulla aikavälillä
   volumen arvoa (per kanava). aikaväli voi olla lyhyempi kuin 1 frame,
   ts. rutiinin on tuettava miten pitkiä ramppeja vain

 - virtuaalikanavat: instrumentit soivat 0.005s päällekkäin, eli
 jonkinlainen virtuaalikanavointi on luultavasti käytössä


===============================================================================
Ext. instrument envelopejen toiminta
------------------------------------
suoritetaanko ext.instrumentteja jos pattern delay on voimassa?
 - kyllä. ja myös jos note delay. näillä ei ole mitään vaikutusta
   instrumentin envelopejen jne. toimintaan.


samplejen alussa oleva "volume ramp":

 - on ns. frame #0:n sisällä (mutta ei välttämättä framen pituinen)
 - ei riipu bpm:stä, speedistä tai sampletaajuudesta jne.
 - pituus aina 0.005 sekuntia, ts.
   len = 48000 * 0.005 = 240


frame = aika / tempo, eli esim. 125 bpm tempolla:

	1 frame = 1 sekunti / ((125 * 2) / 5)
	1 frame = 1 / 50

eli miksaustaajuudella "mixfreq", yhden framen pituus on

	frame.len = mixfreq / ((tempo * 2) / 5)

esim. 48kHz, 125bpm

	frame.len = 48000 / ((125 * 2) / 5)
	frame.len = 48000 / 50
	frame.len = 960 (samplea)

eli kyseessä on sama käsite/aikaväli millä playerin tick-funktioita
suoritetaan. on kuitenkin huomioitava seuraavat seikat:

1) FT2:n miksausrutiini interpoloi envelopejen arvot lineaarisesti
   yhden framen sisällä.

2) ensimmäinen envelopen piste (0) alkaa itseasiassa framesta #1!
   frame #0 sisältää inherentin 
   ts. jos on määritelty seuraavanlainen envelope:
   
   [0,32]-[16,63] 

   jossa luvut ovat aika eli framen numero (-1) ja arvo, esim.
   äänenvoimakkuus, niin lopputulos on miksatussa datassa:

   |        |                |    **|63 <- loppuarvo saavutetaan vasta
   |        |                |****  |      17. framen vaihteessa
   |        |            ****|      |
   |        |        ****    |      |
   |        |    ****        |      |
 32|....****|****            |      |32
   |   *:   |                |      |
   |  * :   |                |      |
   | *  :   |                |      |
   |*   :   |                |      |
   0    :   1               15     16
   ......
   volume ramp (0.005s)


3) jostain syystä FT2:n envelopen interpoloinnissa näkyy joskus omalaatuista
   epälineaarisuutta, mutta se saattaa olla täysin luonnollista. luultavasti
   ko. omituisuuden emulointi ei ole kannattavaa.

===============================================================================