A frontend to ease the use of pulseaudio's routing capabilities, mimicking voicemeeter's workflow

Overview

Pulsemeeter

A frontend to ease the use of pulseaudio's routing capabilities, mimicking voicemeeter's workflow

Features

  • Create virtual inputs and outputs
  • Route audio from one device to another
  • Volume controll

Dependencies

  • python-gobject

Installation

Arch/Manjaro

A package is available in the AUR pulsemeeter-git. If you use an AUR helper:

paru -S pulsemeeter-git

Any distro

Clone the repo and run the makefile:

git clone https://github.com/theRealCarneiro/pulsemeeter.git
cd pulsemeeter
sudo make install

Uninstall

sudo make uninstall
Comments
  • Can't find config.json

    Can't find config.json

    on attempting to run pulsemeeter I get an error and traceback:

    Traceback (most recent call last):
      File "/usr/local/bin/pulsemeeter", line 8, in <module>
        sys.exit(main())
      File "/usr/local/lib/python3.9/dist-packages/pulsemeeter/__main__.py", line 33, in main
        with open(config_file, 'w') as outfile:
    FileNotFoundError: [Errno 2] No such file or directory: '/home/hugeblank/.config/pulsemeeter/config.json'
    

    Also - instructions on how to install dependencies would be nice, as I'm pretty sure I don't even have them properly set up.

    bug 
    opened by hugeblank 10
  • [BUG] ValueError: Namespace AppIndicator3 not available

    [BUG] ValueError: Namespace AppIndicator3 not available

    when I try to run pulsemeeter (installed with: sudo pip install pulsmeeter on Pop!_OS 22.04, with python 3.10.4, it doesn't open. When I run it in the terminal it says: Traceback (most recent call last): File "/usr/local/bin/pulsemeeter", line 5, in from pulsemeeter.main import main File "/usr/local/lib/python3.10/dist-packages/pulsemeeter/init.py", line 1, in from .interface import MainWindow File "/usr/local/lib/python3.10/dist-packages/pulsemeeter/interface/init.py", line 2, in from .main_window import MainWindow File "/usr/local/lib/python3.10/dist-packages/pulsemeeter/interface/main_window.py", line 26, in gi_require_version('AppIndicator3', '0.1') File "/usr/lib/python3/dist-packages/gi/init.py", line 126, in require_version raise ValueError('Namespace %s not available' % namespace) ValueError: Namespace AppIndicator3 not available

    opened by timocarnill 6
  • Command Line?

    Command Line?

    Any chance for command line arguments to toggle things to be able to keybind or macro certain things? ie: toggle A2 on Virtual Input 1, things like that.

    Thanks for making this!

    opened by Doxmiatoo 6
  • AUR packages don't build anymore

    AUR packages don't build anymore

    AUR packages don't build anymore citing ERROR: pulsectl not installed, please run 'pip install requirements.txt' inside source directory. Please let me know if you need more details.

    good first issue 
    opened by ayush123460 6
  • Pulsemeeter started and running no GUI/errors

    Pulsemeeter started and running no GUI/errors

    Describe the bug Pulsemeeter GUI does not appear, not located in the systray and if I try to open the application I see a pulsemeeter icon show as a blank document and it says its a text editor. Unable to find any GUI, and the terminal will say its already running which is verified when looking at my audio outputs as I have virtual ones appear.

    To Reproduce Steps to reproduce the behavior:

    1. Type pulsemeeter daemon or pulsemeeter init

    Expected behavior Pulsemeeter GUI appears

    Screenshots image image image image image

    Desktop (please complete the following information):

    • Distro: Linux-5.18.0-kali2-amd64-x86_64-with-glibc2.33
    • Python Version: 3.10.5 (main, Jun 8 2022, 09:26:22) [GCC 11.3.0]
    • Desktop ENV: KDE plasmashell 5.24.5

    Additional context Nothing additional for now.

    duplicate 
    opened by ZerkerEOD 4
  • No audio routed to/from any virtual inputs/outputs using pipewire

    No audio routed to/from any virtual inputs/outputs using pipewire

    As soon as I launch pulsemeeter, all audio gets routed there. However, there are two problems: The applications' audio doesn't seem to get connected to the meters, and the audio doesn't seem to get routed properly from the "Virtual Inputs" to the hardware outputs. (It doesn't look like any of the "Virtual Inputs" or "Virtual Outputs" are working at all, actually. The only working pathway through the application, tested using a patchbay to connect things where they probably weren't intended, is from a "Hardware Input" to a "Hardware Output"). I'd be happy to provide more info or otherwise help resolve this, as Pulsemeeter looks like it would be ideal for me, if only it worked with the rest of my setup.

    (I'm on version 1.2.6, other possibly relevant info: pipewire, pipewire-alsa, pipewire-pulse, pipewire-jack, and pulseaudio-alsa are all installed. I'm running Arch Linux (pulsemeeter installed from the AUR) and Cinnamon.)

    Thanks!

    bug 
    opened by dacid44 4
  • Daemon doesn't start properly when using pipewire-pulse

    Daemon doesn't start properly when using pipewire-pulse

    Describe the bug When pulsemeeter is started using the daemon option after starting pipewire-pulse, it gives me the following error and doesn't work:

    Error setting sink Virtual_Input_1 as primary
    Error setting source Virtual_Output_B1 as primary
    

    Error on the pipewire-pulse side (using systemctl --user status pipewire-pulse.service):

    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.loopback: error id:0 seq:91 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.loopback: error id:0 seq:80 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:51 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.loopback: error id:0 seq:101 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:72 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.loopback: error id:0 seq:140 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:93 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:102 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:111 res:-32 (Broken pipe): connection error
    Aug 29 11:12:59 ZephyrusLeon pipewire-pulse[48052]: mod.null-sink: error id:0 seq:121 res:-32 (Broken pipe): connection error
    

    To Reproduce Steps to reproduce the behavior:

    1. Stop pipewire-pulse.socket and pipewire-pulse.service.
    2. Start pipe-wirepulse again.
    3. execute pulsemeeter daemon. The -d option doesn't print any further errors.

    Workaround? There are two ways of running pulsemeeter properly:

    Method 1:

    1. Stop pipewire-pulse.socket and pipewire-pulse.service.
    2. Start pipe-wirepulse again.
    3. execute pulsemeeter (without daemon).

    Method 2:

    1. Stop pipewire-pulse.socket and pipewire-pulse.service.
    2. Start pipe-wirepulse again.
    3. Start PulseAudio Volume Control.
    4. Execute pulsemeeter daemon.
    5. You may now quit PAVU.

    Expected behavior Pulsemeeter should, as a daemon, also launch properly and not cause errors.

    Desktop (please complete the following information):

    • Distro: EndeavourOS Linux x86_64
    • Kernel: 5.18.16-arch1-g14-2
    • Python 3.10.6
    opened by M3gaFr3ak 3
  • Don't rename device, just update description

    Don't rename device, just update description

    Why

    This change restructures how devices are renamed and updated. This is done to help be able to easily identify which devices were created by Pulsemeeter and which ones may be user created.

    I actually discovered this limitation when trying to make my own sink that uses a null module, but I was unable to load the null module as a sink in Pulsemeeter. This doesn't fixing not being able to load external null modules, but it's a step that helps make it easier to maintain and I think allows for easier managing of devices.

    How it works

    Previously, the config file had one name field that was used for the name and the description of the device. Now, each device has both a name and a desc field. When a user does any type of renaming, the device is referenced by the name (which now never changes) and the description property is updated.

    For backwards compatibility, if a user is using an old config that doesn't have a desc field for the device, it will default to the name field, and then also create the the desc field as necessary.

    I didn't see a contributing guideline, so please let me know if there's anything else I should include.

    enhancement 
    opened by ImDevinC 3
  • Clarification of how virtual outputs are presented

    Clarification of how virtual outputs are presented

    I have a question regarding virtual outputs (B1-3). What are they and how are they presented? I can't find how they're represented in pulseaudio. I assumed they were Mic/Mic_Aux/Mic_Aux_2 but that doesn't make much sense given the naming scheme for the virtual inputs (Virtual_Sink/_Aux/_Aux_2). What I'd expect to see are 3 sources named in the same way (Virtual_Source/_Aux/_Aux_2), but they don't seem to exist.

    image For less savvy users, I'm asking about the right side box labelled Virtual Outputs.

    Loving the consistent addition of features to pulsemeeter, it's really impressive!

    opened by hugeblank 3
  • Problem when start pulsemeeter

    Problem when start pulsemeeter

    I installed pulsemeeter, when I open it, it shows the error below.

    [[email protected] ~]$ pulsemeeter ERROR: invalid json grep: warning: stray \ before # grep: warning: stray \ before # grep: warning: stray \ before #

    invalid json from server App sinks returned an error, audio backend probably crashed. Server will be closed. Could not join subscribe_thread (maybe there is none) closing client handler threads... closing socket sending exit signal to listener thread, it should exit within 2 seconds...

    Pulseaudio is installed.

    Distro: Archlinux

    opened by kureshio 2
  • High memory usage when application is in the background.

    High memory usage when application is in the background.

    Describe the bug Over time, the application slowly grows in memory usage despite not doing anything. It starts at about 80 MB when opening, but over time can grow up to 5 or 6 GB of memory. Terminating the application and reopening it solves this issue without any apparent change.

    To Reproduce Steps to reproduce the behavior:

    1. Open application
    2. Leave it running for some time
    3. Check memory usage

    Expected behavior I expect the memory usage to remain the same over time, which is around 80 MB on my system at startup.

    Desktop (please complete the following information):

    • Distro: Arch
    • Python Version: 3.10.5
    opened by sharifhsn 2
  • Ctrl+C or quitting via GUI sometimes doesn't kill pulsemeeter-nightly started from CLI

    Ctrl+C or quitting via GUI sometimes doesn't kill pulsemeeter-nightly started from CLI

    Describe the bug If you start pulsemeeter with just pulsemeeter in the CLI and close it in your DE, sometimes it says "writing config" and doesn't properly exit and return you to your shell. Only kill -9 actually helps in that situation, kill -15 or Ctrl+C doesn't. Most of the time it works.

    To Reproduce

    1. Download current nightly – at the time of writing: https://github.com/theRealCarneiro/pulsemeeter/commit/6a7d8162aacb64fae01e6448f99fa154de12f04e
    2. Start in Terminal
    3. let it run for a while, play some audio, do other things
    4. quit in GUI, check if you get returned to your shell
    5. check if you get returned if you hit Ctrl+C

    Expected behavior Pulsemeeter actually exits 100% of the time when you hit Ctrl+C or quit the app.

    Logs

    Closed via GUI:

    [DEBUG] in [[email protected]_log]: started logger instance <Logger generic (DEBUG)> at thread 18840
    [DEBUG] in [[email protected]_sinks]: pmctl init sink GPU+AUX "2"
    
    [DEBUG] in [[email protected]_sources]: 
    [DEBUG] in [[email protected]_primarys]: 
    [DEBUG] in [[email protected]_clients]: new client 0
    [DEBUG] in [[email protected]_to_client]: message from client #0, size 10: b'get-config'
    [DEBUG] in [[email protected]_command]: get-config
    [DEBUG] in [[email protected]_to_client]: message from client #0, size 4: b'exit'
    [DEBUG] in [[email protected]_to_client]: message from client #0, size 4: b'quit'
    [INFO] in [[email protected]]: closing connection to socket
    [DEBUG] in [[email protected]_to_client]: client 0 disconnect
    [INFO] in [[email protected]]: closing socket
    [INFO] in [[email protected]_loop]: sending exit signal to listener threads, they should exit within a few seconds...
    [DEBUG] in [[email protected]_config]: writing config
    

    Desktop (please complete the following information):

    • Distro: Arch
    • Python Version 3.10

    Additional information:

    Sometimes it just works, then it looks like (closed via Ctrl+C):

    [DEBUG] in [[email protected]_log]: started logger instance <Logger generic (DEBUG)> at thread 19188
    [DEBUG] in [[email protected]_sinks]: pmctl init sink GPU+AUX "2"
    
    [DEBUG] in [[email protected]_sources]: 
    [DEBUG] in [[email protected]_primarys]: 
    [DEBUG] in [[email protected]_clients]: new client 0
    [DEBUG] in [[email protected]_to_client]: message from client #0, size 10: b'get-config'
    [DEBUG] in [[email protected]_command]: get-config
    ^C[INFO] in [[email protected]_loop]: sending exit signal to listener threads, they should exit within a few seconds...
    [DEBUG] in [[email protected]_config]: writing config
    [INFO] in [[email protected]]: closing connection to socket
    [DEBUG] in [[email protected]_to_client]: message from client #0, size 4: b'quit'
    [DEBUG] in [[email protected]_to_client]: client 0 disconnect
    [INFO] in [[email protected]]: closing socket
    

    Especially after Pulsemeeter has been open for a while it seems to hang upon exit/quit.

    opened by heylix 1
  • Nightly

    Nightly

    Description

    • Complete overall of how the GUI works under the hood
    • Pipewire support
    • Dynamically create devices
    • Editing devices (Fix #61)

    Fixes # (issue) Fix #101 Fix #99 Fix #55 Fix #59

    Whats left to do

    • [ ] Rnnoise in hi settings
    • [ ] Eq in a and b settings
    • [ ] Latency in rnnoise and virtual devices settings

    Checklist :

    • [x] My code follows the style guidelines of this project
    • [ ] I have made corresponding changes to the documentation
    • [x] My changes generate no new warnings
    • [ ] Any dependent changes have been merged and published in downstream modules

    WARNING: OLD CONFIG FILES WILL BREAK IN THIS BUILD

    opened by theRealCarneiro 0
  • Unable to start pulsemeeter - JSON stray \ before #

    Unable to start pulsemeeter - JSON stray \ before #

    Describe the bug Pulsemeeter fails to start when exited once.

    To Reproduce Steps to reproduce the behavior: Start pulsemeeter - shows no applications at all, ever playback on firefox close pulsemeeter try to run it again Errors: ERROR: invalid json grep: warning: stray \ before # invalid json from server App sinks returned an error, audio backend probably crashed. Server will be closed.

    Expected behavior the thing to start up again and show me applications

    Screenshots

    image

    Desktop (please complete the following information): OS: Linux-5.15.76-1-MANJARO-x86_64-with-glibc2.36 Python version: 3.10.8 (main, Oct 13 2022, 21:13:48) [GCC 12.2.0]

    Additional context could be relevant to the "#" in json from pulseaudio issue? What is that "%" at the end of pmctl list sinks?

    opened by Corfiot 1
  • Mono input

    Mono input

    Hello,

    Voicemeeter has a feature to make a certain input (in my case, a microphone) mono. The problem I'm having is that my audio interface (Steinberg UR22Mk2) produces stereo input from a mono device, so the microphone outputs to only one channel.

    Alternative solutions are also welcome.

    opened by Shaddox 0
  • AttributeError: 'NoneType' object has no attribute 'connect'

    AttributeError: 'NoneType' object has no attribute 'connect'

    Describe the bug Pulsemeeter does not launch and instead brings up an error

    To Reproduce Steps to reproduce the behavior:

    1. Run Pulsemeeter command
    2. See the following error: [WARNING] in [vumeter_widget]: Could not start vumeter for Virtual_Input_3 Traceback (most recent call last): File "/usr/bin/pulsemeeter", line 8, in <module> sys.exit(main()) File "/usr/lib/python3.10/site-packages/pulsemeeter/__main__.py", line 554, in main start_app(isserver, trayonly) File "/usr/lib/python3.10/site-packages/pulsemeeter/__main__.py", line 483, in start_app MainWindow(isserver=isserver, trayonly=trayonly) File "/usr/lib/python3.10/site-packages/pulsemeeter/interface/main_window.py", line 50, in __init__ self.windowinstance = self.start_window(isserver) File "/usr/lib/python3.10/site-packages/pulsemeeter/interface/main_window.py", line 131, in start_window event_label.connect('button_press_event', self.port_select_popover, device_type, device_id) AttributeError: 'NoneType' object has no attribute 'connect'

    Expected behavior Pulsemeeter will open up with a GUI and not bring up an error

    Desktop (please complete the following information):

    • Distro: Arch Linux
    • Python 3.10.7

    Additional context I am on the nightly build because I am using pipewire. When I use stable, it brings me this error: invalid json from server App sinks returned an error, audio backend probably crashed. Server will be closed. Could not join subscribe_thread (maybe there is none) closing client handler threads... closing socket sending exit signal to listener thread, it should exit within 2 seconds... It used to work fine for about 30 seconds before I changed the settings layout to "tabbed" which froze at first, then crashed, and then wouldn't launch again. I deleted the config, reinstalled a bunch of times, and I am still met with this error. Any help would be greatly appreciated.

    bug 
    opened by auvio323 3
Releases(v1.2.14)
  • v1.2.14(Mar 15, 2022)

  • v1.2.13(Mar 13, 2022)

  • v1.2.12(Mar 12, 2022)

  • v1.2.11(Mar 11, 2022)

    Things that we improved/changed in the new update:

    • Socket (server and client)
      • This allows to open multiple ui's (clients) that sync between each other.
      • Also this opens up just starting the server and controlling pulsemeeter completely over the command line.
    • api support
    • complete command line
      • run pulsemeeter -h to see all commands
    • tray usage
    • fixing config issue
    • fixing ui not showing error message on rename

    Thanks to all the contributors in this version:

    • @theRealCarneiro
    • @Fl1tzi
    • @dacid44

    As always we tried our best to fix all bugs but if you find a new one, please open an issue. For any question you have just ask in our discord.

    Source code(tar.gz)
    Source code(zip)
  • v1.2.6(Nov 17, 2021)

    Fixes

    • Fixed crash when application widget updated too quickly
    • Fixed a ton of bugs that happened only on pipewire

    New

    • Volume meters
    • Application list
    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Oct 28, 2021)

Owner
Gabriel Carneiro
Computer Science student at UFSJ
Gabriel Carneiro
A parser of Windows Defender's DetectionHistory forensic artifact, containing substantial info about quarantined files and executables.

A parser of Windows Defender's DetectionHistory forensic artifact, containing substantial info about quarantined files and executables.

Jordan Klepser 101 Oct 30, 2022
An implementation of an interpreter for the Brainfuck esoteric language in Python

Brainfuck Interpreter in Python An implementation of an interpreter for the Brainfuck esoteric language in Python. 🧠 The Brainfuck Language Created i

Carlos Santos 0 Feb 01, 2022
contextlib2 is a backport of the standard library's contextlib module to earlier Python versions.

contextlib2 is a backport of the standard library's contextlib module to earlier Python versions. It also sometimes serves as a real world proving gro

Jazzband 35 Dec 23, 2022
Assembly example for CadQuery

Spindle and vacuum attachment This is a model of the vacuum attachment for my Workbee CNC router. There is a mist spray coming from the left hand side

Marcus Boyd 20 Sep 16, 2022
solsim is the Solana complex systems simulator. It simulates behavior of dynamical systems—DeFi protocols, DAO governance, cryptocurrencies, and more—built on the Solana blockchain

solsim is the Solana complex systems simulator. It simulates behavior of dynamical systems—DeFi protocols, DAO governance, cryptocurrencies, and more—built on the Solana blockchain

William Wolf 12 Jul 13, 2022
Script to automate the scanning of "old printed photos"

photoscanner Script to automate the scanning of "old printed photos" Just run: ./scan_photos.py The script is prepared to be run by fades. Otherw

Facundo Batista 2 Jan 21, 2022
This is a modified variation of abhiTronix's vidgear. In this variation, it is possible to write the output file anywhere regardless the permissions.

Info In order to download this package: Windows 10: Press Windows+S, Type PowerShell (cmd in older versions) and hit enter, Type pip install vidgear_n

Ege Akman 3 Jan 30, 2022
Archive, organize, and watch for changes to publicly available information.

0. Overview The Trapper Keeper is a collection of scripts that support archiving information from around the web to make it easier to study and use. I

Bill Fitzgerald 9 Oct 26, 2022
Vaksina - Vaksina COVID QR Validation Checker With Python

Vaksina COVID QR Validation Checker Vaksina is a general purpose library intende

Michael Casadevall 33 Aug 20, 2022
A very small (15 lines of code) and beautiful fetch script (exclusively for Arch Linux).

minifetch A very small (15 lines of code) and beautiful fetch script (exclusively for Arch Linux). There are many fetch scripts out there but I wanted

16 Jul 11, 2022
Aesthetic NFT Generator

A E S T H E T I C Dependencies Pillow numpy OpenCV You can use pip to install any missing dependencies. Basic Usage Vaporwave artwork can be generated

Mentor Elezi 4 Mar 13, 2022
Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.

This readme will introduce you to Carteblanche and walk you through an example app, please refer to carteblanche-django-starter for the full example p

Eric Neuman 42 May 28, 2021
Lectures for Udemy - Complete Python Bootcamp Course

Complete-Python-Bootcamp Welcome to the Repository for the Complete Python Bootcamp! This is the Repository for the Udemy course - "Complete Python Bo

Marci 2k Dec 28, 2022
How did Covid affect businesses?

NYC_Business_Analysis How did Covid affect businesses? COVID's effect on NYC businesses We all know that businesses in NYC have been affected by COVID

AK 1 Jan 15, 2022
Paxos in Python, tested with Jepsen

Python implementation of Multi-Paxos with a stable leader and reconfiguration, roughly following "Paxos Made Moderately Complex". Run python3 paxos/st

A. Jesse Jiryu Davis 25 Dec 15, 2022
Code needed for hybrid land cover change analysis for NASA IDS project

Documentation for the NASA IDS change analysis Poley 10/21/2021 Required python packages: whitebox numpy rasterio rasterio.mask os glob math itertools

Andrew Poley 2 Nov 12, 2021
EDF R&D implementation of ISO 15118-20 FDIS.

EDF R&D implementation of ISO 15118-20 FDIS ============ This project implements the ISO 15118-20 using Python. Supported features: DC Bidirectional P

30 Dec 29, 2022
A simple and usefull python calculator.

simplepy-calculator Your simple and fresh calculator. Getting Started Install python3 from the oficial python website or via terminal. Clone this repo

Felix Sanchez 1 Jan 18, 2022
Web app to find your chance of winning at Texas Hold 'Em

poker_mc Web app to find your chance of winning at Texas Hold 'Em A working version of this project is deployed at poker-mc.ue.r.appspot.com. It's run

Aadith Vittala 7 Sep 15, 2021
Load, explore and analyse data from Scotland and rest of the world related to Covid19.

Streamlit Examples This is my first attempt with Streamlit. It is an open-source framework, free, Python-based and easy to use tool to build and deplo

Eyad Elyan 12 Mar 01, 2021