Générer un signal sonore
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Générer un signal sonore



  1. #1
    klark

    Générer un signal sonore


    ------

    Bonjour,

    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.

    Merci par avance de votre aide.

    -----

  2. #2
    Ludwig1

    Re : Générer un signal sonore

    Salut
    Citation Envoyé par klark Voir le message
    Bonjour,

    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.

    Merci par avance de votre aide.
    Regarde ici
    https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
    Cordialement
    Ludwig

  3. #3
    lou_ibmix_xi

    Re : Générer un signal sonore

    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.

  4. #4
    Forthman

    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...

  5. A voir en vidéo sur Futura
  6. #5
    LeMulet

    Re : Générer un signal sonore

    Citation Envoyé par klark Voir le message
    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.

  7. #6
    CM63

    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)
    Fichiers attachés Fichiers attachés

  8. #7
    CM63

    Re : Générer un signal sonore

    Et allumez vos haut-parleurs.

Discussions similaires

  1. [Numérique] passer d'un signal binaire à la génération d'un signal sonore
    Par SadMistake dans le forum Électronique
    Réponses: 6
    Dernier message: 07/07/2016, 07h34
  2. Transformer un signal sonore en signal lumineux
    Par invitec1e70e26 dans le forum Électronique
    Réponses: 3
    Dernier message: 06/02/2010, 20h07
  3. générer un signal créneau à partir d'un signal sinusoidale
    Par invitee2f3230c dans le forum Électronique
    Réponses: 12
    Dernier message: 08/01/2010, 12h46
  4. Générer un signal triangle à partir d'un signal carré : problème
    Par invite4450428a dans le forum Électronique
    Réponses: 8
    Dernier message: 03/01/2010, 23h59
  5. Générer un signal.....
    Par invite834a3bd2 dans le forum Électronique
    Réponses: 5
    Dernier message: 25/02/2004, 17h21