Je suis en train d'essayer de faire un logiciel qui fait fonctionner le clavier comme un piano (par exemple, l'utilisateur appuie sur la touche «W» et les haut-parleurs jouent une note D). J'utiliserai probablement OpenAL. Je comprends les bases de l'audio numérique, mais jouer de l'audio en temps réel en réponse à des pressions sur les touches pose certains problèmes que je n'arrive pas à résoudre.Créer une application audio en temps réel avec des synthétiseurs logiciels
Voici le problème: Supposons que je dispose de 10 tampons audio et que chaque tampon contient une seconde de données audio. Si je dois remplir des tampons avant qu'ils ne soient lus par les haut-parleurs, alors je remplirais les tampons une ou deux secondes avant qu'ils ne soient joués. Cela signifie que chaque fois que l'utilisateur essaie de jouer une note, il y aura un délai d'une ou deux secondes entre la pression de la touche et la note jouée.
Comment contournez-vous ce problème? Est-ce que vous faites juste les tampons aussi petits que possible, et les remplissez le plus tard possible? Y a-t-il un truc qui me manque?
Cela a du sens. Pouvez-vous recommander des bibliothèques audio qui seraient bonnes pour cette approche de tampon unique? –
Oui. Sur Win32 c'est direct. Simle comme ça. Pour Linux je ne sais pas vraiment. Très probablement ALSA. Pour une solution purement matérielle (par exemple une chose embarquée) vous ne voulez pas du tout d'API mais vous voulez que votre routine soit appelée depuis un gestionnaire d'interruptions. –
Il n'est vraiment pas vrai que la plupart des synthétiseurs utilisent des tampons annulaires - VST et AudioUnits (donc, environ 90% du marché entre eux) utilisent l'approche multi-tampon avec de petits tampons. ALSA ne fournit pas d'équivalent du graphe de signaux DirectShow/Sound ou CoreAudio, mais il existe une abondance d'implémentations open source concurrentes. Quand il s'agit d'API pour soft-synthns en open-source, il a tendance à être VST tout le temps, en s'appuyant généralement sur la capacité de Linux de charger des fichiers exécutables Windows. – marko