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
The presented desktop application was made to solve 1d schrodinger eqation

schrodinger_equation_1d_solver The presented desktop application was made to solve 1d schrodinger eqation. It implements Numerov's algorithm (step by

Artem Kashapov 2 Dec 29, 2021
A password genarator/manager for passwords uesing a pseudorandom number genarator

pseudorandom-password-genarator a password genarator/manager for passwords uesing a pseudorandom number genarator when you give the program a word eg

1 Nov 18, 2021
A middle-to-high level algorithm book designed with coding interview at heart!

Hands-on Algorithmic Problem Solving A one-stop coding interview prep book! About this book In short, this is a middle-to-high level algorithm book de

Li Yin 1.8k Jan 02, 2023
Simple Python Gemini browser with nice formatting

gg I wasn't satisfied with any of the other available Gemini clients, so I wrote my own. Requires Python 3.9 (maybe older, I haven't checked) and opti

Sarah Taube 2 Nov 21, 2021
This is a vscode extension with a Virtual Assistant that you can play with when you are bored or you need help..

VS Code Virtual Assistant This is a vscode extension with a Virtual Assistant that you can play with when you are bored or you need help. Its currentl

Soham Ghugare 6 Aug 22, 2021
A faster copy of nell's comet nuker

Astro a faster copy of nell's comet nuker also nell uses external libraries like it's cocaine man never learned to use ansi color codes (ily nell) (On

horrid 8 Aug 15, 2022
Morth - Stack Based Programming Language

Morth WARNING! THIS LANGUAGE IS A WORKING PROGRESS. THIS IS JUST A HOBBY PROJECT

Dominik Danner 2 Mar 05, 2022
Repository voor verhalen over de woningbouw-opgave in Nederland

Analyse plancapaciteit woningen In deze notebook zetten we cijfers op een rij om de woningbouwplannen van Nederlandse gemeenten in kaart te kunnen bre

Follow the Money 10 Jun 30, 2022
A student information management system in Python

Student-information-management-system 本项目是一个学生信息管理系统,这个项目是用Python语言实现的,也实现了图形化界面的显示,同时也实现了管理员端,学生端两个登陆入口,同时底层使用的是Redis做的数据持久化。 This project is a stude

liuyunfei 7 Nov 15, 2022
Structured, dependable legos for Starknet development.

cairomate • Structured, dependable legos for starknet development. Directory Structure contracts ├─ defi │ ├─ ChainlinkPriceOracle — "Simple price or

andreas 127 Nov 23, 2022
Cross-platform MachO/ObjC Static binary analysis tool & library. class-dump + otool + lipo + more

ktool Static Mach-O binary metadata analysis tool / information dumper pip3 install k2l Development is currently taking place on the @python3.10 branc

Kritanta 301 Dec 28, 2022
Library for RadiaCode-101

RadiaCode Библиотека для работы с дозиметром RadiaCode-101, находится в разработке - API не стабилен и возможны изменения. Пример использования (backe

Maxim Andreev 56 Nov 29, 2022
Cvdl-hw2 - Find Contour, Camera Calibration, Augmented Reality and Stereo Disparity Map

opevcvdl-hw2 This project uses openCV and Qt to achieve the requirements. Version Python 3.7 opencv-contrib-python 3.4.2.17 Matplotlib 3.1.1 pyqt5 5.1

Kenny Cheng 3 Aug 17, 2022
Python project setup, updater, and launcher

Launcher Python project setup, updater, and launcher Purpose: Increase project productivity and provide features easily. Once installed as a git submo

DAAV, LLC 1 Jan 07, 2022
Installer, package manager, build wrapper and version manager for Piccolo

Piccl Installer, package manager, build wrapper and version manager for Piccolo

1 Dec 19, 2021
A PDM plugin to publish to PyPI

PDM Publish A PDM plugin to publish to PyPI NOTE: Consider if you need this over using twine directly Installation If you installed pdm via pipx: pipx

Branch Vincent 20 Aug 06, 2022
Artificial intelligence based on 5-dimensional quantum selection

Deep Thought An artificial intelligence based on 5-dimensional quantum selection. Algorithm The payload Make an random bit array (e.g. 1101...) Conver

Larry Holst 3 Dec 14, 2022
Get a list of the top-10 rejected libraries in your WhiteSource inventory

WhiteSource Top 10 Rejected Libraries Generate a spreadsheet listing the 10 most common libraries in your WhiteSource inventory that were rejected by

WhiteSource-PS-tools 10 Mar 23, 2022
A Python Based Utility for Processing GST-Return JSON Files to Multiple Formats

GSTR 1/2A Utility by Shan.tk Open Source GSTR 1/GSTR 2A JSON to Excel utility based on Python. Useful for Auditors in Verifying GSTR 1 Return Invoices

Sudharshan TK 1 Oct 08, 2022
Button paginator using discord_components

Button Paginator With discord-components Button paginator using discord_components Welcome! It's a paginator for discord-componets! Thanks to the orig

Decave 7 Feb 12, 2022