GitHub - GeorgeFilipkin/pulsemixer: CLI and curses mixer for PulseAudio (original) (raw)
pulsemixer
CLI and curses mixer for PulseAudio
Requirements
Python
>= 3.3PulseAudio
>= 1.0
Installation
Pulsemixer is a self-sufficient single-file python app that doesn't require any extra libraries. You can simply download pulsemixer manually, do chmod +x ./pulsemixer
and put it anywhere you want.
Below are some more convenient ways to install pulsemixer:
curl
curl https://raw.githubusercontent.com/GeorgeFilipkin/pulsemixer/master/pulsemixer > pulsemixer && chmod +x ./pulsemixer
pip
Interactive mode
Interactive mode is used if no arguments are given (except --color
and --server
)
Interactive controls:
j k ↑ ↓ Navigation
h l ← → Change volume
H L Shift← Shift→ Change volume by 10
1 2 3 .. 8 9 0 Set volume to 10%-100%
m Mute/Unmute
Space Lock/Unlock channels
Enter Context menu
F1 F2 F3 Change modes
Tab Shift Tab Next/Previous mode
Mouse click Select device or mode
Mouse wheel Volume change
Esc q Quit
Via context menu it is possible to set-default-sink
, set-default-source
, move-sink-input
, move-source-output
, suspend-sink
, suspend-source
, set-sink-port
, set-source-port
, kill-client
, kill-sink-input
, kill-source-output
, set-card-profile
. See man pactl
for details on these features.
CLI
Usage of pulsemixer:
-h, --help show this help message and exit
-v, --version print version
-l, --list list everything
--list-sources list sources
--list-sinks list sinks
--id ID specify ID, default sink is used if no ID specified
--get-volume get volume for ID
--set-volume n set volume for ID
--set-volume-all n:n set volume for ID, for every channel
--change-volume +-n change volume for ID
--max-volume n set volume to n if volume is higher than n
--get-mute get mute for ID
--mute mute ID
--unmute unmute ID
--toggle-mute toggle mute for ID
--server choose the server to connect to
--color n 0 no color, 1 color currently selected, 2 full-color
--no-mouse disable mouse support
--create-config generate configuration file
CLI examples
Pulsemixer follows PulseAudio's terminology:
- Sink - an output device.
- Source - an input device.
- Sink input - a stream that is connected to an output device, i.e. an input for a sink.
- Source output - a stream that is connected to an input device, i.e. an output of a source.
$ pulsemixer --list Sink: ID: sink-1, Name: Built-in Stereo, Mute: 0, Channels: 2, Volumes: ['60%', '60%'], Default Sink: ID: sink-3, Name: HDMI Audio (HDMI 2), Mute: 0, Channels: 2, Volumes: ['50%', '50%'] Sink input: ID: sink-input-663, Name: Firefox, Mute: 0, Channels: 2, Volumes: ['60%', '60%'] Sink input: ID: sink-input-686, Name: mocp, Mute: 0, Channels: 2, Volumes: ['60%', '60%'] Source: ID: source-1, Name: HDMI Audio (HDMI 2), Mute: 0, Channels: 2, Volumes: ['100%', '100%'] Source: ID: source-2, Name: Built-in Stereo, Mute: 0, Channels: 2, Volumes: ['40%', '40%'], Default Source output: ID: source-output-7, Name: arecord, Mute: 0, Channels: 1, Volumes: ['40%]
Print volume of the default sink, decrease by 5, print new volume:
$ pulsemixer --get-volume --change-volume -5 --get-volume 60 60 55 55
Toggle mute of source-1
, print mute status:
$ pulsemixer --id source-1 --toggle-mute --get-mute 1
Set volume of sink-input-663
to 50, then set volume of sink-3
to 10 (left channel) and 30 (right channel):
$ pulsemixer --id sink-input-663 --set-volume 50 --id sink-3 --set-volume-all 10:30
Increase volume of sink-input-686
by 10 but don't get past 100:
$ pulsemixer --id sink-input-686 --change-volume +10 --max-volume 100
Configuration
Optional. The config file will not be created automatically. Do pulsemixer --create-config
or copy-paste it from here.
;; Goes into ~/.config/pulsemixer.cfg, $XDG_CONFIG_HOME respected ;; Everything that starts with "#" or ";" is a comment ;; For the option to take effect simply uncomment it
[general] step = 1 step-big = 10 ; server =
[keys] ;; To bind "special keys" such as arrows see "Key constant" table in ;; https://docs.python.org/3/library/curses.html#constants ; up = k, KEY_UP, KEY_PPAGE ; down = j, KEY_DOWN, KEY_NPAGE ; left = h, KEY_LEFT ; right = l, KEY_RIGHT ; left-big = H, KEY_SLEFT ; right-big = L, KEY_SRIGHT ; top = g, KEY_HOME ; bottom = G, KEY_END ; mode1 = KEY_F1 ; mode2 = KEY_F2 ; mode3 = KEY_F3 ; next-mode = KEY_TAB ; prev-mode = KEY_BTAB ; mute = m ; lock = ' ' ; 'space', quotes are stripped ; quit = q, KEY_ESC
[ui] ; hide-unavailable-profiles = no ; hide-unavailable-ports = no ; color = 2 ; same as --color, 0 no color, 1 color currently selected, 2 full-color ; mouse = yes
[style] ;; Pulsemixer will use these characters to draw interface ;; Single characters only ; bar-top-left = ┌ ; bar-left-mono = ╶ ; bar-top-right = ┐ ; bar-right-mono = ╴ ; bar-bottom-left = └ ; bar-bottom-right = ┘ ; bar-on = ▮ ; bar-on-muted = ▯ ; bar-off = - ; arrow = ' ' ; arrow-focused = ─ ; arrow-locked = ─ ; default-stream = * ; info-locked = L ; info-unlocked = U ; info-muted = M ; 🔇 ; info-unmuted = M ; 🔉
[renames] ;; Changes stream names in interactive mode, regular expression are supported ;; https://docs.python.org/3/library/re.html#regular-expression-syntax ; 'default name example' = 'new name' ; '(?i)built-in .* audio' = 'Audio Controller' ; 'AudioIPC Server' = 'Firefox'
The old environment variable PULSEMIXER_BAR_STYLE
is still supported. To change the volume bar's appearance in (e.g.) zsh without creating the config file:
export PULSEMIXER_BAR_STYLE="╭╶╮╴╰╯◆◇· ──"
See also
python-pulse-control - Python high-level interface and ctypes-based bindings for PulseAudio.