Play audio through your microphone in games using hotkeys
Project description
MUC Soundboard ๐ต๐ฎ
Play audio files through your microphone in multiplayer games like CS, Battlefield, and COD using hotkeys. Built with Python and Rich for a beautiful CLI experience!
โจ Features
- ๐ต Play audio through your mic - Route sound to your virtual microphone
- โจ๏ธ Custom hotkeys - Bind any key combination to any sound (F1-F12, Ctrl+, Alt+, etc.)
- ๐ท๏ธ Tags & categories - Organize sounds with tags and filter by category
- โญ Favorites - Mark and quickly access your most-used sounds
- ๐ Per-sound volume - Set individual volume levels (0-200%) for each sound
- ๐ Queue & playlists - Build queues and save them as reusable playlists
- ๐จ Beautiful CLI - Rich-click powered interface with colors and tables
- ๐๏ธ Multiple formats - Supports WAV, MP3, OGG, FLAC, M4A
- ๐ Auto-detection - Finds VB-Cable and virtual audio devices automatically
- ๐ Organized library - Subdirectory support for sound organization
- ๐ Global volume - Adjustable playback volume with persistent settings
- ๐ฒ Auto-play mode - Play all sounds randomly or sequentially
- โ๏ธ Persistent config - Saves your settings to
~/.muc/config.json - ๐ฎ Gaming ready - Perfect for CS, Battlefield, COD, and more!
๐ Prerequisites
1. Python Environment
- Python 3.13 or higher
- uv or pip for package management
2. Virtual Audio Cable
CRITICAL: You need a virtual audio device to route audio to your microphone.
Recommended: VB-Cable (Free)
- Download from: https://vb-audio.com/Cable/
- Install the driver with admin privilege
- Restart your computer (required!)
- This creates:
CABLE Input- Where your soundboard outputs audioCABLE Output- What your game reads as a microphone
NOTE: This will switch your default audio and microphone devices to VB-Cable. Revert them back to your real devices.
๐ Installation
Quick Start
-
Install via uv or pip:
uv add muc # optional: with yt-dlp for downloading audio uv add muc[yt-dlp]
-
Add your audio files:
- Place audio files (MP3, WAV, OGG, FLAC, M4A) in the
sounds/directory - Organize in subdirectories if desired
- The app automatically scans and loads all audio files
- Place audio files (MP3, WAV, OGG, FLAC, M4A) in the
โ๏ธ Setup
Step 1: Configure VB-Cable
In Windows Sound Settings:
- Right-click speaker icon in taskbar โ Sound settings
- Under Input, select your real microphone (HyperX, Blue Yeti, etc.)
- This is for your actual voice
In Your Game Settings:
- Open game audio/voice settings
- Set Input Device to:
CABLE Output (VB-Audio Virtual Cable) - Your teammates will now hear audio from the soundboard + your voice (if using software mixing)
Step 2: Run Setup Wizard
muc setup
The setup wizard will:
- ๐ List all available audio devices in a beautiful table
- ๐ Auto-detect VB-Cable or similar virtual devices
- โ Let you confirm or manually select the output device
- ๐พ Save your configuration to
~/.muc/config.json
IMPORTANT: Select CABLE Input as the output device, not CABLE Output.
CABLE Input โ Soundboard outputs HERE
โ
CABLE Output โ Game reads FROM here
๐ฎ Usage
CLI Commands
MUC provides a modern CLI with multiple commands:
# Setup and configuration
muc setup # Run setup wizard
muc devices # List all audio devices
# Sound management
muc sounds # List available sounds in your library
muc sounds --tag meme # Filter by tag
muc sounds --favorites # Show only favorites
muc play [name] # Play a specific sound (prompts if no name)
muc stop # Stop currently playing sound
muc auto # Play all sounds randomly (use --sequential for alphabetical order)
muc info [name] # Show detailed info about a sound
# Tags & organization
muc tag airhorn meme loud # Add tags to a sound
muc untag airhorn loud # Remove tags from a sound
muc tags # List all tags with counts
# Favorites
muc favorite airhorn # Toggle favorite status
muc favorite airhorn --on # Add to favorites
muc favorites # List all favorites
# Volume control
muc volume # Show current global volume
muc volume 0.5 # Set global volume to 50% (0.0 to 1.0)
muc sound-volume airhorn 1.5 # Set per-sound volume to 150% (0.0 to 2.0)
# Custom hotkeys
muc bind f1 airhorn # Bind F1 to play airhorn
muc bind "<ctrl>+a" applause # Bind Ctrl+A to applause
muc unbind f1 # Remove hotkey binding
muc unbind airhorn # Remove all bindings for a sound
muc hotkeys # Show all hotkey bindings
muc hotkeys-reset # Reset to default F1-F10 bindings
muc listen # Start hotkey listener (press ESC to stop)
# Queue management
muc queue add airhorn explosion # Add sounds to queue
muc queue show # Show current queue
muc queue play # Play queue sequentially
muc queue skip # Skip to next sound
muc queue shuffle # Shuffle the queue
muc queue clear # Clear the queue
# Playlists
muc playlist save mylist # Save current queue as playlist
muc playlist load mylist # Load playlist into queue
muc playlist list # List all saved playlists
muc playlist show mylist # Show playlist contents
muc playlist delete mylist # Delete a playlist
# Interactive mode
muc interactive # Launch full interactive menu
# Help
muc --help # Show all commands
Quick Workflow
-
First time setup:
muc setup -
Check your sounds:
muc sounds -
Test a sound:
muc play rickroll
-
Start gaming with hotkeys:
muc listen- Press F1-F10 to play sounds
- Press ESC to stop
Hotkey Bindings
By default, the first 10 sounds (alphabetically) are mapped to F1-F10.
Custom hotkeys let you bind any key combination:
muc bind f1 airhorn # Simple key
muc bind "<ctrl>+<shift>+a" boom # Modifier keys
muc bind "<alt>+1" explosion # Alt + number
Hotkey modes (set in config):
default- Only use auto-assigned F1-F10custom- Only use your custom bindingsmerged- Use both (default)
View bindings:
muc hotkeys
Reset to defaults:
muc hotkeys-reset
Interactive Menu Mode
For a full-featured text menu:
muc interactive
Menu options:
- List all sounds
- Play sound by name
- View hotkey bindings
- Start hotkey listener
- Stop current sound
- List audio devices
- Change output device
- Adjust volume
- Auto-play all sounds
- Exit
๐ต Audio File Management
Supported Formats
- WAV - Best quality, larger files
- MP3 - Good quality, smaller files
- OGG - Good quality, open format
- FLAC - Lossless quality, large files
- M4A - Apple format
Directory Organization
sounds/
โโโ music/
โ โโโ song1.mp3
โ โโโ song2.mp3
โโโ effects/
โ โโโ airhorn.wav
โ โโโ explosion.wav
โโโ memes/
โ โโโ rickroll.mp3
โโโ random_sound.mp3
The app recursively scans all subdirectories.
Recommendations
- Sample Rate: 48000 Hz
- Bit Depth: 16-bit (WAV)
- Bitrate: 192-320 kbps (MP3)
- Length: Under 30 seconds for best performance
- Volume: Normalize audio to -3dB to prevent clipping
- Naming: Use descriptive names without special characters
Getting Audio Files
# Download from YouTube (uses yt-dlp if installed)
yt-dlp -x --audio-format wav "https://youtube.com/watch?v=..."
# The file will be saved in your current directory
# Then move it to sounds/
๐ง Configuration
Configuration is automatically saved to ~/.muc/config.json:
{
"output_device_id": 6,
"sounds_dir": "C:/path/to/muc/sounds",
"volume": 1.0,
"hotkeys": {
"<f1>": "airhorn",
"<ctrl>+<shift>+a": "applause"
},
"hotkey_mode": "merged"
}
Additional data files:
~/.muc/metadata.json- Sound tags, favorites, volumes, play counts~/.muc/playlists.json- Saved playlists
You can manually edit these files or use CLI commands:
muc setup
๐ฏ Gaming Tips
-
Test First: Always test sounds before joining a match
muc play test-sound
-
Volume Control:
- Use
muc volume 0.5to set soundboard volume to 50% - Use audio editing software to normalize clips
- Set in-game voice volume appropriately
- Use
-
Quick Access:
- Keep a terminal with
muc listenrunning - Alt-tab is instant with hotkeys
- Or use a second monitor
- Keep a terminal with
-
Push-to-Talk:
- If your game uses PTT, you'll need to hold it while playing sounds
- Or configure the game to use voice activation
-
Be Respectful:
- Don't spam sounds excessively
- Use appropriate audio in competitive matches
- Some communities have rules about soundboards
๐ Troubleshooting
"No virtual audio cable detected"
Solution: Install VB-Cable and restart your computer
muc setup # Run again after restart
"Teammates can't hear the audio"
Check:
- Game microphone set to
CABLE Outputโ - Soundboard output set to
CABLE Inputโ - Test with:
muc play test-sound
Fix:
muc devices # Verify device IDs
muc setup # Reconfigure if needed
"Audio plays on my speakers, not through mic"
Problem: Wrong output device selected
Solution:
muc devices # Find CABLE Input ID
muc setup # Select correct device
Remember: CABLE Input (not Output) for soundboard output!
"Hotkeys don't work"
Causes:
- Windows blocking global hotkeys
- Another app using same keys
- Listener not started
Solutions:
# Run as administrator (Windows)
# Or try interactive mode
muc interactive # Then select option 4
"Audio quality is poor"
Improve quality:
- Use WAV or high-bitrate MP3 files
- Match sample rate to your device (usually 48000 Hz)
- Normalize audio levels
- Check VB-Cable settings in Windows Sound Control Panel
"Configuration not saving"
Check: Permissions for ~/.muc/ directory
# Windows - check directory
ls ~\.muc
# If missing, create manually
mkdir ~\.muc
๐๏ธ Architecture
This project implements a clean software architecture:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CLI Layer โ
โ Rich-click commands (cli.py) โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโผโโโโโโโโ โโโโโโโผโโโโโโ โโโโโโโโโผโโโโโโโโ
โ Config โ โ Metadata โ โ Queue Manager โ
โ (settings) โ โ(tags,favs)โ โ (playlists) โ
โโโโโโโโโฌโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโโโโฌโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Soundboard โ
โ (sound library, hotkey manager, playback) โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Audio Manager โ
โ (devices, volume, playback) โ
โโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Virtual Audio Device โ
โ (VB-Cable, etc.) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Flow:
- User runs command โ CLI parses โ Config loads settings
- Soundboard scans sounds โ Loads metadata (tags, volumes)
- HotkeyManager sets up bindings (default + custom)
- User presses hotkey โ Handler triggered โ Metadata volume applied
- Audio Manager loads file โ Outputs to virtual device
- Game reads from virtual device โ Teammates hear sound
๐ Project Structure
muc/
โโโ src/
โ โโโ __init__.py # Package initialization
โ โโโ cli.py # Rich-click CLI commands
โ โโโ config.py # Configuration management
โ โโโ audio_manager.py # Audio device & playback
โ โโโ soundboard.py # Sound library & hotkeys
โ โโโ metadata.py # Tags, favorites, per-sound volume
โ โโโ hotkey_manager.py # Custom hotkey bindings
โ โโโ queue_manager.py # Queue & playlist management
โ โโโ validators.py # Input validation
โ โโโ exceptions.py # Custom exceptions
โ โโโ logging_config.py # Logging setup
โโโ sounds/ # Audio files directory
โ โโโ README.md # Sound library guide
โโโ tests/ # Unit & integration tests
โโโ pyproject.toml # Project metadata & dependencies
โโโ README.md # This file
โโโ Makefile # Development commands
๐ค Contributing
This is a personal project, but contributions are welcome!
Ways to contribute:
- ๐ Report bugs or issues
- ๐ก Suggest new features
- ๐ต Share cool sound packs
- ๐ Improve documentation
- ๐ง Submit pull requests
โ๏ธ Legal & Ethics
Usage Guidelines:
- โ Personal use and education
- โ Private games with friends
- โ Harassment or abuse
- โ Circumventing game rules
- โ Competitive advantage in ranked games
Copyright:
- Ensure you have rights to audio files
- Respect copyright and fair use
- Don't distribute copyrighted content
Game ToS:
- Check your game's terms of service
- Some games prohibit audio injection
- Use responsibly to avoid bans
๐ License
This project is provided as-is for personal and educational use only. See LICENSE for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file muc-0.3.0.tar.gz.
File metadata
- Download URL: muc-0.3.0.tar.gz
- Upload date:
- Size: 83.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5ae8f5460b409f631ec58d6771a364997b2ac2f4d1114a9de1fbefffa191ee2
|
|
| MD5 |
d724671308a9b7686e1c75f1e51b7f77
|
|
| BLAKE2b-256 |
56645079ede240b29e66d2d63dca743e4d27251fe4083b5c39ae1bf5b9b4fbf1
|
Provenance
The following attestation bundles were made for muc-0.3.0.tar.gz:
Publisher:
python-publish.yml on Harshal6927/muc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
muc-0.3.0.tar.gz -
Subject digest:
c5ae8f5460b409f631ec58d6771a364997b2ac2f4d1114a9de1fbefffa191ee2 - Sigstore transparency entry: 729709677
- Sigstore integration time:
-
Permalink:
Harshal6927/muc@c49228d976679ebb2ff15cf842360262afa14a05 -
Branch / Tag:
refs/tags/0.3.0 - Owner: https://github.com/Harshal6927
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c49228d976679ebb2ff15cf842360262afa14a05 -
Trigger Event:
release
-
Statement type:
File details
Details for the file muc-0.3.0-py3-none-any.whl.
File metadata
- Download URL: muc-0.3.0-py3-none-any.whl
- Upload date:
- Size: 39.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6820afce0fc9ebf86a41febef4769c72f2e4c17ba281175595c5aee90fa006c4
|
|
| MD5 |
0d888fd0353be6cf1c685b96b664b78f
|
|
| BLAKE2b-256 |
19658494a91f5bbcf1fb784b9cba1dce176acd571b04a1c74e76ce8e43d7ee5c
|
Provenance
The following attestation bundles were made for muc-0.3.0-py3-none-any.whl:
Publisher:
python-publish.yml on Harshal6927/muc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
muc-0.3.0-py3-none-any.whl -
Subject digest:
6820afce0fc9ebf86a41febef4769c72f2e4c17ba281175595c5aee90fa006c4 - Sigstore transparency entry: 729709680
- Sigstore integration time:
-
Permalink:
Harshal6927/muc@c49228d976679ebb2ff15cf842360262afa14a05 -
Branch / Tag:
refs/tags/0.3.0 - Owner: https://github.com/Harshal6927
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@c49228d976679ebb2ff15cf842360262afa14a05 -
Trigger Event:
release
-
Statement type: