diff --git a/README.md b/README.md index c206ad8..240beb7 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,45 @@ # Objective -This gide aims at outputing aes67 audio streams from the raspbery pi, using pipewire. Our hope is to get the [score sequencer](ossia.io) running on the pi and streaming to aes67 compatible hardware. Tested on the respbery pi 5 runing arch linux, and streaming to innosonix LP2 amps. +This Gide aims at outputting aes67 audio streams from the Raspberry Pi, using pipewire. Our hope is to get the [score](https://ossia.io) sequencer running on the pi and streaming to aes67 compatible hardware. \ +Tested on the Raspberry Pi 5 running Arch Linux, and streaming to Innosonix LP2 amps. -# File system +# Tree ```md -├──/etc -│ ├── /linuxptp -│ │ └── /ptp4l.conf -│ ├── /netctl -│ │ └── /ethernet-static -│ ├── /systemd -│ │ ├── /system -│ │ │ ├── /aes67-proxy@.service -│ │ │ └── /linuxptp.ptp4l@.service -│ │ └── /user -│ │ └── /pipewire-aes67.service -├──/home -│ └──/ -│ └── /.config/ -│ └── pipewire-aes67.conf +/etc +├── /linuxptp +│ └── /ptp4l.conf +├── /netctl +│ └── /ethernet-static +├── /systemd +│ ├── /system +│ │ ├── /aes67-proxy@.service +│ │ └── /linuxptp.ptp4l@.service +│ └── /user +│ └── /pipewire-aes67.service +/home +└──/ + └── /.config/ + └── pipewire-aes67.conf ``` + +# Arch arm + +The Raspberry Pi 5 does not support Arch Linux installation out of the box at the moment. [Sven Kiljan blog post](https://kiljan.org/2023/11/24/arch-linux-arm-on-a-raspberry-pi-5-model-b/) explains the necessary workaround. + +# Network + +Connecting the pi and the amp to an unmanaged switch is currently our preferred approach. Without DHCP, all IP addresses were set statically in 169.254.14.0/16 range. The gateway being the IP address of the unmanaged switch. . \ +Netctl is used to set the static Ethernet connection. The ```ForceConnect=yes``` had to be set, but this could have been an issue while running concurrently with a DHCP connection. More tests needed. + +# PTP + +In our setup, the amp will be used as the PTP clock grand master. An Ethernet connection is first required, so the linuxptp.ptp4l@.sevice is set to start after the network-online.target. \ +@jcelerier suggested the ptp4l invocation. \ +the ptp4l.conf file is required, as well as this [udev rule](https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/78642cc53bd84c2ad529f2175cc50a658d1e52c0/src/daemon/90-pipewire-aes67-ptp.rules) + +# Pipewire-aees67 + +As pipewire does not like to run as root, the pipewire-aes67.service will be enabled as with the --user flag. To that effect, The chosen user needs to be set to linger: ```loginctl enable-linger ```\ +Unfortunately, user side services can not depend on system-wide services. For pipewire-aes67 to work, we require a network connection, and therefore, require starting this user service after the system network service. The aes67-proxy@.service is used to circumvent this issue, so that a user service can be started on boot.\ +To make audio connections, we use qpwgraph, as it gives us graphical feedback useful for debugging. If the system work as desired, we may revert to simply using pw-link. Since qpwgraph is written with the qt framework, it can be invoked with ```QT_QPA_PLATFORM=vnc```, which makes its UI available from a VNC client. This is useful for our purposes, running the Raspberry Pi "headless" (without any peripherals).