Systèmes Temps Réel en Audio Professionnel - h-deb

Transcription

Systèmes Temps Réel en Audio Professionnel - h-deb
Systèmes Temps Réel
en Audio Professionnel
David Viens
Président
Plogue Art et Technologie, Inc.
www.plogue.com
Expérience
CAE Électronique (1998 – 2001)
●
-Digital Voice: voix simulée de la tour de contrôle.
Snell & Wilcox (2001-2004)
●
-Système de montage vidéo non linéaire:
-Composantes multi-piste audio
-Contrôle de Beta HDCAM sur RS422
2
Plogue Art et Technologie, Inc. (2000 - Maintenant)
Bidule: Logiciel audio modulaire
●
ARIA: Moteur d'Instruments Virtuels
●
Garritan Steinway (2008): Piano Virtuel
●
Plogue chipsounds (2009): Synthétiseur 8bit
●
Plogue chipcrusher (2013): Effet audio 8bit
●
Plogue chipspeech (2015): Synthétiseur vocal
●
3
Exemples classiques de STR
Avioniques
●Robots
●Systèmes médicaux
●Centrale nucléaire
●Freins ABS
●
4
LATENCE?
Haute Latence(500ms+): FACILE!
Media Player
●Itunes
●VLC
●
Medium Latence:(+-50ms): OK.
Jeux vidéos
●Téléphones IP
●
Basse Latence (10ms et -): OUF!
Synthétiseurs
●Boite à Rythmes
●Effet de guitare ou voix (Réverbération, Autotune)
●
5
Jeu du musicien
Attentes d'un claviériste
●Attentes d'un guitariste
●Différence de feeling
●Perception stéréo, spacialisation
●
** EXEMPLE AUDIO LATENCE **
Bref, en pro-audio, la latence
doit être la plus basse possible!
6
Question!
S'agit-il de temps réel strict ou souple?
http://en.wikipedia.org/wiki/Real-time_computing:
Hard – missing a deadline is a total system failure.
Firm – infrequent deadline misses are tolerable, but
may degrade the system's quality of service. The
usefulness of a result is zero after its deadline.
Soft – the usefulness of a result degrades after its
deadline, thereby degrading the system's quality of
service.
7
Dégradations en jeux video
Fog
Skip frame/Variable frame rate (scène/effet
complexe) … pas si grave!
Mais... Impossible en audio du à la nature du son!!!
On ne peut simplement PAS dire:
« Au diable cette 'Frame'! »
Frame audio typique: tampon manquant de 256
échantillons peut créer bien des ennuis!
**Écoutez les cinq exemples audio suivants
8
Répercutions de telles distorsions
Sale de spectacle (niveau élevé)
Clients déçus
Critiques négatives (blogueurs/magasines)
Traitons cela comme du
temps réel strict!!!
.... Mais étais-ce possible à réaliser sur un PC?
9
Latence: Critère de performance le plus important
Quelle serait une latence minimale et réaliste sur un
PC roulant Windows NT (XP/Vista/W7)???
Convertisseur audio numériques (DAC) : 30-50
échantillons:
1 à 1.5 ms
Latence d'interruption (IRQ): DPC - » pilote :
1 à 100 ms
« Schedulleur » et la transition de thread vers espace
usager: (Variable selon le pilote et l'API utilisé, la
charge existante sur le système), disons
1 à 3 ms
Strict minimum 3ms, soyons réalistes et doublons!
5 à 6 ms est un standard 'safe' en Audio.
Mémoire Tampon de 256 échantillon: 172.27 appels/s
@ 44100Hz (Qualité CD) – un tampon par canal
10
Thread de rendu audio VS Thread d'évènements MIDI
IRQ CB
temps
IRQ CB
Bloc à rendre
Bloc à rendre
Do Ré
Translation
Do Ré
Driver Thread
(time critical)
MIDI Thread
Temps
calcul requis
11
Imprévus de rendu
Changements dynamiques de paramètres,
notes. (UI, autres threads)
Changement d'instruments
Ressources à lire au hasard!
12
Bloc Moteur d'instrument Virtuel avec Aria
Moteur
Instrument
Instrument
Instrument
Logique
Couche
Couchesonore
-Source
Couchesonore
-Source
-Logique
-Interpolation source sonore
-Logique
-Effets
locaux
-Articulations
-Effets
locaux musicales
-Effets locaux
Mixage des couches
Effet Instrument
Effet Instrument
Effet Instrument
Mixage des Instruments
Effet Global
Effet Global
Effet Global
13
Exemple naïf
//toutes les 5ms!
void Engin::process(float*tampon, size_t samples){
//assurément long
appliquer_changement_scene();
//possiblement juste trop long
appliquer_changement_variables();
faire_rendu(tampon,samples);
}
14
Exemple multiplatforme standard
void Engin::process(float*tampon, size_t samples){
if(_mutex_changement_scene->tryLock()){
if(_mutex_dyn_params->tryLock()){
copie_queue(_q_interne,_q_externe);
_q_externe.clear();
_mutex_dyn_params->unlock();
}//ne gardons pas longtemps le lock!
if(!_q_interne.empty()){
appliquer_variables(_q_interne);
_q_interne.clear();
}
_scene->render(tampon,samples);
_mutex_changement_scene->unlock();
}
else
memset(tampon,0,sizeof(float)* samples);
}
15
Améliorations à l'échange de paramêtres
Atomic/Lock free.
(Brevets/multi-platform)
Memory Barrier
Toutes ces belles choses dans
C++11 que j'ai pas eu encore le
temps de lire :)
16
Pour en rajouter
Plugin vs Hôte
-thread scheduling pas notre domaine!
Offline vs Real time
-rendu offline plus rapide que real time j'ai gagné?
17
Stratégies d'optimisation
Beau code ou code efficace à tout prix? Juste millieu.
Connaître le temps d'exécution pire cas
Réduire consommation mémoire (ou pas?)
-Préallouer le strict minimum pour une tâche
-Pools, std::container.reserve()
-Recycler les derniers blocks utilisés
I/O asynchrones
Psychoacoustique (note stealing)
Profiler quand une composante majeure
change.
*** DEMO Vtune ***
18
Optimisation: Quelques Citations (Wikipedia)
"We should forget about small efficiencies, say about 97% of the time:
premature optimization is the root of all evil." (Knuth, Donald.
Structured Programming with go to Statements, ACM Journal
Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.)
"I agree with this. It's usually not worth spending a lot of time microoptimizing code before it's obvious where the performance bottlenecks
are. But, conversely, when designing software at a system level,
performance issues should always be considered from the beginning.
A good software developer will do this automatically, having
developed a feel for where performance issues will cause problems.
An inexperienced developer will not bother, misguidedly believing that
a bit of fine tuning at a later stage will fix any problems." Charles
Cook
“More computing sins are committed in the name of efficiency (without
necessarily achieving it) than for any other single reason - including
blind stupidity.” - W.A. Wulf
“Bottlenecks occur in surprising places, so don't try to second guess
and put in a speed hack until you have proven that's where the
bottleneck is.” - Rob Pike
19

Documents pareils