(because it sounds mildly funny)
A native Linux GUI application to control the Creative Sound BlasterX G6 USB DAC/Amp, with full AutoEq integration.
The Software can now read out the State of the Device, instead of having to track it internally.
Note that the G6 has two internal settings profiles, one for Headphones and one for Speakers. The App will auto-refresh its state from device on Output switching.
Do note tho: Profile Loading is currently still a little buggy when a Slider was saved with a non-zero Value and its corresponding Toggle turned off.
- State Reading
- Profiles
- Saving & Loading (mostly working)
- Profile Save Location
- SBX
- Surround Sound
- Dialog+
- Smart Volume
- Crystalizer
- Bass
- Equalizer
- PreAmp
- 10-band EQ
- Playback
- Output Toggle
- Scout Mode
- SBX
- Smart Volume Sub-Features
- Night Mode & Loud Mode
- Equalizer Sub-Features
- SBC Eq Presets
- Smart Volume Sub-Features
- Playback
- Direct Mode (not planned)
- Filter
- Audio Quality
- Recording
- Everything
- Decoder
- "Normal", "Full", and "Night" Selection
- Mixer
- Output
- Speakers
- Monitoring
- Everything
- Recording
- Everything
- Output
- Lighting
- Everything
Presets are stored as JSON files in ~/.local/share/linuxblaster/presets/. Presets from before v2.1 will have to be remade, the old format is no longer compatible.
Important
The preset format is custom to this application and is not compatible with official Creative Sound Blaster Command profiles (.json or .xml) from Windows.
- Linux (tested on x86_64)
- Sound Blaster X G6 connected via USB
- udev rules for HID access (see below)
To access the device without root privileges, create a udev rule:
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="041e", ATTRS{idProduct}=="3256", MODE="0666"You may need to unplug and replug the device after adding the rule.
Add to your NixOS configuration:
{ inputs.linuxblaster_control.url = "github:RizeCrime/linuxblaster_control"; outputs = { self, nixpkgs, linuxblaster_control, ... }: { nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem { modules = [ linuxblaster_control.nixosModules.default { hardware.soundblaster-g6.enable = true; } ]; }; }; }or
# Run without installing nix run github:RizeCrime/linuxblaster_control # Install to user profile nix profile install github:RizeCrime/linuxblaster_control # Build locally git clone https://github.com/RizeCrime/linuxblaster_control.git cd linuxblaster_control nix build# Clone the repository git clone https://github.com/RizeCrime/linuxblaster_control.git cd linuxblaster_control # Build release binary cargo build --release # Run ./target/release/linuxblaster_controlYou will need the following packages at a minimum:
- hidapi
- libusb1 (libusb1-devel)
- udev
A flake.nix is provided for Nix users who want to develop:
nix develop # Enter development shell with all dependencies cargo build --releaseSimply run the application while the Sound Blaster X G6 is connected:
./linuxblaster_commandIf the device is not detected, the application won't start. In that case, Launch it from a cli and check the logs (if I configured them correctly, which I'm not too sure about).
This project is in active development and should be considered experimental.
- Limited testing — Tested only on the developer's hardware.
- The USB protocol was reverse-engineered and may not cover all device features.
- Some features available in the Windows Sound Blaster Command software are not yet implemented.
- Vendor ID:
0x041e(Creative Technology) - Product ID:
0x3256(Sound Blaster X G6) - Interface: 4 (HID control interface)
Communication uses 65-byte HID reports with a custom protocol consisting of DATA and COMMIT packets.
Find the details in UsbProtocol.
Contributions are welcome! If you have a Sound Blaster X G6 and want to help:
- Report bugs or missing features
- Help reverse-engineer additional functionality
This project builds upon the USB protocol research from the soundblaster-x-g6-cli project by Nils Skowasch, which provided initial USB packet captures and protocol documentation. Additional reverse engineering (including the 10-band EQ protocol) was done for this project.
The initial versions of this project were based on the soundblaster-x-g6-cli project. However, it turns out that this work was misleadingly incomplete. What was thought to be a Commit Push from the Host was actually the Device reporting back a queried value, just as an example. I have done a bunch of extra reverse engineering to figure out the actual full protocol (see the sniffer directory), at least I think that I've got the full picture this time; but that's also what I thought before, so who knows /shrug.
With v2 I can proudly say that almost all Code was written by me (In v1 the GUI was written by AI (and you could tell)), and AI only filled out match arms and enums for me. I also use AI liberally to beautify anything user-facing (including this README and most other .md files).
Oh and the math for the EQ curve visualizer was also done by AI.
MIT License — see LICENSE for details.
