# Fonctionnalités avancées d'&amarok;

## Raccourcis clavier

&amarok; utilise des raccourcis claviers comme la plupart des autres applications, en dessous il y a une liste de ces raccourcis et leurs actions respectives. Les raccourcis globaux peuvent être configurés en effectuant un clic droit sur la fenêtre du lecteur et en sélectionnant Configurer les raccourcis globaux.... Les raccourcis d'&amarok; peuvent être configurés en effectuant un clic droit sur la fenêtre de lecture et en sélectionnant Configurer les raccourcis clavier....

Vous pouvez assigner les touches multimédia pour qu'elle fonctionnent en tant que raccourcis d'&amarok;, en faisant de votre clavier le centre de contrôle d'&amarok;.

Les raccourcis globaux sont :

Combinaison de touches | Action
--- | ---
Démarrer X | Jouer
Démarrer C | Pause
Démarrer V | Arrêt
Démarrer B | Piste suivante
Démarrer Z | Piste précédente
Démarrer PN_+ | Monter le son
Démarrer PN_- | Baisser le son
Win&Maj;KP_Add | Avance Rapide
Win&Maj;KP_Subtract | Retour Rapide
Démarrer A | Ajouter un morceau
Démarrer P | Afficher la liste de lecture
Démarrer O | Activer l'affichage à l'écran
Démarrer M | Muet

Les raccourcis &amarok; sont :

Combinaison de touches | Action
--- | ---
&Ctrl;C | Copier
&Ctrl;KP_Enter | Aller au morceau actuel
&Ctrl;D | Ajouter les pistes sélectionnées à la liste de lecture
&Ctrl;Q | Quitter
&Ctrl;&Maj;Z | Refaire
&Ctrl;S | Enregistrer la liste de lecture
&Ctrl;A | Tout sélectionner
&Ctrl;M | Afficher la barre de menus
&Ctrl;H | Répéter la piste
&Ctrl;Z | Annuler

Les raccourcis du navigateur de la liste de lecture sont :

Combinaison de touches | Action
--- | ---
Espace | Charger la liste de lecture
F2 | Renommer la liste de lecture
Effacement | Supprimer la liste de lecture

## L'interface DCOP

L'interface DCOP d'amaroK vous fournit une façon simple de contrôler &amarok; avec vos scripts personnels.

L'interface DCOP d'&amarok; a beaucoup de fonctions génériques qui peuvent être trouvées dans d'autres applications KDE. Cette section est divisée en six parties et décrit les appels DCOP de la collection ; du navigateur de contexte ; du lecteur ; de la liste de lecture ; du navigateur de listes de lecture et des scripts. Un exemple d'appel DCOP pour mettre en pause ressemblerait à :

&percnt;dcop amarok player pause

### appels DCOP de la collection &amarok;

Appels DCOP | Action
--- | ---
int totalAlbums() | Retourne le nombre total d'albums dans la collection.
int totalArtists() | Retourne le nombre total d'artistes dans la collection.
int totalCompilations() | Retourne le nombre total de compilations dans la collection.
int totalGenres() | Retourne le nombre total de genres dans la collection.
int totalTracks() | Retourne le nombre total de pistes dans la collection.
QString query( QString sql) | Interroge la base de données avec du SQL.
QStringList similarArtists( int artists ) | Retourne les artistes similaires aux pistes courantes, se limite à int artistes.
void migrateFile( QString oldURL, QString newURL ) | Déplacer un fichier dans la collection en gardant intactes ses statistiques.
void scanCollection() | Analyser la collection.
void scanCollectionChanges() | Analyser les modifications de la collection seulement.

### Appels DCOP du navigateur de contexte

Appels DCOP | Action
--- | ---
void showCurrentTrack() | Afficher la piste courante dans le navigateur de contexte.
void showLyrics() | Afficher l'onglet des paroles dans le navigateur de contexte.
void showWiki() | Afficher l'onglet Wikipédia dans le navigateur de contexte.

