SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
AUDIO PROC´EDURAL,
LA R´EVOLUTION WEBASSEMBLY !
St´ephane Letz, Yann Orlarey
GRAME–CNCM
Introduction
Audio proc´edural performant
=
WebAudio API + WebAssembly+ Faust
Introduction
L’audio procedural est une forme de synth`ese audio en
temps-r´eel orient´ee notamment vers la g´en´eration
algorithmique de sons musicaux ou non comme moteurs,
pluie, vent, feu, etc.
Avoir de l’audio proc´edural `a vitesse quasi-native dans le
web devient possible grˆace `a la conjonction de plusieurs
technologies:
WebAudio API
WebAssembly
Compilateurs (Emscripten, Faust, etc.)
La Web Audio API
AudioNodes natifs que l’on combine (filtres, oscillateurs,
sources, effets)
ScriptProcessorNode : noeuds programmables en
Javascripts/Asm.js/WebAssembly
AudioWorkers remplaceront les noeuds programmables
Performances de la WebAudio API
Individuellement, les noeuds natifs sont plus performants que
les noeuds programmables
Mais un ensemble de noeuds natifs est moins performant
qu’un noeud programmable ´equivalent ´ecrit en WebAssembly
De plus il est difficile de d´ecrire un syst`eme audio complexe
rien qu’avec les noeuds natifs
Il est donc important d’avoir des noeuds programmables
performants
WebAssembly
Un langage de programmation de bas niveau cr´e´e en
coop´eration par Mozilla, Google, Apple et Microsoft
Un format textuel ainsi qu’un format binaire compact,
portable, rapide `a charger et `a compiler
Un compilateur int´egr´e dans les principaux navigateurs
Des performances proches du code natif
Quels navigateurs ?
Exemple de code WebAssembly
Compilateurs de/ vers WebAssembly
Binaryen (WebAssembly → WebAssembly)
Cheerp (C++ → Javascript/Asm.js/WebAssembly )
Emscriten (C/C++/LLVM, → Asm.js/WebAssembly))
Faust (Faust → Asm.js/WebAssembly/C/C++/. . . )
mir2wasm (Rust → WebAssembly)
TeaVM (Java bytecode → Javascript/WebAssembly)
WAVM (WebAssembly → LLVM → natif)
Faust
Faust
Faust est un langage de programmation con¸cu sp´ecialement pour
d´ecrire des instruments de musique ´electronique.
Faust
Exemple de code Faust:
Structure du compilateur:
Faust
FaustPlayground (http://faust.grame.fr/faustplayground)
Programmation Faust simplifi´ee.
Compilateur Faust → asm.js int´egr´e `a la page Web.
Faust
Faust Editor (http://faust.grame.fr/editor)
Editeur de code Faust.
Compilateur Faust → WebAssembly int´egr´e `a la page Web
Demo
Comparaison entre C++, LLVM IR et WebAssembly
Optimisations introduites par Binaryen
Gestion des denormals
Performance des navigateurs
Comparaison code natif avec navigateurs en WebAssembly
Conclusion
La promesse de code portable et efficace est en passe d’ˆetre
r´ealis´ee !
Le ratio par rapport `a du code natif : entre x2 et x1.2
On peut envisager `a termes de nouvelles fa¸cons de publier des
applications audio, et de simplifier la publication
d’applications audio pour les smartphones
Dans le cadre de la cr´eation musicale contemporaine ces
technologies ouvrent de nouvelles possibilit´es pour la pratique
amateur
Quelques petits probl`emes restent `a r´egler: nombres flottants
”d´enormalis´es”, latence, priorit´e du thread audio, instructions
SIMD, parall´elisation, etc.
Perspectives
Voici le type d’applications que l’on aimerais voir fonctionner dans
le Web `a terme: Guitar et GeoShred (Moforte)

Mais conteúdo relacionado

Mais de La Cuisine du Web

Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONTour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONLa Cuisine du Web
 
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARDStream processing en mémoire avec Hazelcast Jet par Claire VILLARD
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARDLa Cuisine du Web
 
Programming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERProgramming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERLa Cuisine du Web
 
La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La Cuisine du Web
 
Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNELa Cuisine du Web
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSLa Cuisine du Web
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDLa Cuisine du Web
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETLa Cuisine du Web
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELLa Cuisine du Web
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNLa Cuisine du Web
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMELa Cuisine du Web
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...La Cuisine du Web
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...La Cuisine du Web
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIALa Cuisine du Web
 
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...La Cuisine du Web
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETLa Cuisine du Web
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...La Cuisine du Web
 
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...La Cuisine du Web
 
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...La Cuisine du Web
 
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXPratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXLa Cuisine du Web
 

Mais de La Cuisine du Web (20)

Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSONTour d’horizon de l’écosystème React-ien par Guillaume BESSON
Tour d’horizon de l’écosystème React-ien par Guillaume BESSON
 
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARDStream processing en mémoire avec Hazelcast Jet par Claire VILLARD
Stream processing en mémoire avec Hazelcast Jet par Claire VILLARD
 
Programming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGERProgramming is Fun par Francis BELLANGER
Programming is Fun par Francis BELLANGER
 
La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...La démarche communautaire au coeur de la croissance de votre entreprise par H...
La démarche communautaire au coeur de la croissance de votre entreprise par H...
 
Qui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNEQui est ton client ? par Audrey JULIENNE
Qui est ton client ? par Audrey JULIENNE
 
Cloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUSCloaking is not a crime par Patrick VALIBUS
Cloaking is not a crime par Patrick VALIBUS
 
Electron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARDElectron, une alternative intéressante ? par Florent MOIGNARD
Electron, une alternative intéressante ? par Florent MOIGNARD
 
CSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANETCSS orienté objet par Lenny ROUANET
CSS orienté objet par Lenny ROUANET
 
Automatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDELAutomatiser la mise en production d’un site web par Nicolas KANDEL
Automatiser la mise en production d’un site web par Nicolas KANDEL
 
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANNDesign Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
Design Sprints : Créons un monde meilleur ! par Jelto VON SCHUCKMANN
 
Fontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMMEFontes variables, la matrice typographique par Malou VERLOMME
Fontes variables, la matrice typographique par Malou VERLOMME
 
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
Le design agile : 6 techniques pour designer de façon plus agile par Matthieu...
 
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
Réalité virtuelle et augmentée, ces nouvelles technologies au service de la f...
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIA
 
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
Voyage au centre du cerveau humain ou comment manipuler des données binaires ...
 
Ciel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSETCiel mon smartphone ! par Damien GOSSET
Ciel mon smartphone ! par Damien GOSSET
 
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
Data Creativity, comment interpréter les tendances consommateurs grâce au Dat...
 
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
Startup 101 : tester, itérer,... puis dépenser ? par Clémence GUILLUY - Jade ...
 
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
Apprentissage statistique et analyse prédictive en Python avec scikit-learn p...
 
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUXPratiques de management pour l'ère du numérique par Cecil DIJOUX
Pratiques de management pour l'ère du numérique par Cecil DIJOUX
 

Audio procédural : la révolution WebAssembly ! par Yann ORLAREY

  • 1. AUDIO PROC´EDURAL, LA R´EVOLUTION WEBASSEMBLY ! St´ephane Letz, Yann Orlarey GRAME–CNCM
  • 3. Introduction L’audio procedural est une forme de synth`ese audio en temps-r´eel orient´ee notamment vers la g´en´eration algorithmique de sons musicaux ou non comme moteurs, pluie, vent, feu, etc. Avoir de l’audio proc´edural `a vitesse quasi-native dans le web devient possible grˆace `a la conjonction de plusieurs technologies: WebAudio API WebAssembly Compilateurs (Emscripten, Faust, etc.)
  • 4. La Web Audio API AudioNodes natifs que l’on combine (filtres, oscillateurs, sources, effets) ScriptProcessorNode : noeuds programmables en Javascripts/Asm.js/WebAssembly AudioWorkers remplaceront les noeuds programmables
  • 5. Performances de la WebAudio API Individuellement, les noeuds natifs sont plus performants que les noeuds programmables Mais un ensemble de noeuds natifs est moins performant qu’un noeud programmable ´equivalent ´ecrit en WebAssembly De plus il est difficile de d´ecrire un syst`eme audio complexe rien qu’avec les noeuds natifs Il est donc important d’avoir des noeuds programmables performants
  • 6. WebAssembly Un langage de programmation de bas niveau cr´e´e en coop´eration par Mozilla, Google, Apple et Microsoft Un format textuel ainsi qu’un format binaire compact, portable, rapide `a charger et `a compiler Un compilateur int´egr´e dans les principaux navigateurs Des performances proches du code natif
  • 8. Exemple de code WebAssembly
  • 9. Compilateurs de/ vers WebAssembly Binaryen (WebAssembly → WebAssembly) Cheerp (C++ → Javascript/Asm.js/WebAssembly ) Emscriten (C/C++/LLVM, → Asm.js/WebAssembly)) Faust (Faust → Asm.js/WebAssembly/C/C++/. . . ) mir2wasm (Rust → WebAssembly) TeaVM (Java bytecode → Javascript/WebAssembly) WAVM (WebAssembly → LLVM → natif)
  • 10. Faust
  • 11. Faust Faust est un langage de programmation con¸cu sp´ecialement pour d´ecrire des instruments de musique ´electronique.
  • 12. Faust Exemple de code Faust: Structure du compilateur:
  • 13. Faust FaustPlayground (http://faust.grame.fr/faustplayground) Programmation Faust simplifi´ee. Compilateur Faust → asm.js int´egr´e `a la page Web.
  • 14. Faust Faust Editor (http://faust.grame.fr/editor) Editeur de code Faust. Compilateur Faust → WebAssembly int´egr´e `a la page Web
  • 15. Demo
  • 16. Comparaison entre C++, LLVM IR et WebAssembly
  • 20. Comparaison code natif avec navigateurs en WebAssembly
  • 21. Conclusion La promesse de code portable et efficace est en passe d’ˆetre r´ealis´ee ! Le ratio par rapport `a du code natif : entre x2 et x1.2 On peut envisager `a termes de nouvelles fa¸cons de publier des applications audio, et de simplifier la publication d’applications audio pour les smartphones Dans le cadre de la cr´eation musicale contemporaine ces technologies ouvrent de nouvelles possibilit´es pour la pratique amateur Quelques petits probl`emes restent `a r´egler: nombres flottants ”d´enormalis´es”, latence, priorit´e du thread audio, instructions SIMD, parall´elisation, etc.
  • 22. Perspectives Voici le type d’applications que l’on aimerais voir fonctionner dans le Web `a terme: Guitar et GeoShred (Moforte)