Skip to content

Rahix/pavu-mixer

Repository files navigation

Pavu Mixer

Pavu Mixer is a hardware mixing desk for controlling PulseAudio streams on a connected computer. Think of it as a hardware version of pavucontrol.

Pavu Mixer in Action

More pictures in Eyecandy/.

Hardware

The Pavu Mixer is currently just a PCB fitted as the front plate of a console enclosure. This remedies the need for a custom front plate. Beneath it, an STM32F3DISCOVERY eval board is used as the controller. Connection to the computer is done over USB.

Following are the capabilities of the current hardware:

  • 4 "Application Channels" + 1 "Main" Channel
  • 240x240 LCD Display (driver available in waveshare-display/ subdirectory)
  • Per channel:
    • Mono Volume Fader
    • Mute Button with green/red indicator LED
    • LED as brightness-based level indicator
    • Red LED as status indicator
  • For the main channel, the level indicator is a 20 segment LED-bargraph instead.
  • USB-B socket for connection to the computer

Firmware/Software

The firmware on the STM32F3DISCOVERY board exposes all of the "UI" (faders, buttons, indicators, display) to the host via a custom USB class. Messages are serialized using postcard.

On the host, a daemon is running which communicates to the hardware and keeps track of PulseAudio state. It has a configuration file for selecting which channel controls which applications. Streams are then attached to the mixer channels automatically when they appear.

The firmware and host-side software are still in development - these features are subject to change.

  • New application streams are attached to channels based on a configurable property-matching table. All streams connected to a channel will be forced to the volume reported by the fader.
  • Main channel controls the currently selected default sink.
  • Whenever a channel has an active stream, its reported icon will be displayed on the LCD. For streams which do not properly report an icon, a second matching table can be used to select custom icons.

Alternative Hardware

Right now, only the Pavu Mixer hardware is supported. As this board is not commercially available, but a hardware mixer for PulseAudio could be interesting for other people as well, I am open to extend the host-daemon to support other boards as well. For example, there are a lot of MIDI-based digital audio mixers which would be a good candidate for support. Please open an issue on GitHub or contact me directly if interested.

Project Structure

Path Contents
Eyecandy/ Pictures and "rendered" schematic (Pavu-Mixer-Schematic.pdf).
Hardware/ KiCAD project for the interface board & other hardware related files.
hardware-tests/ Test-firmware for demonstrating functionality of all parts of the hardware.
common/ Definitions shared between firmware and host-software (for postcard serdes).
firmware/ Firmware for the STM32F3DISCOVERY board.
host-daemon/ Host-side daemon for mixer communication and PulseAudio interaction.
waveshare-display/ Driver for the LCD screen (see its README for details).

License

It is a difficult story... Individual parts of this project are licensed under different terms:

  • All files in the Hardware/ directory (exception below) are licensed under the CERN-OHL-W.
  • Files in Hardware/3D are licensed under MIT.
  • The display driver in waveshare-display/ is dual licensed under Apache 2/MIT as detailed in its own README.
  • The remaining files of this project (including common/, firmware/, hardware-tests/, and host-daemon/) are licensed under the GPL v3.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.