### Appels DCOP du lecteur &amarok;

Appels DCOP | Action
--- | ---
bool dynamicModeStatus() | Retourner le mode de lecture dynamique.
bool equalizerEnabled() | Retourner l'état del'égaliseur.
bool isPlaying() | Retourner true si &amarok; joue un morceau.
bool randomModeStatus() | Retourner le mode aléatoire.
bool repeatPlaylistStatus() | Retourner l'état du mode répétition de la liste de lecture.
bool repeatTrackStatus() | Retourner l'état du mode répétition de la piste.
int getVolume() | Retourner le volume entre 0 et 100 %.
int sampleRate() | Retourner le taux d'échantillonage de la piste courante.
int score() | Retourner le score de la piste courante.
int status() | Retourner l'état du mode de lecture : 0 - stoppé, 1 - en pause, 2 - lecture;
int trackCurrentTime() | Retourner la position de la piste courante en millisecondes
int trackPlayCounter() | Retourner le conteur de lectures de la piste courante.
int trackTotalTime() | Retourner la durée de la piste en secondes.
QString album() | Retourner l'album de la piste courante.
QString artist() | Retourner l'artiste de la piste courante.
QString bitrate() | Retourner le bitrate de la piste courante.
QString comment() | Retourner le commentaire de la piste courante.
QString coverImage() | Retourner l'URL encodée de l'image de pochette de la piste courante.
QString currentTime() | Retourner la position de la piste courante ([h:]mm:ss format).
QString encodedURL() | Retourner l'URL encodée de la piste courante.
QString engine() | Retourner le moteur utilisé.
QString genre() | Retourner le genre de la piste courante.
QString lyrics() | Retourner les paroles de la piste courante.
QString lyricsByPath( QString path ) | Retourner les paroles d'une chanson à partir de son emplacement.
QString nowPlaying() | Le titre du média couramment joué.
QString path() | Retourner l'emplacement non encodé de la piste courante.
QString setContextStyle( QString ) | Définie le style CSS du navigateur de contexte.
QString title() | Retourner le titre de la piste courante.
QString totalTime() | Retourner la durée totale de la liste courante (au format [h:]mm:ss)
QString track() | Retourner le numéro de piste.
QString type() | Retourner le type de fichier.
QString year() | Retourner l'année de la piste courante.
void configEqualizer() | Afficher la fenêtre de configuration de l'égaliseur.
void enableDynamicMode(bool enable) | Activer ou désactiver le mode dynamique
void enableOSD(bool enable) | Afficher ou cacher l'OSD.
void enableRandomMode(bool enable) | Mettre le mode aléatoire sur on ou off.
void enableRepeatPlaylist(bool enable) | Activer ou désactiver la répétition de la liste de lecture
void enableRepeatTrack(bool enable) | Activer ou désactiver le mode de répétition de piste
void mediaDeviceMount() | Définir la commande utilisée pour monter un périphérique de média.
void mediaDeviceUmount() | Définir la commande utilisée pour libérer un périphérique de média.
void mute() | Activer ou désactiver le mode muet.
void next() | Équivalent au bouton « Morceau Suivant ».
void pause() | Équivalent au bouton « Pause ».
void play() | Équivalent au bouton « Lecture ».
void playPause() | Modifier l'état lecture/pause (utile pour les utilisateurs de claviers multimédia).
void prev() | Équivalent au bouton « Morceau Précédent ».
void queueForTransfer( KURL url ) | Mettre le fichier en attente pour être transféré au périphérique de média.
void seek(int s) | Aller à la position de la piste donnée en secondes.
void seekRelative(int s) | Avancer du nombre de secondes données dans la piste.
void setEqualizer(int, int, int, int, int, int, int, int, int, int, int) | Définir les bandes de l'égaliseur.
void setEqualizerEnabled( bool active ) | Activer ou désactiver l'égaliseur.
void setEqualizerPreset( QString name ) | Définir le preset de l'égaliseur.
void setLyricsByPath( QString url, QString lyrics ) | Définir les paroles d'une chanson par son emplacement.
void setScore( int score ) | Définir le score de la piste courante.
void setScoreByPath( QString url, int score ) | Définir le score d'une piste par son emplacement.
void setVolume(int volume) | Définir le volume de 0 à 100 %.
void showBrowser( QString browser ) | Afficher le navigateur dans la fenêtre de la liste de lecture.
void showOSD() | Afficher l'OSD à l'écran.
void stop() | Équivalent au bouton « Stop ».
void transferDeviceFiles() | Transfèrer les fichiers au périphérique de média.
void volumeDown() | Baisser le volume avec un pas raisonnable.
void volumeUp() | Augmenter le volume avec un pas raisonnable.

