Developpez.com - Rubrique Linux

Le Club des Développeurs et IT Pro

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

Le 2016-01-10 07:43:59, par Luke spywoker, Membre expérimenté
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 :
$ 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:

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

Code :
$ make
Enfin, et éventuellement :

Code :
$ sudo make install
É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.
  Discussion forum
4 commentaires
  • troumad
    Rédacteur/Modérateur
    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.
  • Luke spywoker
    Membre expérimenté
    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 :
    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 ?
  • troumad
    Rédacteur/Modérateur
    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 :
    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
  • Luke spywoker
    Membre expérimenté
    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.