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 :

programme sur un fichier son wav


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 13
    Points : 2
    Points
    2
    Par défaut programme sur un fichier son wav
    bonjour
    je recherche de l'aide consernant un fichier.wav
    je dois retrouver le chunk cues. definir sa longueur et l'enregistrer en memoire les info de ce chunk cues
    il faut créer un structure effectuez une reserve dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    FILE * canal;
    char signature[5];
    char chunk[5];
    long longdat;
     
     
     
    canal=fopen("adressedufichier.wav","rb");
    if(canal==NULL)
    {
           printf("impossible d'ouvrir le fichier\n");
           exit(-1);
    }
     
    fgets(signature, 5, canal);
    if(strcmp(signature, "RIFF") != 0)
    {
         printf("ce fichier n'est pas un son\n");
         exit(-1);
    }
     
    do
    {
           fgets(chunk, 5, canal);
           fread(&longdat, sizeof(long), 1, canal);
           if(strcmp(chunk, "cues") != 0)
           {
                   fseek(canal,longdat,SEEK_CUR);
            }
    } while (strcmp(chunk,"cues") !=0);
     
           printf("chunk:       %s\n", chunk);
           printf("longueur:      %ld\n", longdat);
           return 1;
           }
    voila le code pour le moment
    alors comment faire pour l'enregistrer, reserver de la memoire?
    quelqu'un pourrait m'aider pr la suite svp
    merci à vous

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    1-c'est de la prog Windows
    2 regarder dans le MSDN ; il faut lire un WAVEHDR regarder les API multimédias comme waveInOpen()

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Enfin... c'est surtout de l'IFF (Amiga Vaincra ! ) en little-endian...

    C'est vraiment simple: 4 octets de type de chunk, 4 octets de taille de chunk, les données (taille précédente), et un padding octet si la taille était impaire...

    Les seuls chunks "spéciaux" sont 'IFF' (RIFF) et 'LIST', qui contiennent juste des sous-chunks... et un sous-tag pour RIFF (ou AIFF).

    Je suis pas sur que ton code puisse marcher...

    char signature[5];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fgets(signature, 5, canal);
    Là tu lis 5 caractères.... donc.... 'RIFFX' par exemple...
    Du coup:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(strcmp(signature, "RIFF") != 0)
    Ne va pas marcher... avec en prime un memory-access exception la plupart du temps (lecture de la pile dans une partie non initalisée).
    En plus, l'erreur que tu affiches est "n'est pas un son"... est fausse... Un fichier AVI commence aussi par RIFF !


    En fait... voilà comment (en général) on programme la lecture IFF (ca fait bien 15 ans que j'ai plus lancé mon Amiga... mais ca a pas du beaucoup changer ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    enum ChunkIds
    {
         CKID_RIFF = MAKEFOURCC('R','I','F','F'),
         CKID_WAVE = MAKEFOURCC('W','A','V','E'),
         CKID_CUES = MAKEFOURCC('C','U','E','S')
    };
     
    ... 
     
    FILE* f = fopen(....,"rb"); 
     
    int32 rifftype;// <= ou tout autre type de 32 bits
    if (fread(&rifftype,4,1,f) != 1) // <= error
    if (rifftype != CKID_RIFF) // <= error
     
    int32 filetype; 
    if (fread(&filetype,4,1,f) != 1) // <= error
    if (filetype != CKID_WAVE) // <= not a WAV file error
     
    // now reading chunks
    while(true) {
       int32 chunkid;
       int32 chunklength;
       if (fread(&chunkid,4,1,f) != 1) {
            if (feof(f)) break; // <= end of file
            // otherwise error
       }
       if (fread(&chunklength,4,1,f) != 1) // <= error
       if (chunkid == CKID_CUES) 
            readCuesChunk(f,chunklength); // <= will read necessary data
       else if (chunkid == CKID_????) 
            read????Chunk(f,chunklength); // <= will read necessary data
       else
            fseek(f,chunklength,SEEK_CUR);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Lancer des fichiers son .wav ou mp3
    Par mcog2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/01/2012, 19h51
  2. Fermer un fichier son .wav ouvert dans une application
    Par AVNAIM dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/08/2008, 20h40
  3. donnée d'un fichier son .wav
    Par erkan37 dans le forum Multimédia
    Réponses: 5
    Dernier message: 09/04/2008, 10h25
  4. programme sur deux fichiers
    Par magikk dans le forum Langage
    Réponses: 3
    Dernier message: 20/02/2008, 18h41
  5. Lire un fichier son wav... un peu d' aide svp
    Par pilouface dans le forum C
    Réponses: 10
    Dernier message: 13/05/2006, 16h36

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