### Appels DCOP de la liste de lecture

Appels DCOP | Action
--- | ---
int getActiveIndex() | Retourner l'index de la piste courante, -1 si il n'y en a pas.
int getTotalTrackCount() | Retourner le nombre de pistes dans la liste de lecture.
QString saveCurrentPlaylist() | Enregistrer la liste de lecture courante en xml et retourne son emplacement.
void addMedia( KURL ) | Ajouter un média audio spécifiés par l'URL.
void addMediaList( KURL::List ) | Ajouter des média audio spécifiés par l'URL.
void clearPlaylist() | Vide la liste de lecture.
void playByIndex(int) | Lance la lecture de la piste se trouvant à l'index spécifié.
void playMedia( KURL ) | Ajouter un média audio spécifiés par l'URL.
void popupMessage( QString) | Affiche un message popup temporaire.
void removeCurrentTrack() | Retourne la piste courante de la liste de lecture.
void repopulate() | Repeuple la liste de lecture avec des morceaux aléatoires.
void saveM3u( QString path, bool relativePaths) | Enregistre la liste de lecture courante en m3u.
void setStopAfterCurrent( bool ) | Active ou désactive l'arrêt après la piste courante.
void shortStatusMessage( QString) | Affiche un message temporaire dans la barre d'état.
void shufflePlaylist() | Mets les pistes de la liste de lecture dans un ordre aléatoire.
void togglePlaylist() | Affiche ou cache la fenêtre de la liste de lecture.

### Appels DCOP du navigateur de listes de lecture.

Appels DCOP | Action
--- | ---
void addPodcast( QString ) | Ajouter un podcast au navigateur de listes de lecture.
void scanPodcasts() | Vérifier si les podcasts ont été mis à jour.
void addPlaylist( QString ) | Ajouter une liste de lecture au navigateur de listes de lecture.

### Appels DCOP de scripts.

Appels DCOP | Action
--- | ---
bool runScript( QString name) | Démarre le script dont le nom est passé en argument. Retourne true si tout fonctionne normalement.
bool stopScript( QString name) | Stoppe le script dont le nom est passé en argument. Retourne true si tout s'est bien déroulé.
QStringList listRunningScripts() | Retourne une liste de tous les scripts en cours d'exécution.
void addCustomMenuItem(QString submenu, QString itemTitle ) | Active et définit un élément personnalisé de menu.
void removeCustomMenuItem(QString submenu, QString itemTitle ) | Retire l'élément de menu personnalisé.
QString readConfig( QString key) | Retourne une entrée de configuration AmarokConfig à partir de la clé spécifiée.

## Options en ligne de commande

&amarok; prend en charge l'utilisation des options de ligne de commande Qt et KDE standard. &amarok; a aussi ses options spécifiques.

Les options Qt et KDE :

Option | Action
--- | ---
--help | Afficher l'aide à propos des options.
--help-qt | Afficher les options spécifiques à Qt.
--help-kde | Afficher les options spécifiques à KDE.
--help-all | Afficher toutes les options.
--author | Afficher les informations sur l'auteur.
-v, --version | Afficher les informations sur la version.
--license | Afficher les informations sur la licence.

