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