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

GTK+ avec C & C++ Discussion :

Gestion de fichiers audio


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 40
    Par défaut Gestion de fichiers audio
    Bonjour à tous,

    Dans le but de réaliser un lecteur audio, j'ai mis en place un timer d'intervalle 1 s (1000 ms en paramètre), tout marche sans souci, la barre de progression avance, le temps change aussi .... Mais là où je coince c'est comment faire pour détecter si j'ai ouvert un nouveau fichier entre temps.

    En fait, j'ai une boite de sélection d'un fichier x mais dès lors que je l'ouvre je n'arrive pas à faire lire la musique de CE fichier. Il faut que je fasse stop pour que la lecture parte sur ce fichier. Alors je voulais savoir si l'utilisation d'un timer pouvait résoudre le problème ? (j'ai remarqué par mes tests que je ne peux mettre en place qu'un seul timer du type

    g_timeout_add(1000, temps, Widget);/*Timer à intervalle de 1 seconde pour le temps qui défile*/

    Ps: un petit plus si jamais je me sers d'un appel de la fct stop de Fmod après avoir fait ok dans ma boîte de dialogue je me retrouve avec une jolie erreur windows, pk ? (petite précision, je ne peux appeler de fct tierce dans la condition qui gère l'appuie sur le bouton ok.

    Merci d'avance ! J'espère que j'ai étais compréhensible.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 40
    Par défaut
    Je vais tenter d'être le plus précis pour permettre d'obtenir une meilleur aide. Alors comme dit dans mon post précédent, j'ai mis à l'aide de cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_timeout_add(1000, temps, Widget);/*Timer à intervalle de 1 seconde pour le temps qui défile*/
    un timer qui permet à intervalle de 1 seconde de faire bouger la barre de progression. Jusque là, aucun problème. Mais, je me suis rendu compte que si jamais je changeais de musique entre temps étant donné le problème que je rencontre avec ma boîte de sélection, il serait utile que je vérifie si la musique à changé alors pour ça, j'ai mis en place un autre timer mais il ne marche pas donc j'en ai conclu que l'on ne peut en mettre deux en même temps, est-ce vrai ?

    Pour en revenir au problème avec ma boîte de sélection, il faut que je vous explique. Voici le code:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    void creer_file_selection(GtkWidget *Bouton, gpointer data)
    {
        MainWindow *Widget = (MainWindow*) data;/* On récupère la structure */
        FILE *repertoire = fopen("Gestion musique\\musique.fls", "w+");
        gchar *chaine_fichier = NULL;
        gchar m3uChemin[100] = "";
     
        GtkFileFilter *filter;
     
        Widget->SelectionFichier = gtk_file_chooser_dialog_new ("Choisir une/des musiques", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
        gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(Widget->SelectionFichier),TRUE);
        gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(Widget->SelectionFichier), "D:\\Ma musique\\");
     
        filter = gtk_file_filter_new ();
        gtk_file_filter_add_pattern (filter, "*.mp3");
        gtk_file_filter_add_pattern (filter, "*.wma");
        gtk_file_filter_add_pattern (filter, "*.m3u");
     
        gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (Widget->SelectionFichier),filter);
     
        if(gtk_dialog_run (GTK_DIALOG (Widget->SelectionFichier)) == GTK_RESPONSE_ACCEPT)
        {
            g_slist_foreach (Widget->PlayListe, (GFunc)g_free, NULL);
            gint i = 0;
            gint NombreDeMusique;
     
            Widget->PlayListe = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (Widget->SelectionFichier));
            NombreDeMusique = g_slist_length(Widget->PlayListe);
     
            chaine_fichier = g_slist_nth_data (Widget->PlayListe, 0);
     
            if(NombreDeMusique == 1 && strstr(chaine_fichier, ".m3u") != NULL)
            {
                FILE *m3u = fopen(chaine_fichier, "r");
     
                while(fgets(m3uChemin, 100, m3u) != NULL)
                {
                    if(strstr(m3uChemin, "/") != NULL)
                    {
                        clean(m3uChemin);
                        fprintf(repertoire, "%s\n", m3uChemin);
                    }
                }
                /* On ferme tout et on remet le pointeur sur NULL */
                fclose(m3u), m3u = NULL;
            }
     
            else
            {
                /* On mets les chemins récupérés dans ma GList */
                for(i = 0; i < NombreDeMusique; i++)
                {
                    chaine_fichier = g_slist_nth_data (Widget->PlayListe, i);
                    fprintf(repertoire, "%s\n", chaine_fichier);
                }
            }
     
            fclose(repertoire), repertoire = NULL;
            g_free (chaine_fichier), chaine_fichier = NULL;
        }
     
        gtk_widget_destroy (Widget->SelectionFichier);
     
    }
    Alors, en fait si dans la condition if(gtk_dialog_run (GTK_DIALOG (Widget->SelectionFichier)) == GTK_RESPONSE_ACCEPT) je fais un appel à FSOUND_Stop j'ai une jolie erreur window donc je comprends pas. C'est peut-être un comportement normale donc si vous pouviez m'éclairer sur ce point.

    Merci d'avance.

    Ps: Une toute petite précision, les chaînes récupérées pas GTK avec le file_chooser sont bien encodées en UTF-8, si oui est-ce possible que cela ne convienne pas à FMOD car si il y a des caractères autres que ceux des lettres et chiffres alors FMOD ne veut plus lire la musique et de plus le file_chooser ne veut pas marcher dans certain cas d'ailleurs. (Je pense plus à une erreur de conception de ma part)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 40
    Par défaut
    Après de nombreuses modifications toutes plus inutiles, j'en reviens à vous.

    J'ai revu entièrement le code pour la sélection de mes fichiers, mais si je suis là, c'est que vous vous en doutez j'ai encore des problèmes. Je vais finir par croire que je code comme mes doigts de pieds.

    D'une part, voilà mon code:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    /* ----
    Nom du fichier : SelectionFichier.c
    Auteur : Aurélien
    Date de création : 28/08/2006
     
    Rôle :
     
    Dernière compilation : ""
    ---- */
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
    #include <Fmod/fmod.h>
     
    #include "Constantes.h"
    #include "Gestion_Musique.h"
    #include "SelectionFichier.h"
    #include "Chaines.h"
    #include "AffichageInfos.h"
     
    void creer_file_selection(GtkWidget *Bouton, gpointer data)
    {
        MainWindow *Widget = (MainWindow*) data;
     
        GtkWidget *dialog = NULL, *SelectionFichier = NULL;
     
        gchar *NomMusique = NULL;
     
        SelectionFichier = gtk_file_chooser_dialog_new ("Choisir une/des musiques",
                           NULL,
                           GTK_FILE_CHOOSER_ACTION_OPEN,
                           GTK_STOCK_CANCEL,
                           GTK_RESPONSE_CANCEL,
                           GTK_STOCK_OPEN,
                           GTK_RESPONSE_ACCEPT,
                           NULL);
     
        gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(SelectionFichier),TRUE);
     
        /* Test pour savoir si le bouton ouvrir est utilisé */
        if(gtk_dialog_run (GTK_DIALOG (SelectionFichier)) == GTK_RESPONSE_ACCEPT)
        {
            Widget->PlayListe = NULL;
     
            Widget->PlayListe = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (SelectionFichier));
            NomMusique = g_slist_nth_data (Widget->PlayListe, 0);
            Widget->Musique = FSOUND_Stream_Open(NomMusique, 0, 0, 0);
     
            if(Widget->Musique != NULL)
            {
                Widget->CopieMusique = Widget->Musique;
                FSOUND_Stream_Play(1, Widget->CopieMusique);
            }
            else
            {
                dialog = gtk_message_dialog_new(GTK_WINDOW(SelectionFichier),
                                                GTK_DIALOG_MODAL,
                                                GTK_MESSAGE_INFO,
                                                GTK_BUTTONS_OK,
                                                "Ceci n'est pas une musique, refait un choix");
                gtk_dialog_run(GTK_DIALOG(dialog));
                gtk_widget_destroy(dialog);
     
                gtk_widget_destroy (SelectionFichier);
                creer_file_selection(Bouton, data);
            }
     
        }
     
        gtk_widget_destroy (SelectionFichier);
     
    }
    Ce code à pour but de faire la sélection d'un fichier jusque là ça va. Mais où cela coince c'est au niveau de la validation de la saisie. Des fois ça marche et des fois ça ne peut pas marcher pourquoi ? j'en sais rien.
    Mes chemins sont placés dans une GSList définie dans une structure.
    De plus, je sais pas si c'est possible mais si je veux pas exemple modifier le texte d'un widget après avec choisi une musique je ne peux pas car la console me retourne une erreur comme quoi l'insertion de ce nouveau texte a échoué.

    Si des choses vous choc dans mon code merci de me le signaler je ne demande qu'à apprendre.

    Merci d'avance si vous ne comprenez pas merci de me le dire.

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

Discussions similaires

  1. [Audio] Gestion du temps et du volume d'un fichier audio
    Par N1c0l@s dans le forum Multimédia
    Réponses: 3
    Dernier message: 01/11/2011, 13h35
  2. [Joomla!] Cherche composant de gestion de fichiers Audio
    Par Alcius dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/07/2009, 13h44
  3. Récupérer les infos sur un fichier audio
    Par Halleck dans le forum Windows
    Réponses: 13
    Dernier message: 17/04/2004, 18h39
  4. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 13h42
  5. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16

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