Les options d'&amarok; :

Les options &amarok; sont faites pour être utilisées quand &amarok; est en fonctionnement.

Option | Action
--- | ---
-r, --previous | Revenir à la piste précédente dans la liste de lecture.
-p, --play | Démarrer la lecture de la piste actuelle.
-s, --stop | Arrêter la lecture.
--pause | Mettre en pause la lecture.
-f, --next | Aller à la piste suivante dans la liste de lecture.
-a, --append | Ajouter des fichiers / URLs à la liste de lecture.
-e, --enqueue | Voir append, disponible pour la compatibilité avec d'autres outils.
--queue | Mettre en queue des fichiers / URLs après la piste actuellement jouée.
-m, --toggle-playlist-window | Basculer vers la fenêtre de la liste de lecture.
--wizard | Lancer l'assistant à la première utilisation.
--engine « nom » | Démarrer &amarok; avec le moteur « nom ».

## Écriture de script

L'écriture de scripts vous permet de facilement étendre les fonctionnalités d'&amarok; sans avoir à modifier le code principal. Les scripts sont similaires à des modules externes, excepté qu'à la place d'une interface de programmation de module externe dédiée, ils utilisent les interfaces DCOP d'&amarok; pour communiquer. Cela rend possible l'écriture de scripts à l'aide de pratiquement tous les langages de programmation, comme Ruby, Python ou PHP. Vous pouvez non seulement créer des scripts à l'aide de langages de scripts classiques, mais également à l'aide de langages compilés tels que C++ ou C. De plus, &amarok; peut notifier les scripts lors d'évènements spéciaux et les faire réagir en conséquence. Ce système de notification sera détaillé plus loin dans cette section.

### Bindings (liaisons)

Il est facile d'écrire des scripts simples qui ne nécessitent pas d'interagir avec un utilisateur, et il est également possible de créer des scripts possédant une interface utilisateur graphique qui agissent comme de petites applications indépendantes. Pour la programmation d'interfaces utilisateur graphique une des nombreuses bibliothèques de liaisons fournis par KDE peut être utilisé, par exemple RubyQt, une librairie Qt de liaison pour Ruby. Cependant, il est important de noter que tous les utilisateurs ne possèdent pas toutes les librairies de liaisons installées. Si vous décider d'utiliser une librairie de liaison, essayer d'utiliser une de celles qui sont très répandues (&pex; RubyQt ou PyQt).

Avec pour objectif de fournir un retour d'expérience lorsqu'un script ne peut pas être exécuté en raison d'une dépendance non remplie, merci de vérifier dans votre script si le module que vous voulez inclure existe réellement. Si la dépendance est manquante, vous devriez relever l'erreur et présenter une boîte de dialogue d'information en utilisant l'outil en ligne de commande « kdialog », ainsi l'utilisateur découvrira pourquoi il est impossible d'exécuter le script.

Cet exemple montre comment détecter une dépendance manquante en Ruby.

    begin
           require 'Korundum'
    rescue LoadError
           error = 'Korundum (KDE bindings for ruby) from kdebindings v3.4 is required for this script.'
           `kdialog --sorry '#{error}'`
           exit
    end

### Bien démarrer : les modèles

&amarok; fourni des modèles de scripts pour plusieurs langages dans le dossier `scripts/template`. Vous pouvez utiliser ces scripts comme base pour vos propre scripts, et leurs adjoindre les fonctionnalités dont vous avez besoin.

### Contrôler &amarok; avec DCOP

Les scripts peuvent contrôler Amarok en appelant certaines de ces fonctions DCOP. La manière la plus simple d'appeler un fonction DCOP est d'utiliser l'utilitaire en ligne de commande « DCOP » qui fait parti de toute distribution KDE.

Voici un exemple pour augmenter le volume principal :

    dcop amarok player volumeUp

