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 :

Micro Music Player (mmp) un lecteur musicale écrit en C++/C-Like-Style.


Sujet :

GTK+ avec C & C++

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut Micro Music Player (mmp) un lecteur musicale écrit en C++/C-Like-Style.
    J'annonce par ce présent message la sortie de Micro Music Player (mmp): un lecteur musical minimaliste. Il utilise la bibliothèque libvlc comme moteur audio et GTK+-3.0 pour construire l'IHM (Interface Humain Machine).




    Présentation de Micro Music Player
    Télécharger Micro Music Player (deb)
    Télécharger Micro Music Player (tarball)
    Micro Music Player README
    Micro Music Player github






    Présentation

    Micro Music Player (mmp) un petit lecteur de musique minimal avec comme fonctionnalités :

    - Play (jouer), Stop (arrêter), Pause ;
    - Next (suivant), Previous (précédent) ;
    - Shuffle (Mode lecture aléatoire) & Repeat All (Répéter la playlist) ;
    - Contrôle du volume.

    Micro Music Player (mmp) joue le contenu d'un dossier ou un simple fichier compatible, vous n'avez qu'à sélectionner un dossier (ou le passer comme argument en ligne de commande) pour en jouer le contenu lexicographiquement ordonné, ou un simple fichier. Après avoir fait la liste de lecture, MMP recherche une image de couverture d'album dans le dossier et l'affiche dans l'interface. S'il ne trouve pas d'image, il affiche l'image par défaut.

    Fonctionnalités

    - Jouer un fichier unique à la place du contenu d'un dossier.
    - Afficher la playlist :

    La playlist est affichée dans une fenêtre _toplevel_. La chanson ou le morceau de musique en cours de lecture est marqué avec une icône dans la marge. Vous pouvez faire un double-clic sur le titre de votre choix afin de le jouer immédiatement.

    - Configurer Micro Music Player (mmp) à votre convenance.

    1. Vous pouvez choisir entre 2 différents jeux d'icônes :

    - HighContrast: des icônes noir et blanc.
    - Oxygen: des icônes colorées.

    2. Vous pouvez choisir entre 3 différentes tailles de l'interface.

    - Petite taille.
    - Moyenne taille.
    - Grande taille.

    3. Vous pouvez configurer le dossier par défaut lors de l'ouverture du sélecteur de dossiers musicaux.

    4. Vous pouvez (dé)sélectionner les fonctions repeat all (Répéter la playlist) et shuffle (Mode lecture aléatoire) comme vous le désirez.

    5. Vous pouvez changer le volume par défaut au démarrage du programme (de 0 a 100).

    Les changements sont appliqués dès que vous les effectuez, excepté le réglage du volume. Mais vous devez appuyer sur le bouton _Apply_ pour garder la configuration souhaitée. Ainsi il démarrera avec les réglages que vous voulez.

    Vous pouvez le lancer avec la ligne de commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ mmp folderpath volume[0-100] # mmp is a symbolic link.
    Ou en cliquant sur l'icône.

    Formats de fichiers supportés

    Formats de fichiers musicaux :

    Formats de fichiers musicaux les plus communs :

    - flac (Free Lossless Audio Codec).
    - ogg (Ogg Vorbis).
    - mp3 (MPEG-1 Audio Layer III ou MPEG-2 Audio Layer III).
    - aac (Advanced Audio Coding).
    - ac3 (Dolby Digital).
    - wav (WAVEform audio file format).
    - wma (Windows Media Audio).
    - mid or midi (Musical Instrument Digital Interface).
    - ape (Monkey’s Audio).
    - mov (QuickTime).

    Liste de Formats de fichiers musicaux gérés :

    .3ga, .669, .a52, .aac, .ac3, .adt, .adts, .aif, .aifc, .aiff, .amb ,.amr, .aob, .ape, .au, .awb, .caf, .dts,.flac, .it, .kar, .m4a, .m4b, .m4p, .m5p, .mid, .mka, .mlp, .mod, .mpa, .mp1, .mp2, .mp3, .mpc, .mpga, .mus, .oga, .ogg, .oma, .opus, .qcp, .ra, .rmi, .s3m, .sid, .spx, .tak, .thd, .tta, .voc, .vqf, .w64, .wav, .wma, .wv, .xa, .xm.

    (Pas tous testés mais gérés par libvlc)

    Formats de fichiers d'images de couverture gérés :

    - jpeg, jpg, jpe (Joint Photographic Experts Group).
    - tiff, tif (Tagged Image File Format).
    - png (Portable Network Graphics).
    - bmp, dib (bitmap image file or device independent bitmap).

    Ce que mmp ne fait pas:

    - pas d'indexation de votre dossier de musique ;
    - pas d'accès aux métadonnées ;
    - pas de barre de progression du morceau en écoute (vraie lacune empêchant de positionner l'écoute dans un morceau) ;
    - pas de connexion à une base de données ou de téléchargement pour la gestion des images de couverture.

    Micro Music Player (mmp) reste aussi simple que possible, sans connexion Internet requise  : MMP et votre dossier musical suffisent.

    J'ai implémenté ce programme au début à des fins personnelles sans penser à le distribuer, mais finalement j'ai décidé de le publier parce qu'il est facile et simple dans le concept comme dans le code C++. Au point que vous pouvez l'utiliser ou le modifier librement selon les termes de la licence GPLv3.

    Installer MMP

    Il est d'ores et déjà disponible en paquetage Debian (*.deb) mais aussi en archive tarball.

    Installation avec le tarball

    Autotools est utilisé, le compiler et l'installer sera donc aussi simple qu'un ./configure, make, make install:

    Afin de vérifier que votre système satisfait les dépendances. Puis entrez :

    Enfin, et éventuellement :

    Écoutez vos chansons préférées avec Micro Music Player (mmp) !!!

    NOTES de l'auteur:
    mmp est écrit en C++ dans un style C-Like.
    Et est un bon code a lire pour ceux qui passe du C au C++ avec une library multimédia facile d'utilisation en complément.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Le programme apporte quoi par rapport à l'existant ?
    il ne gère pas les m3u ? C'est ce format que génère mon serveur domestique.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    En faîtes je suis passer a libvlc car la version 1 de mmp utilisait SDL2_mixer comme moteur audio et plantait dès fois.

    Sinon rien c'est un holydays work, vite fait bien fait.

    Mais regarde ça: un exemple d'utilisation de libvlc avec gtk-2.0.
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    // gcc -o gtk_player gtk_player.c `pkg-config --libs gtk+-2.0 libvlc` `pkg-config --cflags gtk+-2.0 libvlc`
     
    /* License WTFPL http://sam.zoy.org/wtfpl/ */
    /* Written by Vincent Schüßler */
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include <gdk/gdkx.h>
    #include <vlc/vlc.h>
     
    #define BORDER_WIDTH 6
     
    void destroy(GtkWidget *widget, gpointer data);
    void player_widget_on_realize(GtkWidget *widget, gpointer data);
    void on_open(GtkWidget *widget, gpointer data);
    void open_media(const char* uri);
    void play(void);
    void pause_player(void);
    void on_playpause(GtkWidget *widget, gpointer data);
    void on_stop(GtkWidget *widget, gpointer data);
     
    libvlc_media_player_t *media_player;
    libvlc_instance_t *vlc_inst;
    GtkWidget *playpause_button;
     
    void destroy(GtkWidget *widget, gpointer data) {
        gtk_main_quit();
    }
     
    void player_widget_on_realize(GtkWidget *widget, gpointer data) {
        libvlc_media_player_set_xwindow(media_player, GDK_WINDOW_XID(gtk_widget_get_window(widget)));
    }
     
    void on_open(GtkWidget *widget, gpointer data) {
        GtkWidget *dialog;
        dialog = gtk_file_chooser_dialog_new("Choose Media", data, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
        if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
            char *uri;
            uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
            open_media(uri);
            g_free(uri);
        }
        gtk_widget_destroy(dialog);
    }
     
    void open_media(const char* uri) {
        libvlc_media_t *media;
        media = libvlc_media_new_location(vlc_inst, uri);
        libvlc_media_player_set_media(media_player, media);
        play();
        libvlc_media_release(media);
    }
     
    void on_playpause(GtkWidget *widget, gpointer data) {
        if(libvlc_media_player_is_playing(media_player) == 1) {
            pause_player();
        }
        else {
            play();
        }
    }
     
    void on_stop(GtkWidget *widget, gpointer data) {
        pause_player();
        libvlc_media_player_stop(media_player);
    }
     
    void play(void) {
        libvlc_media_player_play(media_player);
        gtk_button_set_label(GTK_BUTTON(playpause_button), "gtk-media-pause");
    }
     
    void pause_player(void) {
        libvlc_media_player_pause(media_player);
        gtk_button_set_label(GTK_BUTTON(playpause_button), "gtk-media-play");
    }
     
    int main( int argc, char *argv[] ) {
        GtkWidget *window,
                  *vbox,
                  *menubar,
                  *filemenu,
                  *fileitem,
                  *filemenu_openitem,
                  *player_widget,
                  *hbuttonbox,
                  *stop_button;
     
        gtk_init (&argc, &argv);
        // setup window
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
        g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
        gtk_container_set_border_width (GTK_CONTAINER (window), 0);
        gtk_window_set_title(GTK_WINDOW(window), "GTK+ libVLC Demo");
     
        //setup vbox
        vbox = gtk_vbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(window), vbox);
     
        //setup menu
        menubar = gtk_menu_bar_new();
        filemenu = gtk_menu_new();
        fileitem = gtk_menu_item_new_with_label ("File");
        filemenu_openitem = gtk_menu_item_new_with_label("Open");
        gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), filemenu_openitem);
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileitem), filemenu);
        gtk_menu_bar_append(GTK_MENU_BAR(menubar), fileitem);
        gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
        g_signal_connect(filemenu_openitem, "activate", G_CALLBACK(on_open), window);
     
        //setup player widget
        player_widget = gtk_drawing_area_new();
        gtk_box_pack_start(GTK_BOX(vbox), player_widget, TRUE, TRUE, 0);
     
        //setup controls
        //playpause_button = gtk_button_new_from_stock(GTK_STOCK_MEDIA_PLAY);
        playpause_button = gtk_button_new_with_label("gtk-media-play");
        gtk_button_set_use_stock(GTK_BUTTON(playpause_button), TRUE);
        stop_button = gtk_button_new_from_stock(GTK_STOCK_MEDIA_STOP);
        g_signal_connect(playpause_button, "clicked", G_CALLBACK(on_playpause), NULL);
        g_signal_connect(stop_button, "clicked", G_CALLBACK(on_stop), NULL);
        hbuttonbox = gtk_hbutton_box_new();
        gtk_container_set_border_width(GTK_CONTAINER(hbuttonbox), BORDER_WIDTH);
        gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_START);
        gtk_box_pack_start(GTK_BOX(hbuttonbox), playpause_button, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(hbuttonbox), stop_button, FALSE, FALSE, 0);
        gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, FALSE, 0);
     
        //setup vlc
        vlc_inst = libvlc_new(0, NULL);
        media_player = libvlc_media_player_new(vlc_inst);
        g_signal_connect(G_OBJECT(player_widget), "realize", G_CALLBACK(player_widget_on_realize), NULL);
     
        gtk_widget_show_all(window);
        gtk_main ();
     
        libvlc_media_player_release(media_player);
        libvlc_release(vlc_inst);
        return 0;
    }
    En moins de 140 lignes tu a un lecteur audio et vidéo: tu peut mater des films avec.

    Sinon il faut ajouter que libvlc est une excellente library pour faire du multimédia facile, car facile d'utilisation malgré que l'on peut utiliser les fonctions de bas niveau aussi.

    PS: kezako m3u ?
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Bonjour

    Je pense que si ton code est aussi court, tu devrait le commenter et le proposer comme exemple pour developpez.net .


    Netjuke, c'est ce qui est utilisé par http://sourceforge.net/projects/netjuke/ (un vieux projet que j'utilise en interne par flemme de mise à jour).
    Voici un exemple :
    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
    http://netjuke/var/music/hard/Nightwish/Once/07%20Dead%20Gardens.mp3
    http://netjuke/var/music/hard/Nightwish/Wishmaster%20%5BBonus%20Tracks%5D/05%20Two%20for%20Tragedy.mp3
    http://netjuke/var/music/hard/Nightwish/Century%20Child/08%20Feel%20for%20You.mp3
    http://netjuke/var/music/hard/Nightwish/Wishmaster%20%5BBonus%20Tracks%5D/10%20Dead%20Boy%27s%20Poem.mp3
    http://netjuke/var/music/hard/Nightwish/Over%20the%20hills%20and%20far%20awayA%20COMPLETER/05%20-%20The%20Kinslayer%20%28live%29%20.mp3
    http://netjuke/var/music/hard/Nightwish/Nightwish%20-%20Escapist.mp3
    http://netjuke/var/music/hard/Nightwish/Oceanborn%20%5BBonus%20Tracks%5D/08%20The%20Riddler.mp3
    http://netjuke/var/music/hard/Nightwish/Oceanborn%20%5BBonus%20Tracks%5D/Imaginaerum/Nightwish%20-%20Rest%20Calm.mp3
    http://netjuke/var/music/hard/Nightwish/Angels%20Fall%20First%20%5BBonus%20Tracks%5D/12%20Lappi%20%28Lapland%29%20IV-%20Eti%C3%A4inen%20%5B-%5D.mp3
    http://netjuke/var/music/hard/Nightwish/Once/10%20Kuolema%20Tekee%20Taiteilijan.mp3
    http://netjuke/var/music/hard/Nightwish/Once/08%20Romanticide.mp3
    http://netjuke/var/music/hard/Nightwish/Dark%20Passion%20Play/Nightwish%20-%20The%20Islander.mp3
    http://netjuke/var/music/hard/Nightwish/Century%20Child/05%20Slaying%20the%20Dreamer.mp3
    http://netjuke/var/music/hard/Nightwish/Dark%20Passion%20Play/Nightwish%20-%20Sahara.mp3
    http://netjuke/var/music/hard/Nightwish/Oceanborn%20%5BBonus%20Tracks%5D/12%20Nightquest%20%5B-%5D.mp3
    http://netjuke/var/music/hard/Nightwish/Oceanborn%20%5BBonus%20Tracks%5D/Imaginaerum/Nightwish%20-%20I%20Want%20My%20Tears%20Back.mp3
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Salut troumad,

    Je le dit pas mais le lien le dit, ce n'est pas mon code mais un exemple d'utilisation de libvlc avec gtk+2 que j'ai trouver sur le site de libvlc, (les liens sont dans mon poste précédent).

    Mais je crois que ce code est déprécier car il commence a daté:

    libVLC Gtk example media player VideoLAN
    Status: Closed Time to complete: 504 hrs Mentors: Pierre Ynard Tags: libVLC, VLC, GtK

    Creating a small example of how to create a media player based on libVLC and Gtk on Windows/Linux. The code will then be pushed on the wiki to demonstrate the efficience of the libVLC API.
    Uploaded Work
    File name/URL File size Date submitted
    Download Broken November 26 2010 14:38 UTC
    Download Broken November 27 2010 16:27 UTC
    Je cherchais juste a montrer comme libvlc est pratique et facile d'utilisation.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

Discussions similaires

  1. Debug d'un player music xml.
    Par castelcerf dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 10/11/2009, 23h23
  2. Réponses: 6
    Dernier message: 09/04/2007, 16h52
  3. [PLAYER] Désinstaller flash player 7
    Par Olivier Delmotte dans le forum Flash
    Réponses: 10
    Dernier message: 02/12/2004, 18h24
  4. Un .exe a-t-il besoin d'un player?
    Par chezjm dans le forum Flash
    Réponses: 2
    Dernier message: 13/11/2003, 14h49
  5. détection de player
    Par mat10000 dans le forum Flash
    Réponses: 8
    Dernier message: 23/10/2003, 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