IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lire un fichier son wav... un peu d' aide svp


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut Lire un fichier son wav... un peu d' aide svp
    Bonjour,

    J'utilise la librairie allegro pour lire un fichier son .wav dans le programme que je suis en train de programmer.(Il n' est à mon avis pas necessaire de conaitre allegro pour m' aider à résoudre le problème)


    Méthode 1 : ca marche mais la mémoire part en sucette (logique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int jouer_son(char *leson){
          SAMPLE *bruit1=load_wav(leson);
         play_sample(bruit1, 255, 0, 1000, 0);
         // destroy_sample(bruit1);
    }
    Méthode 2: Ca compile mais on entend pas le son (logique aussi)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int jouer_son(char *leson){
          SAMPLE *bruit1=load_wav(leson);
         play_sample(bruit1, 255, 0, 1000, 0);
         destroy_sample(bruit1);
    }

    Méthode 3 : Ca compile pas , j' ai une erreur :
    erreur compilateur(2ìeme ligne) :compilateur :initializer element is not constant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char *leson;
    SAMPLE *bruit1=load_wav(leson); //compilateur :initializer element is not constant 
    int jouer_son(){
         play_sample(bruit1, 255, 0, 1000, 0);
         destroy_sample(bruit1);
    }
    c' est toujours le meme fichier son qui est joué donc si une solution marche sans vider la mémoire , ça m' interesse aussi

    merci d' avance

  2. #2
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Tu as un int devant ta fonction, tu peux peut être renvoyer quelque chose déjà...
    De plus, tu fais un et tu ne l'initialise pas...
    Comment il le charge, ton son ?
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    bha je comptais l ' initialiser en faisant par ex

    jouer_son("toto.mid")

  4. #4
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Le problème du compilateur, c'est qu'il l'ignore, ça, que tu vas le faire. Fais-le .
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SAMPLE *bruit1=load_wav("musique/cantina.mid");
    int jouer_son(char *leson){
              play_sample(bruit1, 255, 0, 1000, 0);
     
    }
    ça ne marche pas mieux .... merci quand meme
    meme erreur compilateur :initializer element is not constant

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SAMPLE *bruit1=load_wav("musique/cantina.mid");
    Cette ligne est bien en globale?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Ton code n'est pas compilable, je ne peux pas tester, ou bien tu mets tout, ou bien on trouve une autre solution .
    Tu crée un sample bruit 1, tu appelles jouer_son avec un char *leson mais tu play ton wav avec ton sample bruit1...

    C'est pas logique ce code !
    Qu'essaies-tu de faire ?
    Edit: et en plus, tu veux jouer un wav, mais tu charge un mid
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    pour le .mid à la place du .wav
    Mea culpa
    (ca marche pas mieux avec un .wav: ca compile pas)

    Citation Envoyé par seriousme
    Cette ligne est bien en globale?
    Oui .

    Citation Envoyé par progman
    Ton code n'est pas compilable, je ne peux pas tester, ou bien tu mets tout, ou bien on trouve une autre solution .
    Tu crée un sample bruit 1, tu appelles jouer_son avec un char *leson mais tu play ton wav avec ton sample bruit1...

    C'est pas logique ce code !
    Qu'essaies-tu de faire ?
    Edit: et en plus, tu veux jouer un wav, mais tu charge un mid
    c'est pas logique mais c' etait pour faire des tests..
    mon but est de réussir à jouer un fichier son plusieurs fois ...

    donc soit :

    j' arrive à creer une procedure qui prend en entrée l' adresse sur le disque de mon .wav et qui le joue en entier. et une fois qu' il est fini , la procedure libere la memoire utilisé par ce wav.

    exemple (qui compile bien ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void jouer_son(char *Adresse_du_wav){
         SAMPLE *bruit1=load_wav(Adresse_du_wav);
         play_sample(bruit1, 255, 0, 1000, 0);
         destroy_sample(bruit1);
    mais là le problème est que vu que le sample est détruit juste après la commande de lecture, il n' est pas joué.
    si je vire le destroy. le son marche mais la mémoire augmente à chaque nouveau fichier son joué

    ou soit :
    j' arrive a charger mon .wav dans un sample globale à mon fichier .c
    et après je fais un play_sample(nom_de_monsample) à chaque fosi que j' en ai besoin

    exemple (compilateur :initializer element is not constant )
    SAMPLE *bruit1=load_wav("toto.wav"); //déclaré en globale
    void jouer_son(){
    play_sample(bruit1, 255, 0, 1000, 0);
    }
    j' ai essayé d' etre le plus clair possible .

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    c' était juste uen fausse manip de ma part .
    je pensais avoir testé le code suivant , mais en fait , je l' avais pas bien fait et ça amrche :

    SAMPLE *bruit1;
    void jouer_son(char *Adresse_du_wav){
    destroy_sample(bruit1);
    bruit1=load_wav(Adresse_du_wav);
    play_sample(bruit1, 255, 0, 1000, 0);
    }
    Désolé de vous avoir fait perdre du temps ...


    Par contre , sachant que je programme un cassebrique et que j' ai environ 5 fichier wav de 20k que je joue très souvent...
    C' est mieux de les charger et décharger à chaque collision avec une brique
    ou :
    tout charger en mémoire et utiliser quand j' en ai besoin ?

    merci d' avance

  10. #10
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Moi je les placerais en mémoire( 100k c'est pas grand chose), chacun dans un tableau statique.
    Tu as juste à lancer la lecture.
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr

  11. #11
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut Fonctionne pas sous dev c++...
    J'uste une Q: Lorsque le son se lit, se lit il sans lecteur?
    Prenez le temps d'aller vite...

    Programme sous Windows, en C avec Code::Blocks, en Java JRE 1.6. avec Eclipse, en PHP/HTML/CSS avec Dreamweaver CS5 ou NotePad++ et en VBA sous avec Access 2010, Excel 2010, Word 2010 et Outlook 2010.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lire des fichiers mp3, wav et video ?
    Par Klemsy78 dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 11/12/2007, 11h34
  2. Lire un fichier son
    Par Vlad_Oliv dans le forum C++
    Réponses: 9
    Dernier message: 12/10/2006, 12h01
  3. lire un fichier son
    Par gugus dans le forum C
    Réponses: 2
    Dernier message: 11/11/2005, 21h12
  4. [Audio]Lire des fichiers sons
    Par Ender dans le forum Multimédia
    Réponses: 6
    Dernier message: 05/10/2005, 01h50
  5. [TP]comment faire pour lire un fichier son
    Par sovo dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 19/09/2004, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo