Skip to content

cskau/lil-t

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lil-t

The following is an experiment in setting a Raspberry Pi (Zero) up as a soft-synth device, hosting LV2 plug-ins.

All examples below will assume Raspbian.

Examine the system

List ALSA playback interfaces:

$ aplay -L

List ALSA capture interfaces:

$ arecord -l

Test audio output by playing a sine wave:

$ speaker-test -t sine -c 2

Or test how much noise you have as a baseline by "playing" an all low signal:

$ aplay -t raw -r 48000 -c 2 -f S16_LE /dev/zero

System setup

If you're using a Raspberry Pi Zero, you can configure overlay to pipe PWM to BCM pins 13 and 18, and remove hissing background noise by disabling dithering.

Add to /boot/config.txt:

dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4
disable_audio_dither=1

Note: You'll also need to filter the raw output if you're using the pins directly. I use a simple 2 resistor, 2 capacitor filter. Alternatively you can look into I2S audio.

Supposedly disabling CPU scaling can also help remove audio glitches:

echo -n performance | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

While you're at it you might want to stop or disable several system services you'll probably not need under normal operation:

sudo systemctl disable triggerhappy # raspbian hotkey service
sudo systemctl disable rsyslog
sudo systemctl disable ntp
sudo systemctl disable ssh
sudo systemctl disable avahi-daemon # zero-configuration networking

Packages to $ sudo apt-get install:

git
python-pip
autoconf
autogen
automake
jackd2
dbus-x11
a2jmidid
python-dev
python-tk
python-numpy
libreadline-dev
libportmidi0
libportmidi-dev
libffi-dev
libasound2-dev
libjack-jackd2-dev
lv2-dev

You will also need at least one of the below to compile jalv:

libgtk2.0-dev
libgtk-3-dev
libqt4-dev

Python modules to $ sudo pip install:

JACK-Client
python-rtmidi
mido

Bring in some packages not in the default repo, build and install:

$ mkdir src  &&  cd src/

lilv, LV2, etc:

$ cd ~/src/
$ git clone http://git.drobilla.net/drobillad.git
$ cd drobillad
$ git submodule init  &&  git submodule update  &&  git pull
$ ./waf configure --bindings  &&  ./waf  &&  sudo ./waf install

mod-host LV2 host:

$ cd ~/src/
$ git clone https://github.com/moddevices/mod-host.git
$ cd mod-host
$ make  &&  sudo make install

qin LV2 plug-in:

$ cd ~/src/
$ git clone https://github.com/magnusjonsson/qin.git
$ cd qin
$ make ; sudo make install

Post-setup testing

Check if JACK will run and can claim the interface:

$ dbus-launch jackd -dalsa -Phw:ALSA,0 -Xseq

Ctrl-C to kill the process if it successfully starts and runs.

Install services

Add some system services to auto-start JACK, mod-host, etc. at boot so everything runs without user interaction.

Copy *.service files into /etc/systemd/system/:

$ sudo cp ./services/*.services /etc/systemd/system/

Test the newly added services:

$ sudo systemctl start jackd.service
$ sudo systemctl start mod-host.service
$ sudo systemctl start a2jmidid.service
$ sudo systemctl start demo.service
$ sudo systemctl status jackd.service
$ sudo systemctl status mod-host.service
$ sudo systemctl status a2jmidid.service
$ sudo systemctl status demo.service

Enable the service:

$ sudo systemctl enable jackd.service
$ sudo systemctl enable mod-host.service
$ sudo systemctl enable a2jmidid.service
$ sudo systemctl enable demo.service

Test system

Manually tell mod-host to load Qin:

$ echo -n 'add http://magnus.smartelectronix.com/lv2/synth/qin 0' | nc -w1 localhost 5555
$ nc -w1 localhost 5556

Print all JACK ports and their connections:

$ sudo jack_lsp -c

Connect some JACK ports:

$ sudo jack_connect effect_0:output system:playback_1
$ sudo jack_connect effect_0:output system:playback_2

About

A set of tools for JACK, LV2, MIDI and mod-host

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages