Hop un petit morceau/programme (une démo) en c++ en utilisant OpenAl :
citation :
OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.
http://www.openal.org/
Le programme génère les formes d'ondes (sinus, kick, klick, square) au démarage et après une bête boucle les jouent ou changent les paramètres (pitch surtout) en fonctions du temps.
Instruction :
Dézipper, lancer "Synth.exe". Le reste c'est les sources pour les hypothétiques intéressés.
On pourrait "facilement" (ça demande juste du travail) rajouter d'autres formes d'ondes, faire de la modulation d'amplitude, de fréquences, du granulaire ou une partie graphique ou faire un vrai morceau.
La génération du kick (pour la beauté de la chose) :
ALshort kick[44100]; ALdouble amp[44100]; ALdouble frequence[44100]; //amplitude for (int t=0; t < 44099; t++) { amp[t]=32000 - t*32000/44099; } //frequence for (int t=0; t < 44099; t++) { frequence[t]=freq - t*freq/20000; if (frequence[t] < 20) frequence[t] = 0; } //kick for (int t=0; t < 44099; t++) { kick[t]=amp[t]*sin(2*PI * frequence[t]*t/44100); }
Bon après c'est facile à utiliser pour jouer un kick :
//on le déclare (le paramètre est la fréquence) :
SKick kick2(250);
//on définit un volume
kick2.setGain(0.6);
//pis on le joue
kick2.play();
Si ça intéresse quelqun on peut en discuter
Hors ligne
Ca a l'air intéréssant , ça me permetrait peut être de me mettre un peu au C.
Je regarde ça dès que j'ai un peu de temps.
Merci
3D audio API : ça signifie quoi API ?
Hors ligne
Ah oui, ça m'interesse grandement tout ça !!
J'y jete un oeil et je repasse en discuter
edit : le game over final laisse tourner une boucle en continue impossible à stopper... (et l'appli plante :s)
Aussi, à quoi sert le fichier "onde.txt" ? Il est généré ?
Hors ligne
En fait c'est un ensemble de fonctions que des gens en géneral plus compétents que toi on programmé et que tu peux utiliser sans trop savoir comment ça marche exactement dedans (il faut juste savoir comment les utiliser : connaitre l'interface). Par exemple OpenAl gère tout ce qui concerne la carte son, le chargement de fichiers, la spatialisation ; tu peux donner des coordonnées 3D à une source sonore et au l'auditeur (source et auditeur sont des concepts définit dans openal) et ça te spatialise le son en conséquence.
Comme autre API's par exemple y'a OpenGL (graphisme 3D), PortAudio qui serait peut-être plus approprié qu'OpenAl pour une application audio, ou des trucs plus simple avec des fonctions mathématiques (sinus, etc).
http://fr.wikipedia.org/wiki/Bibliothèque_logicielle
Normalement pour stopper l'apli à la fin il faut entre quelque chose au clavier et presser entré.
>Aussi, à quoi sert le fichier "onde.txt" ? Il est généré ?
Oui c'est un truc de déboggage que j'ai oublié d'enlever, ça écrit l'onde génerée dans un fichier text, ça permet de regarder la tête qu'elle a après avec matlab.
Hors ligne
Apres dezippage , lançage de l'exe il ne trouve pas le chemin vers OpenAl32.dll... je ne peux donc tester.
étrange...
Hors ligne
Bizzare, t'en as pas besoin normalement. Essai avec ça.
A mettre dans le même dossier que l'apli ou dans windows/system32
Hors ligne
Pour info le dll était dans un dossier lib , dans ton premier zip.
En l'ajoutant dans System 32 de win ça tourne nickel.
Je dois dire que je trouve ça super enthousiasmant et que ça me donne direct envie de modifier tes sources pour voir un peu ce qui se passe.
L'idéé de créér de petites applis ou des démos de A à Z me motive bien.
A suivre ...
Hors ligne
C# ! Hérésie !
Non heu, moi le c++ j'aime bien. Et puis dans ce genre Java serait mieux non ?
Si tu veux modifier les sources Tobald je te conseil devcpp :
http://www.bloodshed.net/devcpp.html
Tu peux ouvrir le fichier .dev que y'a dans le zip et c'est parti.
Hors ligne
Bah perso je ne code pas en C.. et c'est vrai que j'aurai plus tendance à partir sur du Java (où les normes sont plus proche de mes facons de coder)
Je vais me risquer quand meme aussi à modifier les sources pour mieux cerner le truc
Hors ligne
Pour le C++ mon frangin pourrait m'aider. De plus y'a pas mal de "trucs" à ce sujet sur les forums Buzz (les machines sont codées en C++)
Mon seul contact avec la programmation c'était appliquer des cheatcodes en utilisant le langage de l'Assembleur de mon C64.
je choppe dev Cpp
Hors ligne