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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

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

Le , par Luke spywoker

46PARTAGES

1  0 
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
$ 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 : Sélectionner tout
$ ./configure
Afin de vérifier que votre système satisfait les dépendances. Puis entrez :

Code : Sélectionner tout
$ make
Enfin, et éventuellement :

Code : Sélectionner tout
$ 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.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de troumad
Rédacteur/Modérateur https://www.developpez.com
Le 11/01/2016 à 11:45
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.
0  0 
Avatar de Luke spywoker
Membre expérimenté https://www.developpez.com
Le 12/01/2016 à 6:58
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
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 ?
0  0 
Avatar de troumad
Rédacteur/Modérateur https://www.developpez.com
Le 12/01/2016 à 7:29
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
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
0  0 
Avatar de Luke spywoker
Membre expérimenté https://www.developpez.com
Le 12/01/2016 à 11:22
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.
0  0