USB audio class driver in userspace using libusb.
LGPL-2.1 License
libmaru is a library that can take control of a USB audio device, and use it directly as an audio playback device. The implementation resides entirely in userspace, and uses libusb 1.0 to communicate with the device.
MARUSS is a project that implements a USB sound card on an Altera DE2 development board. It features hardware mixing and resampling.
The public project report is found here. The appendices for the report as well as source code for MARUSS can be found here.
libmaru is licensed under LGPLv2.1+ (same as libusb).
To build libmaru, you need to satisfy these dependencies:
After dependencies have been satisfied, it should be sufficient to build and install with: make make install PREFIX=$PREFIX
The public libmaru API is documented with doxygen. To build documentation, doxygen must be installed. Build documentation using: doxygen Doxyfile
Documentation will be installed to doc/.
To communicate with the USB subsystem, write access to USB nodes in usbfs is required. It might be necessary to grant write permissions to /dev/bus/usb for the processes that use libmaru.
cuse-maru is a project that implements a subset of Open Sound System in userspace using CUSE. It uses libmaru to pass audio to the USB audio card. It supports multiple hardware streams if the audio device does.
cuse-maru is licensed under GPLv3+.
cd cuse-maru make make install PREFIX=$PREFIX
To run cuse-maru, cuse module must be loaded. /dev/cuse must also be writable by cuse-maru process. This can be set up with an udev rule, such as:
KERNEL=="cuse", MODE="0660", GROUP="audio"
By default, cuse-maru will create the OSS device in /dev/maru. To automatically set permissions to this device, a similar rule can be created as such:
KERNEL=="maru", MODE="0660", GROUP="audio"
To add an automatic symlink to the device, i.e. /dev/dsp, it can be done as such: KERNEL=="maru", MODE="0660", SYMLINK+="dsp", GROUP="audio"
cuse-maru is a direct hardware bridge, and does not perform sample rate conversion, channel up/down-sampling or sample format conversions. If this is needed, an external sound server is recommended.
If only simple sample rate conversion is needed, cuse-mix can be used.
cuse-mix is a CUSE OSS device that performs sample rate conversions, mixes streams, and passes them along to a different OSS device (i.e. a device governed by cuse-maru). If USB card doesn't support resampling and mixing, cuse-mix can be a viable alternative.
cd cuse-maru/mix make make install PREFIX=$PREFIX
Similar to cuse-maru. If cuse-mix is being used as the primary audio device, it might be an idea to symlink this to /dev/dsp rather than cuse-maru. By default, cuse-mix will create a device in /dev/marumix.