darkice-libaacplus-rpi-guide
darkice-libaacplus-rpi-guide copied to clipboard
Steps to get darkice compiled with libaacplus support on a raspberry pi running raspbian jessie
USB Turntable to Sonos or Pi Musicbox streaming guide
for darkice, libaacplus, et al on Raspberry Pi 3 with Raspbian Jessie Lite
to facilitate streaming audio from one of these turntables with USB audio codec output
- Audio-Technica AT-LP60-USB
- Audio-Technica AT-LP120-USB
- ION Audio Classic LP | 3-Speed USB
- Sony PSLX300USB
via a Raspberry Pi 3 (or older, but why?)
using Raspbian Jessie Lite
Install raspbian
Grab Pi Filler to write the image file (.img) to your 2GB or larger SD card.
Headless wi-fi setup (via macOS, optional)
Download VirtualBox and the VirtualBox Extension Pack (needed for USB 2/3 SD card readers).
Download an Ubuntu VirtualBox image so we can access the EXT4 filesystem on the RPi boot card.
Load up the image, insert the microSD card, select the card reader from the VirtualBox USB menu bar icon, and edit the /etc/wpa_supplicant/wpa_supplicant.conf
file. Add a network entry (or several) for your wi-fi network:
network={
ssid="MyWiFiNetwork"
psk="mywifinetworkpassword"
}
Eject the SD card reader from Linux and your Mac, and put the card in the RPi.
Power up your RPi, wait a minute or so, and now try sshing into the box with ssh [email protected]
and the password raspberry
Dependencies
Update your Raspbian install:
sudo apt-get update
Set your Raspbian system hostname by editing /etc/hostname
and change raspberrypi
to:
vinyl
and also the line in /etc/hosts
from raspberrypi to:
127.0.1.1 vinyl
Then install a bunch of needed packages:
sudo apt-get -y install aptitude apt-utils sudo unzip autoconf libtool libtool-bin checkinstall libssl-dev libasound2-dev libmp3lame-dev libpulse-dev alsa-utils avahi-daemon darkice
We will install the darkice package, but compile it later to add AAC+ support
Compiling libaacplus
wget http://tipok.org.ua/downloads/media/aacplus/libaacplus/libaacplus-2.0.2.tar.gz
tar -xzf libaacplus-2.0.2.tar.gz
cd libaacplus-2.0.2
./autogen.sh --with-parameter-expansion-string-replace-capable-shell=/bin/bash --host=arm-unknown-linux-gnueabi --enable-static
make
sudo make install
Get darkice source
Enable the Raspbian source repo
sudo vi /etc/apt/sources.list
uncomment or add the deb-src line
deb-src http://archive.raspbian.org/raspbian jessie main contrib non-free rpi
Then run:
sudo apt-get update
Now get the darkice source
cd ~
mkdir src
cd src
apt-get source darkice
cd darkice-1.2
Compiling darkice
./configure --with-aacplus --with-aacplus-prefix=/usr/local --with-pulseaudio --with-pulseaudio-prefix=/usr/lib/arm-linux-gnueabihf --with-lame --with-lame-prefix=/usr/lib/arm-linux-gnueabihf --with-alsa --with-alsa-prefix=/usr/lib/arm-linux-gnueabihf --with-jack --with-jack-prefix=/usr/lib/arm-linux-gnueabihf
make
make install
Configure /etc/darkice.cfg
# this section describes general aspects of the live streaming session
[general]
duration = 0 # duration of encoding, in seconds. 0 means forever
bufferSecs = 1 # size of internal slip buffer, in seconds
reconnect = yes # reconnect to the server(s) if disconnected
realtime = yes # run the encoder with POSIX realtime priority
rtprio = 3 # scheduling priority for the realtime threads
# this section describes the audio input that will be streamed
[input]
device = hw:1,0 # OSS DSP soundcard device for the audio input
sampleRate = 48000 # other settings have crackling audo, esp. 44100
bitsPerSample = 16 # bits per sample. try 16
channel = 2 # channels. 1 = mono, 2 = stereo
# this section describes a streaming connection to an IceCast2 server
# there may be up to 8 of these sections, named [icecast2-0] ... [icecast2-7]
# these can be mixed with [icecast-x] and [shoutcast-x] sections
[icecast2-0]
bitrateMode = cbr
format = mp3
# format = aacp
bitrate = 320
# bitrate = 64
server = vinyl
port = 8000
password = vinyl # or whatever you set your icecast2 password to
mountPoint = listen
name = Vinyl
description = DarkIce on Raspberry Pi
url = http://vinyl
genre = vinyl
public = no
localDumpFile = recording.m4a
icecast2
aptitude install icecast2
For the hostname, use vinyl
, and for both hackme passwords, use vinyl
Then, for the admin password, set it to vinyl
as well.
Note: heaven forbid you mess up the icecast2 text GUI config... you'll need to run
apt-get autoremove icecast2
apt-get purge icecast2
and then reinstall it
aptitude install icecast2
to get that crappy GUI back... unless there's an easier, undocumented way? and even then, where are the icecast.xml config files? not in /etc/icecast2/ ...
Disable the icecast2 burst-on-connect
Edit /etc/icecast2/icecast.xml
and set burst-on-connect to 0 to lower latency on your local network:
<burst-on-connect>0</burst-on-connect>
Autostart darkice
These are from an Ubuntu install and don't exactly match the startup script, but they are close enough and do solve the startup problem
1
In /etc/init.d/darkice find:
DAEMON=/usr/bin/$NAME
and change it to the AAC+ complied version:
DAEMON=/usr/local/bin/$NAME
2
In /etc/init.d/darkice find:
start-stop-daemon --start --quiet --pidfile $PIDFILE \
and replace it with:
start-stop-daemon --start --quiet -m --pidfile $PIDFILE \
3
In /etc/init.d/darkice find:
stop_server() {
# Stop the process using the wrapper
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--exec $DAEMON
errcode=$?
add after (with the new line):
rm $PIDFILE
4
In /etc/init.d/darkice find:
running() {
# Check if the process is running looking at /proc
# (works for all users)
add after (with the new line):
sleep 1
5
In /etc/default/darkice check that you have
RUN=yes
6
systemctl daemon-reload
7
Add default user nobody to the audio group (in my case, to work with ALSA):
adduser nobody audio
8
Fix upstart problem (it seems Darkice is trying to start on boot too early):
update-rc.d -f darkice remove
update-rc.d darkice defaults 99
Reboot and connect to your USB turntable
It should work now, so connect your streaming client up to (http://vinyl.local:8000/listen.m3u) and put on a record.
On Sonos, add your streaming turntable URL (http://vinyl.local:8000/listen.m3u) by adding a custom Internet radio station.
On Pi Musicbox, add the URL to your /boot/config/radiostations.js
file or use the GUI.
Or switch to Volumio.
Icecast2 admin
is located at (http://vinyl.local:8000) and is good for checking the status of connected clients
RPi temp
Check the temp of your RPi 3 with
/opt/vc/bin/vcgencmd measure_temp
if you're running without a heatsink, best to keep it below 70C
More info
See this forum
Final note
While AAC+ is neat, on a local network you might as well stream 320Kbps MP3 for better sound quality, or if you're so inclined, uncompressed WAV