La plupart des langages de scripts permettent l'exécution de programmes externes, à l'aide d'une fonction comme exec(). Ainsi l'utilitaire « dcop » peut être appelé simplement. Voici un exemple simple en Python :

    import os
     os.system("dcop amarok player volumeDown")

### Notifications

&amarok; envoi des notifications à tous les scripts en cours d'exécution en écrivant des chaînes de caractères dans leurs canaux stdin. Les scripts devraient en conséquences surveiller en permanence stdin, et réagir en conséquence à chacun des événements possibles. Les scripts pourraient également choisir d'ignorer tout événement dont ils n'ont pas besoin.

Les notifications suivantes sont envoyées par &amarok; :

    configure
    Demande au script d'afficher sa boîte de dialogue de configuration. Le script doit
    prendre en charge l'enregistrement et le chargement des options de
    configuration par lui même. Lorsqu'un script est exécuté, Amarok configure
    sont dossier de travail pour que cela soit celui dans lequel toutes les données
    devraient être stockées.

    engineStateChange:empty|idle|paused|playing
    Signal une modification d'état du moteur.

    trackChange
    Signal le démarrage d'une nouvelle piste. Le script devrait alors utiliser
    les fonctions DCOP pour demander d'autres informations concernant
    la piste, &pex; les méta-données et la durée.

    volumeChangenewVolume
    Signal une modification du niveau sonore principale. Le volume est un entier
    compris entre 0 et 100.

    customMenuClicked:submenu itemTitle paths
    Renvoi l'emplacement des fichiers sélectionnés dans la liste de lecture
    lorsque l'élément du menu contextuel est sélectionné. Le sous menu et
    le titre de l'élément sont également renvoyés pour raison d'identification
    dans le cas ou un script serait à l'écoute pour des notifications multiples.
    Pour insérer un élément dans le menu contextuel utilisez l'appel DCOP
    « dcop amarok script addCustomMenuItem( submenu itemTitle) ».
    Pour supprimer un élément du menu contextuel utilisez l'appel DCOP
    « dcop amarok script removeCustomMenuItem( submenu itemTitle) ».

### Arrêt des scripts

Avant la fermeture d'&amarok;, ou lorsque l'utilisateur arrête un script l'aide du gestionnaire de script, &amarok; envoi le signal SIGTERM au script. Ce signal peut être capturé pour faire un travail de nettoyage, comme l'enregistrement de données ou de réglages.

### Mise en paquetage

Le gestionnaire de script d'&amarok; est en mesure d'installer des scripts empaquetés que l'utilisateur a téléchargé depuis un serveur web. Les paquetages sont simplement des archives (.tar) optionnellement compressées à l'aide de bzip2 (.bz2). Nous recommandons fortement l'utilisation d'un nom de fichier du type monscript.amarokscript.tar.bz2, pour que l'utilisateur puisse facilement identifier le paquetage comme un script Amarok.

&amarok; 1.3 acceptera uniquement des scripts empaquetés possédant l'extension amarokscript, c'est pourquoi il est plus simple de l'utiliser dès le début.

Le contenu de l'archive doit être organisé de la manière suivante :

    myscript/
       README
       myscript.py (executable)
       somemodule.py
       foo.data
       ...

### Permissions des fichiers

Le script principal doit être exécutable, tandis que les modules additionnels que le script peut chargé ne devraient pas l'être. Pour conserver les permissions dans l'archive vous devriez utiliser tar avec l'option -p :

    tar -cf myscript.amarokscript.tar -p myscript

&amarok; ne sera pas capable d'installer le script si les permissions ne sont pas correctement définies.

### Distribution

Lorsque le paquetage est terminé, vous pouvez l'envoyer sur www.kde-apps.org (en anglais), et ajouter le lien sur la Page des scripts en Wiki d'&amarok;. Pour la page de kde-apps vous pouvez utiliser la catégorie Scripts pour &amarok; (&amarok; Scripts en anglais).