C'est le buzzer intégré à la carte mère que tu veux piloter (celle qui bip au BIOS) ? Pas plutôt la carte son ?
Dans un cas comme dans l'autre, c'est l'OS qui est important avant le langage. Donc quel OS.
Pour linux et une carte son, tu as 2 niveaux où attaquer: le pilote de la carte son alsa en direct (mais alors la carte son ne peut pas être partagée avec une autre appli), ou bien le serveur de son (probablement pulseaudio, jack pour les systèmes orientés audio-pro). Après c'est "juste" remplir des tableaux de valeurs à balancer au pilote, le format dépendant du chemin que tu as choisi (alsa en 8, 16, 24 bits, jack en float...), et la possibilité ou pas de rééchantilloner à la volée.
Pour le buzzer, si je me rappelle bien ce n'est pas la même bestiole, tu lui donnes la fréquence à émettre, c'est gérer par le pilote de console. Cherche KIOCSOUND pour avoir plus d'info.
Si c'est pour windows je botte en touche.
09/11/2016, 16h30
#4
Forthman
Date d'inscription
juin 2016
Localisation
82
Âge
48
Messages
388
Re : Générer un signal sonore
Le HP de la carte mère ne peut sortir que du TTL, (en plus il y en a de moins en moins sur les cartes) donc...
Aujourd'hui
A voir en vidéo sur Futura
10/11/2016, 21h58
#5
LeMulet
Date d'inscription
septembre 2016
Âge
56
Messages
1 541
Re : Générer un signal sonore
Envoyé par klark
Je cherche comment générer un signal sonore en langage C/C++. Par exemple un signal sonore de type que je l'envoie à l'haut-parleur du PC.
Sous Windows.
1) S'il s'agit du haut-parleur du PC, alors on parle du buzzer intégré à la carte mère.
2) Mais s'il s'agit des haut-parleurs que l'on peut connecter à la carte son du PC (intégrée) ou à une carte son additionnelle, la méthode n'est pas la même.
Pour le cas 2), le plus simple (on ne se soucie pas des drivers) à mon avis c'est d'utiliser Openal, qui se présente sous la forme d'une dll, OpenAl32.dll (préferer la version OpenAL Soft qui est gratuite, selon les besoins)
A savoir qu'OpenAl ne se préoccupe pas des drivers, puisqu'il fait appel à un composant Windows qui le fait pour lui.
Il existe aussi d'autres solutions comme SDL, ou DirectSound, etc, mais, à mon avis, ce sont en général des usines à gaz (sans parler du fait qu'elles sont souvent obsolètes et mal documentée).
Un avantage de la solution OpenAL, c'est que la lecture du son est asynchrone, c'est à dire que la lecture du son ne bloque pas l’exécution du programme et qu'il est possible de lire autant de fichiers que la carte propose de canaux.
A savoir également qu'OpenAl ne gère pas le chargement des fichiers sons en mémoire, ce qui nécessite, soit de le faire sois-même, soit de faire appel à une autre bibliothèque, nommée alut, avec sa dll alut32.dll de mémoire (à vérifier)
Par contre, si vous avez le contrôle sur les fichiers que vous voulez charger, et savez créer un ficher de type .raw (format son brut) avec un utilitaire comme par exemple Audacity, il est très facile de charger ce fichier en mémoire afin qu'il soit utilisable par OpenAl. (puisque raw est, on va dire, le format natif par défaut, c'est à dire que c'est le format qu'OpenAL attend et celui stoqué dans le mémoire de la carte)
Très grossièrement :
Pour jouer un son, créer un fichier son, par exemple un LA joué avec un certain instrument (question de timbre).
Initialiser OpenAl en précisant la ressource son (par défaut, c'est la carte son active)
Définir un écouteur (position, vitesse, etc de "l'Oreille").
Générer et définir un Buffer pour le son.
Charger le fichier son brut dans le Buffer son (il est mis en mémoire et peut être utilisé par 1 ou plusieurs sources de son).
Générer et définir une source de son en définissant ses propriétés (position, vitesse, vitesse de lecture, se répète ou non, amplitude etc) et lui associer le numéro de buffer son généré (celui dans lequel on a placé les données brutes du son)
Jouer la source son (en précisant le numéro de source généré) pour lequel on peut redéfinir à volonté la vitesse de défilement, ce qui revient à changer sa fréquence.
Dernière modification par LeMulet ; 10/11/2016 à 22h01.
10/11/2016, 22h37
#6
CM63
Date d'inscription
juin 2006
Localisation
Un peu au large de la faille de Limagne
Âge
71
Messages
3 455
Re : Générer un signal sonore
Bonjour,
Si vous avez Python et la commande sox dans votre OS, voici le début du prélude de Bach. Vous pouvez le modifier pour jouer un autre morceau. (renommez le fichier prelude_py.txt en prelude.py)