Music Sampler
Description
Music Sampler is a music player which associates each key on the keyboard to a set of actions to run.
Dependencies and installation
(See next section for Windows installation)
- You need ffmpeg installed. For that, you can use package
libav-tools
(debian):sudo apt-get install libav-tools
If you use the compiled version of Music Sampler (cf. below for a download link), you need nothing else.
- To use sources, the following modules are required:
module | minimum version | note |
---|---|---|
Cython | 0.24 | to compile Kivy |
Kivy | 1.9.1 | some features require to build/install with flag USE_SDL2=1 |
Markdown | 2.6.6 | for documentation only |
pydub | 0.16.4 | |
Pygame | 1.9.2.dev1 | used by Kivy |
Pygments | 2.1.3 | for documentation only |
sounddevice | 0.3.3 | |
transitions | 0.4.1 | |
PyYAML | 3.11 |
The project is also available via pip
:
pip install music_sampler
The program makes use of fonts "Symbola" and "Ubuntu" (Regular / Bold), that
must be available on your system, as well as the portaudio
library:
sudo apt-get install ttf-ancient-fonts ttf-ubuntu-font-family portaudio
To compile Kivy with the SDL2 library, you need some packages:
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
Windows installation
Following processed worked to install music sampler in a Windows machine:
- Install python 3.9.* (take 64bit version!)
-
In a command shell (
cmd.exe
), run:pip install music_sampler pip install docutils pygments pypiwin32 PySDL2 kivy.deps.sdl2 kivy.deps.glew
-
Install ffmpeg (64bit, static) and put the content of folder
bin
in the same folder as music and configs. - Download Ubuntu font and install Ubuntu-R and Ubuntu-B (Regular and Bold) for all users (right clic on the font)
- Download Symbola font and install it for all users (right clic on the font)
-
Write a
run.bat
file with:@echo off music_sampler
-
Run this
run.bat
when you need it.
Compiled version
A compiled version can be created with pyinstaller
:
pyinstaller music_sampler.spec
Downloads
- An example configuration together with some music examples can be found on owncloud
- A precompiled version of
music_sampler
can also be found in the same folder (beware, it might not be up-to-date, please run the program with-V
to see its corresponding version)
Usage
The whole job consists in preparing all the transitions in the configuration
file config.yml
.
The program should then be run in the folder in which the configuration file lies (see below for an advanced use). A window with a keyboard appears. The orange circle in the upper-right corner of the keyboard becomes green one every music is loaded (or red in case of problem). A key is semi-transparent and crossed when it is not usable at the moment: either because a music handled by this key is not loaded yet (it may take some time when the program launches), or because it has an action running.
An example configuration file is given with some keys and transitions. The structure of the file (explained more in details below) should be easy to understand just by looking at it.
Possible actions
- Clic on a key: shows the associated actions in the bottom-left block of the app.
- Key stroke: if available, runs the actions associated to this key. When a
key has currently running actions, his surround is black. Note that an
action like "play a music" is almost instantaneous as it is considered
"done" as soon as the music started playing.
To prevent accidents in case of repeated stroke on a key,
Music Sampler
won't rerun the actions associated to that key if they are not already finished. - Ctrl+C or Ctrl+Q: leaves the program.
- Ctrl+R: reloads the configuration file
Options available at launch
All the options below are optional; usually, running the program in the correct folder is enough. Most of the parameters can be defined also in the config file. The command line parameters always take precedence.
-h, --help
: shows a list of available options-c CONFIG, --config CONFIG
: gives the configuration file to load (by default,config.yml
in the current folder).-p MUSIC_PATH, --music-path MUSIC_PATH
: gives the path to find the musics (by default, the current folder)--no-debug, --debug
: show debug informations in the terminal (disabled by default)-V, --version
: show current version and exit (only for the compiled version)-L, --language
: change application language. Current languages: fr, en (default 'fr')--focus-warning, --no-focus-warning
: show / don't show warning when focus gets lost (default is to show it)
The following options are reserved for a more advanced use of Music Sampler, or in case of problem with the standard configuration:
--no-builtin-mixing, --builtin-mixing
: make the sound mixing locally. By default, Music Sampler will let the system do it and open one channel per music loaded. Use it only if the system cannot handle it.-l LATENCY, --latency LATENCY
: "low", "high" or a number of seconds (default "high")-b BLOCKSIZE, --blocksize BLOCKSIZE
: Number of frames for each mixing step. 0 (default) lets the program choose.-f FRAME_RATE, --frame-rate FRAME_RATE
: default 44100Hz-x CHANNELS, --channels CHANNELS
: Number of channels per music (default 2, for stereo)-s SAMPLE_WIDTH, --sample-width SAMPLE_WIDTH
: number of bytes per frame (default 2).--device DEVICE
: select another sound device.--list-devices
: list available sound devices.--load-all-musics
: load all the music when starting (default True)-- ARGS
: arguments for Kivy library.
Configure keys
Warning: the format of the configuration file is still a work in progress and may change without ensuring backward compatibility
The file config.yml
uses yaml syntax. Categories and sub-categories are
handled by space indentations (no tabs). Symbol #
may be used for comments.
In case of error in the configuration file, an error message will show up. Depending on its severity, Music Sampler may try to continue (ignoring corresponding problems) or abort.
The file contains several sections:
config:
...
aliases:
...
music_properties:
...
key_properties:
...
keys:
...
config
The config section lets you store configuration parameters that you would
normally use in the command line parameters. The '-' in the long parameter name
should be replaced by '_' (e.g. '--music-path' -> 'music_path'). For toggles
(debug
, focus_warning
, builtin_mixing
) use the version without 'no-' and
specify true
or false
as value. Note that command line arguments always take
precedence.
music_properties
This section lets you define global properties for the musics.
Examples
"music1.mp3":
name: My favorite music
gain: 1.4
Music "music1.mp3" is named "My favorite music". She is loaded at 140% of its normal volume.
"music2.mp3":
gain: 0.7
Music "music2.mp3" is loaded at 70% of its normal volume.
List of available options
-
name: My music
User-friendly name of the music, used in the interface instead of the filename. -
gain: x
Loads the music with that initial gain x. This lets you equalize all your music at desired level, independently of the volume afterwards.
key_properties
: drawing and properties of keys
This section lets you describe the drawing of the key: color, description. By default, a key assigned to one or more actions is shown in green
Examples
'ESC':
description:
-
- STOP!
color: [255, 0, 0]
repeat_delay: 2
The "esc" key is red, and text "STOP!" is shown on the second line. The key is protected for 2 seconds after each stroke.
List of availale options
description
: the text on the key. Each item is shown on a line (no automatic line break). First line is shown just next to the "key" name and is in bold. On a standard screen, you may have about 3 lines visible (including the first one)color: [r, g, b]
: the key color. r, g and b are the proportions respectively of red, green and blue, and each value must be between 0 and 255repeat_delay: x
(default 0) : protection delay. Once all its actions are done, the key will remain disabled (semi-transparent and crossed) for that amount of time (in seconds).actions: list
: List of actions to run with the key.
common
key property
A special entry common
has its properties applying to all the keys. They can
be overriden individually.
keys
: actions related to keys
This section lets you describe for each key, the list of actions associated to
it. Note that except for wait
and some particular cases (see below), all the
actions are almost instantaneous.
This section is deprecated and replaced by an actions
key containing a list
in key_properties
section for each key.
Examples
'a':
- play:
file: "music1.mp3"
volume: 70
start_at: 10
- wait:
duration: 5
- stop:
file: "music1.mp3"
fade_out: 2
Runs music "music1.mp3" at 70% of its maximum volume, at 10 seconds from the start, then stops the music 5 seconds later with a 2 seconds fade out.
'b':
- stop:
file: "music1.mp3"
fade_out: 5
wait: false
- play:
file: "music2.mp3"
fade_in: 5
Make a cross fade of 5 seconds between "music1.mp3" and "music2.mp3"
'c':
- stop:
file: "music1.mp3"
fade_out: 5
wait: true
- wait:
duration: 2
- play:
file: "music2.mp3"
- seek:
file: "music2.mp3"
delta: false
value: 60
Stops music "music1.mp3" with a 5 seconds fade out, waits for the end of the fade out, plus 2 seconds, and then runs "music2.mp3" skipping the first minute.
'd':
- volume:
file: "music1.mp3"
value: 50
- play:
file: "noise.mp3"
loop: 1
- wait:
file: "noise.mp3"
- volume:
file: "music1.mp3"
value: 100
Lower volume of "music1.mp3" while "noise.mp3" is played above it (twice). Then the volume of the music comes back to normal.
'e':
- pause:
file: "music1.mp3"
- wait:
duration: 10
- unpause:
file: "music1.mp3"
- seek:
file: "music1.mp3"
delta: true
value: 5
Pauses "music1.mp3" for 10 seconds and reruns it afterward, seeking to 5 seconds later.
List of all the actions:
comment
: does nothing, but shows a comment in the action windowsmessage: "some text"
the message to show
play
: start a music. Music Sampler only runs a music once (if you want to have it playing several time concurrently, duplicate it or make symbolic link). Parameters:file: "music.mp3"
gives the played music (relative path).fade_in: x
(optional) runs the music with x seconds fade in.volume: x
(optional, default 100) sets the volume of the music.loop: x
(optional, default 0) music should be repeated x times. Indicate -1 for infinite loop. Note: x is the number of repetitions, thus the music is actually played x+1 times.start_at: x
(optional, default 0) start music skipping the first x seconds.restart_if_running: true/false
(optional, default false) if the music is already running, stop it and restart it.
stop
: stops a given music. Parameters:file: "music.mp3"
(optional) gives the music to stop. If no music is given, stops all of them.fade_out: x
(optional) stops music with a x seconds fade out.wait: true/false
(optional, default: false) when stopping with a fade out, wait for the fade to finish before continuing to the next actions. If the music stops naturally before the en of the fade out, the wait stops there too. When several musics are stopped in fade out, thewait
only waits for the last one in the playlist (which can finish naturally before the others).set_wait_id: name
(optional, useless whenwait
is false) sets an idname
to the wait (seeinterrupt_wait
). Any valid string may be used.
volume
: change the volume of a given music. Parameters:file: "music.mp3"
(optional) which music to change. If no music is given, the global volume is changed.delta: true/false
(optional, default false) add/remove to the volume instead of setting an absolute value.value: x
if delta is false, sets the volume to x%. Note that this factor is applied to the music already loaded (with the initial gain). If delta is true, adds or remove the percentage to the current volume.fade: x
(optional) the volume change is applied with a x seconds fade.
pause
: pause a music. Parameters:file: "music.mp3"
(optional) gives the music to pause. If no music is given, it applies to all playing musics.
unpause
: unpause a music. Parameters:file: "music.mp3"
(optional) gives the msuic to unpause. If no music is given, it applies to all paused musics.
wait
: wait for some time or for an event. Parameters:file: "music.mp3"
(optional) wait for the end of music "music.mp3"duration: x
(optional) wait x seconds. Iffile
andduration
are given, wait the end of the music PLUS theduration
.set_wait_id: name
(optional) gives an id to the wait event (seeinterrupt_wait
). The id can be any valid string. Note again that this action is one of the only action that is not almost instantaneous. Use it wherever you need to make some time adjustments for other actions.
seek
: seek to a specific position in a music. Parameters:file: "music.mp3"
(optional) gives the music to seek. If no music is given, applies to all playing musics.delta: true/false
(optional, default false) Ifdelta
is true, the time seek is relative. Otherwise, it is absolute.value: x
Ifdelta
is true, then moves the music forward or backward by x seconds. If delta is false, the music goes to that position. If the music is fading (fade in or volume fade), the effect is immediately interrupted. If the music is fading out, the "seek" is ignored. In case ofloop
, a relative seek may jump to previous or next loop if possible, while an absolute seek will jump to a position in the current loop.
stop_all_actions:
Interrupts all the running and pending actions. Note that a started music (even with aloop
option) is the result of an action that is already finished and thus will keep playing (seestop
for that). Parameters:other_only: true/false
(optional, default false): ifother_only
is true, the interruption is valid for all keys except the one that ran the action. When false, it is thus useless to add actions after that one.
interrupt_wait
: stop a wait event (normalwait
or fade out wait). The keys that were waiting will move to the next actions. Parameters:wait_id: name
(optional) gives the id of thewait
to interrupt (defined withset_wait_id
, see actionswait
andstop
). If not given, interrupts all wait events.
pause_wait
: pauses a wait event (only for a wait with duration). The key that were waiting will keep waiting until thewait
is unpaused. Parameters:wait_id: name
(optional) gives the id of thewait
to pause. If not given, pauses all compatible wait events.
unpause_wait
: unpauses a paused wait event (only a wait with duration). The countdown will resume for the corresponding keys. Parameters:wait_id: name
(optional) gives the id of thewait
to unpause. If not given, unpauses all compatible wait events.
reset_wait
: resets a wait counter (only a wait with duration). If the wait was paused, it will stay paused and start at the beginning once it is unpaused. Parameters:wait_id: name
(optional) gives the id of thewait
to reset. If not given, resets all compatible wait events.
run_command
: Run a command. Parameters:command: my_command
: Gives the command to run.wait: true/false
(optional, default false) if true, waits for the command to finish (this wait is not interruptible by interrupt_wait)
load_music/unload_music
: load/unload a music from memory. Useful withload_all_musics
option only- `music: "music.mp3" the music to load/unload
aliases
: define aliases
It is possible to define some aliases for the parameters. Those aliases are internal to the configuration file. To give a nice name to a music, see "music_properties".
The aliases syntax is the following:
aliases:
alias1:
param: value
alias2:
param1: value1
param2: value2
You can then use in other places of the configuration file a special argument
include: alias1
or include: [alias1, alias2]
instead of param: value
. In
the case of several aliases that have identical elements, only the last one is
kept. In all cases, a value defined outside of an include takes precedence. See
below examples.
Examples
aliases:
music1:
file: "path/to/my/favourite/music.mp3"
keys:
'a':
play:
include: music1
music1
is now an alias for file: "path/to/my/favourite/music.mp3"
. You can
use include: music1
at any place where you would have written file:
"path/to/my/favourite/music.mp3"
. Aliases cannot be used in section
"music_properties".
aliases:
blue:
color: [0, 0, 255]
keys_properties:
'a':
description:
-
- blue key
include: blue
blue
is an alias for color [0, 0, 255]
. Wherever you need to specify color:
[0, 0, 255]
, you may write include: blue
instead.
aliases:
long_time:
duration: 42
keys:
'b':
wait:
include: long_time
play:
file: "music1.mp3"
long_time
is an alias for a 42 seconds duration. Instead of duration: 42
,
you may use include: long_time
.
Troubleshooting
You'll find below a list of possible problems, and a possible solution. If you find some other problems, please contact the author.
- The program starts and stops immediately.
It is usually a syntax error in the config file. In that case, the terminal should give some informations.
- The music sizzles
It may be a latency problems (with slow computers). Try to adapt it to a higher value (~0.1 seconds)
- Impossible to play more than one music at a time.
The system cannot mix the musics by itself. You may have a look at the device
list (--list-devices
) and choose another. You may also try the integrated
mixer, but the result may not be very fluid (you will certainly need to adjust
blocksize and latency parameters if you do that)
If your system uses PulseAudio, it may be a configuration problem for the ALSA
plugin. In that case, try to put the following configuration in
/etc/asound.conf
and restart your system. This is an empirical solution that
seems to have worked, there is no garanty that it will!
pcm.!default {
type pulse
fallback "sysdefault"
hint {
show on
description "Default ALSA Output (currently PulseAudio Sound Server)"
}
}
ctl.!default {
type pulse
fallback "sysdefault"
}
- The terminal shows an error:
Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 914, in _bootstrap_inner File "threading.py", line 862, in run File "kivy/input/providers/mtdev.py", line 219, in _thread_run File "kivy/lib/mtdev.py", line 131, in __init__ PermissionError: [Errno 13] Permission denied: '/dev/input/event6'
This is a device permission error. It can be safely ignored.
- For other problems or bug, please see Bug Tracker
About
The musics in the examples come from Jamendo. The complete version of those musics are available for free for a non-commercial use:
The crocodile noise comes from Universal-Soundbank.
This program was developped originaly to help handling music for shows of the circus company Les pieds jaloux. With no available sound manager, the artists sometimes had to run from the scene to make the sound transitions, making as little interaction as possible with the computed (one key).
Music Sampler
Description
Music Sampler est un lecteur de musique qui permet de pré-programmer des transitions musicales, qui peuvent ensuite être lancées à l'aide d'un simple appui sur une touche.
Pré-requis et installation
(Voir la section suivante pour Windows)
- Il faut avoir ffmpeg d'installé. Pour cela, il faut installer le paquet
libav-tools
(debian) :sudo apt-get install libav-tools
Si vous utilisez la version compilée de Music Sampler (cf. plus bas pour un lien de téléchargement), il n'y a rien d'autre à installer.
- Pour utiliser les sources directement, les modules suivants sont requis:
module | version minimale | commentaire |
---|---|---|
Cython | 0.24 | pour compiler Kivy |
Kivy | 1.9.1 | certaines fonctionnalités nécessitent de compiler/installer avec USE_SDL2=1 |
Markdown | 2.6.6 | pour la documentation uniquement |
pydub | 0.16.4 | |
Pygame | 1.9.2.dev1 | utilisée par Kivy |
Pygments | 2.1.3 | pour la documentation uniquement |
sounddevice | 0.3.3 | |
transitions | 0.4.1 | |
PyYAML | 3.11 |
Le projet est également disponible via pip
:
pip install music_sampler
Le programme utilise les polices Symbola
et Ubuntu
(Regular / Bold), qui
doivent être disponibles, et la librairie portaudio
:
sudo apt-get install ttf-ancient-fonts ttf-ubuntu-font-family portaudio
Pour compiler kivy avec la librairie SDL2, il faut certains paquets installés:
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
Installation sous Windows
Le processus suivant a permis d’installer music sampler sous windows:
- Installer python 3.9.* (prendre la version 64bit!)
-
Dans une invite de commande (
cmd.exe
), lancer:pip install music_sampler pip install docutils pygments pypiwin32 PySDL2 kivy.deps.sdl2 kivy.deps.glew
-
Télécharger ffmpeg (64bit, static) et mettre le contenu du dossier
bin
dans le dossier avec les musiques - Télécharger la police Ubuntu et installer Ubuntu-R et Ubuntu-B (Regular et Bold) pour tous les utilisateurs (clic droit sur la police)
- Télécharger la police Symbola et l’installer pour tous les utilisateurs (clic droit sur la police)
-
Écrire un fichier
run.bat
avec:@echo off music_sampler
-
Lancer
run.bat
pour démarrer le programme.
Version compilée
Une version compilée peut être créée avec pyinstaller:
pyinstaller music_sampler.spec
Téléchargements
- Un exemple de configuration ainsi que des musiques associées à l'exemple peuvent être trouvées sur owncloud
- Une version précompilée de
music_sampler
peut également être téléchargée dans le même dossier (attention, elle n'est pas toujours forcément à jour, lancer le programme avec-V
pour voir la version compilée)
Utilisation
Tout le travail consiste à préparer les transitions dans le fichier de
configuration config.yml
.
Lancer ensuite le programme dans le dossier où se situe le fichier de configuration (voir plus bas pour une utilisation avancée). Une fenêtre représentant un clavier apparaît. Le rond orange dans le coin du clavier devient vert lorsque tout est chargé, ou rouge en cas de problème. Une touche grisée et barrée représente une touche non-utilisable pour le moment : soit parce que la musique est en cours de chargement (au lancement du programme, cela peut prendre un peu de temps sur certaines machines), soit parce qu'il y a une action en cours.
Un exemple de fichier de configuration est fourni, avec un certain nombre de touches et de transitions programmées (pour les trois musiques fournies), la syntaxe du fichier (expliquée plus bas) se comprend aisément en le regardant. De plus, certaines touches (par exemple 'ÉCHAP' pour tout arrêter) peuvent être gardées d'une fois sur l'autre.
Actions possibles
- Cliquer sur une touche : affiche les actions associées à cette touche (dans le cadre en bas à gauche).
- Appuyer sur une touche : déclenche les actions associées à cette touche (affichées également dans le cadre en bas à gauche). Lorsqu'une touche a des actions en cours, son cadre est noir. Notez qu'une action de type "jouer une musique" est considérée comme terminée quand ladite musique est lancée. En cas d'appui répété sur une touche, music_sampler ne relance pas les actions associées à cette touche si ces actions ne sont pas terminées ; cela pour éviter les "accidents".
- Ctrl+C ou Ctrl+Q : quitte le programme (possible aussi en cliquant simplement sur la croix en haut à droite).
- Ctrl+R : recharge le fichier de configuration.
Options disponibles au lancement
Toutes les options au lancement sont facultatives ; la plupart du temps lancer
le programme dans le bon dossier suffit. La plupart d'entre elles peuvent être
définies également dans le fichier de config (à part --config
bien sûr). Les
arguments en ligne de commande ont toujours la priorité.
-h, --help
: affiche une liste des options disponibles.-c CONFIG, --config CONFIG
: précise le fichier de configuration à charger (par défaut, config.yml qui se trouve dans le dossier où est lancé music_sampler).-p MUSIC_PATH, --music-path MUSIC_PATH
: précise le chemin des musiques (par défaut, le dossier courant).--no-debug, --debug
: Affiche les informations de déboggage (désactivé par défaut)-V, --version
: affiche la version courante et quitte (utilisable uniquement pour la version compilée).-L, --language
: change la langue de l'application. Actuellement: fr, en (par défaut 'fr')--focus-warning, --no-focus-warning
: Afficher / Ne pas afficher d'avertissement lorsque l'application perd le focus (activé par défaut).
Les options suivantes sont plutôt réservées à un usage avancé de music_sampler, ou en cas de problème avec la configuration standard :
--no-builtin-mixing, --builtin-mixing
Effectue en interne le mixage des sons. Par défaut, music_sampler confie le mixage au système : n'activer cette option que si le système n'y parvient pas.-l LATENCY, --latency LATENCY
: latence. Préciser "low", "high" ou un nombre de secondes (par défaut, "high")-b BLOCKSIZE, --blocksize BLOCKSIZE
: taille des blocs. Nombre de frames pour chaque étape du mixeur. 0 (par défaut) signifie que le programme choisit lui-même le nombre qui lui convient.-f FRAME_RATE, --frame-rate FRAME_RATE
: fréquence d'échantillonnage pour jouer les musiques. Par défaut : 44100-x CHANNELS, --channels CHANNELS
: nombre de canaux par musique (2 par défaut, pour une écoute stéréo)-s SAMPLE_WIDTH, --sample-width SAMPLE_WIDTH
: largeur d'échantillonnage (nombre d'octets pour chaque frame). Par défaut : 2.--device DEVICE
: sélectionne le périphérique de son.--list-devices
: Affiche la liste des périphériques de son disponibles.--load-all-musics
: Charger toutes les musiques au démarrage (défaut: True)-- ARGS
: Arguments à passer à la librairie Kivy.
Configurer les touches
ATTENTION : le format du fichier de configuration est susceptible d'évoluer, sans garantie de rétrocompatibilité.
Le fichier config.yml utilise la syntaxe yaml. Les catégories et sous-catégories
sont gérées par l'indentation par des espaces (mais PAS par des tabulations !).
le #
est un symbole de commentaire : tout ce qui suit ce symbole sur une ligne
est ignoré.
En cas d'erreur dans le fichier de configuration, un message d'erreur s'affiche dans le terminal. Selon la "gravité" de l'erreur, music_sampler se lance en ignorant les actions erronées (en colorant éventuellement la touche en noir), ou ne se lance pas du tout.
Le fichier contient plusieurs sections :
config:
...
aliases:
...
music_properties:
...
key_properties:
...
keys:
...
config
La section config permet d'enregistrer les paramètres habituellement donnés en
ligne de commande. Les '-' dans le nom du paramètre long doivent être remplacés
par des '_' (par exemple '--music-path' -> 'music_path'). Pour les switches
(debug
, focus_warning
, builtin_mixing
), utilisez la version sans le 'no-'
et spécifiez true
/ false
en valeur. Notez que les arguments donnés en ligne
de commande sont toujours prioritaires sur les valeurs du fichier.
music_properties
: propriétés des musiques
Cette section sert à définir des propriétés globales des musiques.
Exemples
"music1.mp3":
name: My favorite music
gain: 1.4
La musique "music1.mp3" est désignée par le nom "My favorite music". Elle est chargée à 140% de son volume normal.
"music2.mp3":
gain: 0.7
La musique "music2.mp3" est chargée à 70% de son volume normal.
Liste des options possibles
name: My music
La musique sera désignée (dans les actions, dans le terminal) comme "My music" au lieu du chemin du fichier. Par exemple le cadre des actions affichera "starting « My music » at volume 100%". Attention, cela ne fait pas office d'alias dans le fichier de configuration (voir la section aliases).gain: x
Charge la musique avec un gain de x (multiplicatif). Utiliser la commande "volume" pour changer ponctuellement le volume (0 à 100%) au cours de l'écoute.
key_properties
: affichage et propriétés des touches
Cette section sert à décrire l'affichage à l'écran des touches : couleur et texte. Par défaut, une touche "attribuée" à une ou plusieurs actions s'affiche en vert.
Exemples
'ESC':
description:
-
- STOP !
color: [255, 0, 0]
repeat_delay: 2
La touche échap est de couleur rouge, et le texte "STOP !" est affiché sur la deuxième ligne. Si on appuie deux fois sur la même touche à moins de deux secondes d'intervalle, le second appui est ignoré.
Liste des options possibles
description
: le texte qui s'affiche, à côté du "nom" de la touche. Il faut mettre un tiret pour une ligne de texte (pas de retour à la ligne automatique). La première ligne correspond à celle de la lettre associée à la touche, aussi il vaut mieux souvent la laisser vide, ou ne mettre que très peu de texte (voir l'exemple ci-dessus). Sur un écran de taille raisonnable, on peut compter 3 lignes (incluant la première) pour une touche "standard".color: [r, g, b]
: la couleur de la touche. r, g et b sont les proportions de rouge, vert et bleu, et doivent être des entiers entre 0 et 255.repeat_delay: x
(par défaut : 0) : délai de "sécurité" en cas d'appuis successifs sur la touche. La touche est désactivée (grisée et barrée) pendant toute la durée des actions puis le délai de x secondes.actions: liste
: Liste des actions à effectuer en appuyant sur la touche.
Propriété common
Une entrée spéciale common
s'applique à toutes les touches. Les propriétés
définies dans cette entrée peuvent être modifiées individuellement.
keys
: actions sur les touches
Cette section sert à décrire, pour chaque touche, la liste des actions
successives. Notez que la plupart des actions (hors wait
et quelques cas
particuliers, voir plus bas) sont quasi-instantanées.
Cette section est obsolète et remplacée par une clé actions
contenant une
liste dans la section key_properties
pour chaque touche.
Exemples
'a':
- play:
file: "music1.mp3"
volume: 70
start_at: 10
- wait:
duration: 5
- stop:
file: "music1.mp3"
fade_out: 2
Lance la musique "music1.mp3" à 70% de son volume max, à 10 secondes du début, puis au bout de 5 secondes coupe la musique avec un fondu de 2 secondes.
'b':
- stop:
file: "music1.mp3"
fade_out: 5
wait: false
- play:
file: "music2.mp3"
fade_in: 5
Effectue un fondu enchaîné de 5 secondes entre "music1.mp3" et "music2.mp3"
'c':
- stop:
file: "music1.mp3"
fade_out: 5
wait: true
- wait:
duration: 2
- play:
file: "music2.mp3"
- seek:
file: "music2.mp3"
delta: false
value: 60
Coupe la musique "music1.mp3" avec un fondu de 5 secondes, attend la fin du fondu, puis attend encore deux secondes et lance la musique "music2.mp3", au temps d'une minute.
'd':
- volume:
file: "music1.mp3"
value: 50
- play:
file: "noise.mp3"
loop: 1
- wait:
file: "noise.mp3"
- volume:
file: "music1.mp3"
value: 100
Baisse le volume de "music1.mp3" pendant que le son "noise.mp3" est joué par dessus (deux fois). Le volume revient à la normale une fois que les deux écoutes du son "noise" sont terminées.
'e':
- pause:
file: "music1.mp3"
- wait:
duration: 10
- unpause:
file: "music1.mp3"
- seek:
file: "music1.mp3"
delta: true
value: 5
Met en pause la musique "music1.mp3" pour 10 secondes et la relance après, en avançant de 5 secondes dans la musique.
Liste des actions possibles:
comment
: ne fait aucune action, mais affiche un message dans la zone des actionsmessage: "some text"
le message à afficher
play
: joue une musique. music_sampler ne joue qu'une musique à la fois : si la musique demandée est déjà en train d'être jouée, elle n'est pas relancée ou jouée "par dessus". Paramètres :file: "music.mp3"
précise la musique jouée (chemin relatif).fade_in: x
(facultatif) lance la musique avec un fondu au départ de x secondes.volume: x
(facultatif, défaut : 100) la musique doit être jouée à x% de son volume max.loop: x
(facultatif, défaut : 0) la musique doit être répétée x fois. Indiquer -1 pour la répéter indéfiniment. Attention, x est le nombre de répétitions, donc pour lire trois fois la musique, mettreloop: 2
.start_at: x
(facultatif, défaut : 0) la musique démarre à x secondes du début.restart_if_running: true/false
(facultatif, défaut : false) la musique est éventuellement stoppée et redémarrée si nécessaire
stop
: arrête une musique donnée. Paramètres :file: "music.mp3"
(facultatif) précise la musique à stopper. Si aucune musique n'est précisée, lestop
s'applique à toutes les musiques.fade_out: x
(facultatif) stoppe la musique avec un fondu de x secondes.wait: true/false
(facultatif, par défaut : false) dans le cas d'un fondu, attendre la durée du fondu pour faire les actions suivantes. Si la musique s'arrêtait naturellement avant la fin du fondu, l'attente se termine lorsque la musique se termine naturellement. Lorsque plusieurs musiques sont stoppées en fondu, lewait
n'attend que la dernière musique de la playlist (qui peut se terminer naturellement avant les autres).set_wait_id: name
(facultatif, inutile lorsquewait
est à false) donne l'identifiantname
à l'attente de fin du fondu (voirinterrupt_wait
). L'identifiant peut être n'importe quelle chaîne de caractère.
volume
: change le volume d'une musique donnée. Paramètres :file: "music.mp3"
(facultatif) précise la musique. Si aucune musique n'est précisée, la modification s'applique au volume global.delta: true/false
(facultatif, par défaut : false) le volume doit il être précisé en absolu (false), ou en relatif (true), voir plus bas.value: x
Si delta est à false, met le volume à x% du volume max (x doit être entre 0 et 100). Ce facteur est appliqué à la musique déjà chargée en mémoire (voir section "propriétés"), donc le 100% fait référence au volume de chargement. Si delta est à true, applique un modificateur de x% au volume (x doit être un entier signé). Notez qu'une action "+10%" relative ne correspond pas à un pourcentage du volume actuel, mais du volume "de référence" 100%. Ainsi, effectuer +10% et -10% en relatif revient bien à 100%.fade: x
(facultatif) le changement de volume est appliqué en fondu sur x secondes. Il n'y a pas d'attente de la fin du fondu pour lancer les actions suivantes : au besoin, rajouter unwait
à la main.
pause
: met en pause une musique. Paramètres :file: "music.mp3"
(facultatif) précise la musique à mettre en pause. Si non précisé, s'applique à toutes les musiques.
unpause
: relance une musique mise en pause (là où elle en était). Paramètres :file: "music.mp3"
(facultatif) précise la musique à relancer. Si non précisé, s'applique à toutes les musiques.
wait
: attend un temps donné. Paramètres :file: "music.mp3"
(facultatif) attend la fin de la musique "music.mp3"duration: x
(facultatif) attend x secondes. Sifile
etduration
sont précisés, l'attente dure jusqu'à la fin de la musique PUIS la durée donnée parduration
.set_wait_id: name
(facultatif) donne l'identifiantname
à l'attente (voirinterrupt_wait
). L'identifiant peut être n'importe quelle chaîne de caractère. Notez une fois encore quewait
est quasiment la seule action qui attend d'avoir terminé pour lancer la commande suivante, toutes les autres sont lancées successivement mais sans attendre (donc presque simultanément) : ne pas hésiter à rajouter des commandes d'attente partout où c'est nécessaire.
seek
: permet d'aller à un endroit précis dans une musique. Paramètres :file: "music.mp3"
(facultatif) précise la musique. Si aucune musique n'est précisée, l'action s'applique à toutes les musiques.delta: true/false
(facultatif, défaut : false) Sidelta
est true, le temps est relatif. Si delta est false, le temps est absolu, voir plus bas.value: x
Sidelta
est true, alors fait avancer de x secondes dans la musique (reculer si x est négatif). Si delta est false, alors la lecture se place à x secondes à partir du début. Si la musique est en train de faire un fondu (au départ, ou changement de volume), le fondu se "termine automatiquement" : et la musique est immédiatement au volume final voulu. Si la musique est en train de se terminer en fondu, le "seek" est ignoré (un fondu de fin considère la musique comme déjà terminée). En cas deloop
, si le déplacement est relatif la musique peut éventuellement passer à la répétition suivante / précédente; sinon, le déplacement se fait dans la répétition courante.
stop_all_actions:
Interrompt toutes les actions en cours et à faire. Notez qu'une musique lancée (y compris avec une optionloop
) est considérée comme une action "déjà terminée", et ne sera donc pas interrompue (utiliserstop
sans arguments pour stopper toutes les musiques en écoute). Paramètre :other_only: true/false
(facultatif, défaut : false) : siother_only
est true, la commande interrompt uniquement les actions des autres touches. Sinon, cette commande interrompt également les actions de la touche actuelle ; dans ce cas il est inutile de mettre des actions à la suite de celle-ci puisqu'elles seront systématiquement interrompues.
interrupt_wait
: interrompt l'attente (dewait
ou fin d'un fondu avec attente) et passe directement à l'action suivante. Paramètre :wait_id: name
(facultatif) précise l'identifiant duwait
à stopper (défini parset_wait_id
, voir les actionswait
etstop
). Si absent, interrompt toutes les attentes.
pause_wait
: met une attente en pause (uniquement pour une attente ayant une durée définie). La touche qui attend cet événement ne continuera pas tant que l'attente n'est pas reprise. Paramètres :wait_id: name
(facultatif) précise l'identifiant duwait
à mettre en pause. Si absent, met en pause toutes les attentes compatibles.
unpause_wait
: reprend une attente en pause (uniquement pour une attente ayant une durée définie). Le compte à rebours reprendra pour la touche correspondante en train d'attendre. Paramètres:wait_id: name
(facultatif) précise l'identifiant duwait
à reprendre. Si absent, reprend toutes les attentes compatibles.
reset_wait
: réinitialise une attente (uniquement pour une attente ayant une durée définie). Si l'attente est en pause, le compte à rebours ne recommencera au début que lorsque l'attente sera reprise. Paramètres:wait_id: name
(facultatif) précise l'identifiant duwait
à réinitialiser. Si absent, réinitialise toutes les attentes compatibles.
run_command
: lance une commande. Paramètres :command: my_command
: précise la commande à lancer.wait: true/false
(facultatif, défaut : false) : siwait
est true, attend que la commande ait fini de s'exécuter.
load_music/unload_music
: charger/décharger une musique en mémoire. Uniquement utile en combinaison avec l’optionload_all_musics
.- `music: "music.mp3" la musique à charger/décharger.
aliases
: définir des alias
Il est possible de définir des alias pour les différents paramètres. Ces alias sont internes au fichier de configuration ; pour afficher un "joli" nom d'une musique, voir plutôt "music_properties".
La syntaxe est la suivante:
aliases:
alias1:
param: value
alias2:
param1: value1
param2: value2
On utilise ensuite, dans le fichier de configuration, include: alias1
ou
include: [alias1, alias2]
à la place de param: value
. Dans le cas de
plusieurs aliases inclus contenant des éléments identiques, seul le dernier est
pris en compte. Dans tous les cas, les alias ne sont pas prioritaires par
rapport aux éventuels paramètres définis là où ils sont inclus. Voir les
exemples ci-dessous.
Exemples
aliases:
music1:
file: "path/to/my/favourite/music.mp3"
keys:
'a':
play:
include: music1
music1
est désormais un alias pour "path/to/my/favourite/music.mp3"
. À
chaque fois qu'on veut écrire file: "path/to/my/favourite/music.mp3"
, on peut
écrire à la place include: music1
. Attention, dans la section
"music_properties", les alias ne fonctionnent pas, et il faut écrire le nom du
fichier complet.
aliases:
blue:
color: [0, 0, 255]
keys_properties:
'a':
description:
-
- blue key
include: blue
blue
est un alias pour la couleur [0, 0, 255]
. À chaque fois qu'on veut
écrire color: [0, 0, 255]
, on peut écrire include: blue
à la place.
aliases:
long_time:
duration: 42
keys:
'b':
wait:
include: long_time
play:
file: "music1.mp3"
long_time
est un alias pour la durée 42 secondes. Au lieu d'écrire duration:
42
, on peut écrire include: long_time
.
Problèmes possibles
Sont listés ci-dessous une liste de problèmes rencontrés, avec des solutions proposées. Si vous en découvrez d'autre, contactez l'auteur pour les ajouter à la liste.
- Le programme se lance et s'arrête tout de suite.
Il s'agit généralement d'une erreur de syntaxe dans le fichier de config. Dans ce cas, le terminal doit afficher quelques détails sur l'erreur en question (au moins la ligne correspondante).
- La musique "grésille" affreusement.
Il peut s'agir d'un problème de latence (avec certains ordinateurs un peu lents). Essayez de changer la latence (par exemple, 0.1 seconde)
- Impossible de jouer plus d'une musique à la fois.
Le système n'arrive pas à mixer les musiques par lui-même. Vous pouvez essayer
de regarder la liste des périphériques de son (--list-devices
) puis en
sélectionner un autre si disponible. Vous pouvez aussi essayer le mixeur intégré
à music_sampler, mais les résultats ne sont pas toujours très fluides (ne pas
hésiter à jouer avec les paramètres avancés comme latency et blocksize).
Si votre système utilise PulseAudio, il peut s'agir d'un problème de
configuration du plugin ALSA. Dans ce cas, essayez de mettre la configuration
suivante dans /etc/asound.conf
, puis redémarrer la machine (solution empirique
qui semble avoir fonctionné, sans garantie !):
pcm.!default {
type pulse
fallback "sysdefault"
hint {
show on
description "Default ALSA Output (currently PulseAudio Sound Server)"
}
}
ctl.!default {
type pulse
fallback "sysdefault"
}
- La console affiche une erreur :
Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 914, in _bootstrap_inner File "threading.py", line 862, in run File "kivy/input/providers/mtdev.py", line 219, in _thread_run File "kivy/lib/mtdev.py", line 131, in __init__ PermissionError: [Errno 13] Permission denied: '/dev/input/event6'
C'est une erreur de permission d'accès à un périphérique, généré par la librairie kivy. Elle peut être ignorée et n'aura pas d'incidence.
- Pour d'autres problèmes ou bugs à reporter, voir le Bug Tracker
Divers
Les extraits de musiques proposés en exemples proviennent de Jamendo. Les musiques (complètes) sont disponibles en libre téléchargement pour un usage non commercial :
Le bruit de crocodile provient de Universal-Soundbank.
Cet outil a été développé à l'origine pour faciliter la gestion du son pour les spectacles de la compagnie circassienne Les pieds jaloux. N'ayant pas d'ingénieur son, les artistes eux-mêmes peuvent alors gérer leur musique lorsqu'ils ne sont pas sur scène : d'où la nécessité de préparer les transitions à l'avance et, au moment de la représentation, de réduire l'interaction avec la machine au minimum (une touche).