mapDensityToHarmonicDuration
Documentazione: mapDensityToHarmonicDuration
Descrizione Generale
L’opcode mapDensityToHarmonicDuration
è un componente fondamentale di Delta-Engine che traduce lo stato di densità sonora in una durata armonica appropriata. Questo opcode permette una relazione inversa e continua tra la densità degli eventi (quanti eventi si sovrappongono) e la durata armonica.
Firma della Funzione
opcode mapDensityToHarmonicDuration, i, i
iDensityState xin
; ...implementazione...
xout iDuration
endop
Parametri di Input
iDensityState
(i-rate): un valore continuo tra 0 e 2 che rappresenta lo stato di densità- 0: densità sparsa (pochi eventi sovrapposti)
- 1: densità media
- 2: densità densa (molti eventi sovrapposti)
Output
iDuration
(i-rate): la durata armonica in secondi
Funzionamento Dettagliato
L’opcode implementa un mapping non lineare tra stato di densità e durata armonica, seguendo questi passaggi:
- Normalizzazione: Lo stato di densità viene normalizzato in un valore tra 0 e 1
iNormalizedDensity = limit:i(iDensityState / 2.0, 0, 1)
- Interpolazione Esponenziale Inversa: Viene applicata una curva esponenziale inversa per creare una relazione naturale tra densità e durata
iExponentialFactor = 1 - (pow(iNormalizedDensity, 1.5))
- Questo crea una curva più pronunciata verso valori di densità alta
- La funzione esponenziale modificata assicura che:
- Densità 0 (sparsa) → factor ≈ 1.0
- Densità 1 (media) → factor ≈ 0.5
- Densità 2 (densa) → factor ≈ 0.0
- Calcolo Durata Base: La durata viene calcolata interpolando tra i valori minimo e massimo
iBaseDuration = iMinDuration + (iMaxDuration - iMinDuration) * iExponentialFactor
- Densità alta → durata breve (5-10 sec)
- Densità media → durata media (20-40 sec)
- Densità bassa → durata lunga (40-70 sec)
- Variazione Casuale: Viene aggiunta una leggera variazione per rendere il risultato meno meccanico
iVariationRange = iBaseDuration * 0.15 iDuration = iBaseDuration + random(-iVariationRange, iVariationRange)
- La variazione è proporzionale alla durata base (±15%)
- Limiti di Sicurezza: Il risultato viene vincolato entro limiti ragionevoli
iDuration = limit:i(iDuration, iMinDuration, iMaxDuration)
Relazione con Altri Parametri
La durata armonica è un parametro cruciale che influenza direttamente:
- Durata degli Eventi: Determina quanto dura ogni singolo evento sonoro
- Sovrapposizione: In combinazione con i valori ritmici, determina quanti eventi possono sovrapporsi
- Densità Percepita: Durate armoniche lunghe con ritmi bassi creano tessiture sonore dense anche con pochi eventi
Utilizzo nel Sistema
Questo opcode viene utilizzato principalmente:
- Durante l’inizializzazione di nuovi comportamenti musicali
- Durante le transizioni tra stati sonori, in combinazione con
generateRhythmsForState
- Per mantenere coerenza tra la densità target e la durata degli eventi
Esempio di Mapping
Densità (stato) | Normalizzata | Factor | Durata Appross. |
---|---|---|---|
0 (sparsa) | 0.0 | ~1.0 | 70 sec |
0.5 | 0.25 | ~0.85 | 60 sec |
1.0 (media) | 0.5 | ~0.65 | 45 sec |
1.5 | 0.75 | ~0.35 | 25 sec |
2.0 (densa) | 1.0 | ~0.0 | 5 sec |
La curva esponenziale assicura un decremento più rapido della durata quando ci si avvicina alla densità massima, creando una transizione musicalmente naturale.