Skip to main content

pulsemixer - CLI and curses mixer for PulseAudio

Project description

pulsemixer

CLI and curses mixer for PulseAudio

Requirements

  • Python >= 3.3
  • PulseAudio >= 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
pip install pulsemixer

Interactive mode

Interactive mode is used if no arguments are given (except --color and --server)

Image of 1 Image of 2

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pulsemixer-1.5.1.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

pulsemixer-1.5.1-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file pulsemixer-1.5.1.tar.gz.

File metadata

  • Download URL: pulsemixer-1.5.1.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.40.0 CPython/3.7.3

File hashes

Hashes for pulsemixer-1.5.1.tar.gz
Algorithm Hash digest
SHA256 11dad404a3a658d5741169194e438177061ee6e4fcb9b0ed2c9c248caacdadd5
MD5 23f73341d78b9fe52e1f1410fa70d468
BLAKE2b-256 2e0dc29d2f97691b85e7b59dc66f3fdced0df2e581b73220a89cfe881d743b4b

See more details on using hashes here.

File details

Details for the file pulsemixer-1.5.1-py3-none-any.whl.

File metadata

  • Download URL: pulsemixer-1.5.1-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.21.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.40.0 CPython/3.7.3

File hashes

Hashes for pulsemixer-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5537b5f52717325ebc5358a95db965bbc2c1ae1e4e240c25e2d920acf8e0e160
MD5 af0b1a2e2db49990d90adebef1e47d57
BLAKE2b-256 7044c52c47954e43dd70b226c552553b8788262b2a82741a9a3ae778a588173a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page