[LAU] Sound from/to custom ADC/DAC

pepijn de vos pepijndevos at gmail.com
Sun Mar 11 14:35:54 CET 2018


Hello,

For a university project we're building a custom audio system with our own
input and amplifier.
We will most likely use an FPGA that communicates sound data over SPI to a
Raspberry Pi.
On the Raspberry Pi the sound can be further processed by for example Sonic
Pi.

Sonic Pi uses SuperCollider which uses JACK which uses ALSA.
At some point in this chain we need to be able to interface with our FPGA.

Initially I thought it would be easy to write a JACK client, and it is.
The problem with that seems to be that JACK is in control of the sampling
rate.
So if I read data from the FPGA into a buffer and the clocks drift, I get
overruns or underruns.

I found a few potential solutions.
What alsa_in and alsa_out do is resample between the two clocks. Maybe a
bit of work, but definitely works.
There is some business about clockmaster in JACK, which seems to be
something different, but maybe I don't understand it.
There is a freerunning mode, which makes it OK to do IO in the callback.
I'm not sure if this plays well with SuperCollider. It seems that in this
case the processing is directly driven by how fast I get data from the
FPGA, which is what I want.

If all of the above turns out to be bad ideas, I need to look at a
different location in the chain.
It would make sense to write an ALSA driver for what is pretty much a
custom sound card.
However, it seems that writing an ALSA driver is orders of magnitudes more
complex than registering a callback with JACK.

Any ideas what would be the easiest way to get sound from our FPGA into
SuperCollider and back?

Regards,
Pepijn de Vos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.linuxaudio.org/archives/linux-audio-user/attachments/20180311/3e6d65a5/attachment.html>


More information about the Linux-audio-user mailing list