eventi a tempo per la modulazione dell'audio in tempo reale

2

Sono molto nuovo per la programmazione audio e sto avendo problemi a trovare il giusto tipo di algoritmo per convertire eventi di controllo (ad esempio MIDI) in genesi sonora in tempo reale con un buffer.

Al momento sto cercando di convertire i dati provenienti da una rotella di modulazione per alterare l'intonazione di un'onda sinusoidale. Su un thread sto memorizzando gli eventi che arrivano in un buffer circolare, con il valore e il timeStamp di quando si sono verificati. Sul thread audio, ho bisogno di costruire un buffer con l'onda sinusoidale usando la mappatura di frequenza arbitraria value- & gt ;.

Come si fa normalmente per prestazioni ottimali, cioè se il buffer è molto basso, si prende solo il valore più recente per il controllo, si interpola o quale algoritmo si fa per ottenere un valore per il controllo a ogni campione?

    
posta james_alvarez 21.02.2015 - 19:11
fonte

1 risposta

1

nel thread di controllo MIDI, si aggiornano i valori di controllo non appena viene ricevuto il messaggio di modifica controllo MIDI completo (0xB0). quel valore di controllo rimane costante fino a quando non viene aggiornato da un altro cambio di controllo (per lo stesso controllo).

nel thread di elaborazione audio, si fa sempre riferimento al valore corrente di qualsiasi controllo si sta utilizzando. probabilmente ridimensionerai e spostando il valore di controllo in modo che 0x0000 sia mappato su un valore MIN e in modo che 0x3FFF sia mappato su alcuni valori MAX.

forse ci sarà la rotazione o il portamento, ma questa è l'elaborazione eseguita nel thread di elaborazione audio a il valore di controllo in scala. la rotazione avviene sempre verso il valore target che è il valore in scala corrente di quel controllo MIDI. può essere lineare o, più semplicemente, un esponenziale decadente:

value = (1.0 - slew_rate)*value + slew_rate*target_value;

non è particolarmente sofisticato.

    
risposta data 21.02.2015 - 22:21
fonte

Leggi altre domande sui tag