2 minute read

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:

  1. Normalizzazione: Lo stato di densità viene normalizzato in un valore tra 0 e 1
    iNormalizedDensity = limit:i(iDensityState / 2.0, 0, 1)
    
  2. 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
  3. 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)
  4. 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%)
  5. 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:

  1. Durata degli Eventi: Determina quanto dura ogni singolo evento sonoro
  2. Sovrapposizione: In combinazione con i valori ritmici, determina quanti eventi possono sovrapporsi
  3. Densità Percepita: Durate armoniche lunghe con ritmi bassi creano tessiture sonore dense anche con pochi eventi

Utilizzo nel Sistema

Questo opcode viene utilizzato principalmente:

  1. Durante l’inizializzazione di nuovi comportamenti musicali
  2. Durante le transizioni tra stati sonori, in combinazione con generateRhythmsForState
  3. 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.