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
Aerospace utilities: flight conditions package, standard atmosphere model, and more.

Aerospace Utilities About Module that contains commonly-used aerospace utilities for problem solving. Flight Condition: input altitude to compute comm

1 Jan 03, 2022
Movie recommend community

README 0. 초록 1) 목적 사용자의 Needs를 기반으로 영화를 추천해주는 커뮤니티 서비스 구현 2) p!ck 서비스란? "pick your taste!" 취향대로 영화 플레이리스트(이하 서비스 내에서의 명칭인 '바스켓'이라 함)를 만들고, 비슷한 취향을 가진

2 Dec 08, 2021
log4shell pwner for vulnerable minecraft servers

Log4-hell name supposed to be Log4$hell but oh well log4shell pwner for vulnerable minecraft servers install all reqs python + a minecraft client for

1 Jan 05, 2022
Information about a signed UEFI Shell that can be used when Secure Boot is enabled.

SignedUEFIShell During our research of the BootHole vulnerability last year, we tried to find as many signed bootloaders as we could. We searched all

Mickey 61 Jan 03, 2023
Taking the fight to the establishment.

Throwdown Taking the fight to the establishment. Wat? I wanted a simple markdown interpreter in python and/or javascript to output html for my website

Trevor van Hoof 1 Feb 01, 2022
Some shitty programs just to brush up on my understanding of binary conversions.

Binary Converters Some shitty programs just to brush up on my understanding of binary conversions. Supported conversions formats = "unsigned-binary" |

Tim 2 Jan 09, 2022
Extrator de dados do jupiterweb

Extrator de dados do jupiterweb O programa é composto de dois arquivos: Um constando apenas de classes complementares que representam as unidades e as

Bruno Aricó 2 Nov 28, 2022
Python implementation of the ASFLIP advection method

This is a python implementation of the ASFLIP advection method . We would like to hear from you if you appreciate this work.

Raymond Yun Fei 133 Nov 13, 2022
Python project that aims to discover CDP neighbors and map their Layer-2 topology within a shareable medium like Visio or Draw.io.

Python project that aims to discover CDP neighbors and map their Layer-2 topology within a shareable medium like Visio or Draw.io.

3 Feb 11, 2022
Scraper pour les offres de stage Tesla et les notes sur Oasis (Polytech Paris-Saclay) sous forme de bot Discord

Scraper pour les offres de stage Tesla et les notes sur Oasis (Polytech Paris-Saclay) sous forme de bot Discord

Alexandre Malfreyt 1 Jan 21, 2022
Projects using the Tkinter module in Python!

Tkinter projects This repository includes some Tkinter projects made by me. All of these are simple to understand. I create apps with good functionali

Amey 0 Sep 24, 2021
Este projeto se trata de uma análise de campanhas de marketing de uma empresa que vende acessórios para veículos.

Marketing Campaigns Este projeto se trata de uma análise de campanhas de marketing de uma empresa que vende acessórios para veículos. 1. Problema A em

Bibiana Prevedello 1 Jan 12, 2022
Code for Crowd counting via unsupervised cross-domain feature adaptation.

CDFA-pytorch Code for Unsupervised crowd counting via cross-domain feature adaptation. Pre-trained models Google Drive Baidu Cloud : t4qc Environment

Guanchen Ding 6 Dec 11, 2022
Convert three types of color in your clipboard and paste it to the color property (gamma correct)

ColorPaster [Blender Addon] Convert three types of color in your clipboard and paste it to the color property (gamma correct) How to Use Hover your mo

13 Oct 31, 2022
The Python agent for Apache SkyWalking

SkyWalking Python Agent SkyWalking-Python: The Python Agent for Apache SkyWalking, which provides the native tracing abilities for Python project. Sky

The Apache Software Foundation 149 Dec 12, 2022
This repository contains Python games that I've worked on. You'll learn how to create python games with AI. I try to focus on creating board games without GUI in Jupyter-notebook.

92_Python_Games 🎮 Introduction 👋 This repository contains Python games that I've worked on. You'll learn how to create python games with AI. I try t

Milaan Parmar / Милан пармар / _米兰 帕尔马 166 Jan 01, 2023
a url shortener with fastapi and tortoise-orm

fastapi-tortoise-orm-url-shortener a url shortener with fastapi and tortoise-orm

19 Aug 12, 2022
System Information Utility With Python

System-Information-Utility This is a simple utility, for the terminal, which allows you to find out information about your PC. It's very easy to run t

2 Apr 15, 2022
Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets.

Adansons Base is a data management tool that organizes metadata of unstructured data and creates and organizes datasets. It makes dataset creation more effective and helps find essential insights fro

Adansons Inc 27 Oct 22, 2022
Self sustained producer-consumer(prosumer) policy study using Python and Gurobi

Prosumer Policy This project aims to model the optimum dispatch behaviour of households with PV and battery systems under different policy instrument

Tom Xu 3 Aug 31, 2022