New audio board: Audio Injector Ultra sound card for the Raspberry Pi

Ok, the price segment for the ultra changed.
Before I buy a new one, somebody else should really make it work first.

Ok, i made it work.
The Ultra runs with 48k, so that the jack options needed to be changed.
I made it transparent in the webconf.
The two alsa sliders DAC and PGA are visible.
I am not quite sure how to separate the level of playback and capture though.
But I am in contact with Matt to solve this issue.

I am going to avoid the Audioinjector Ultra 2 until some things changed.
This might be a new driver or I give it another try when Raspi 4 is out.

Those are the main issues:

  1. alsactl store
    alsactl: get_control:256: Cannot read control ‘2,0,0,C Data Buffer,0’: Input/output error
    That makes it impossible to save the volume. As it is resetting to 100 every boot, which is too loud. I used a script which sets it to 80% at boot time.

  2. The volume for the playback and the capture is called “DAC” in both cases and “amixer controls” doesn’t show two different controls either so that I could use numid=xy to handle it. This means, that both output volume and input volume are the same. When alsamixer is used, they are locked together as well.
    If Matt would change the driver, so that there are two mixers, we could set two different volume levels.

  3. As I have to use a different jack setting, Pianoteq is not as nice as with other cards. And I get more xruns either. That’s why I said, I would give it another try when there is a Raspi 4.

But as of know, I am going to use the Zero again.

1 Like

Yes indeed.
The ultra uses the linux/sound/soc/codecs/cs4265.c driver. This driver is a little bit of a mess, I have already made many fixes to it.

To address your points:

  1. Yes this is a problem - it is to do with buggy code in the linux driver. I will look into it when I get more time.
  2. I believe the ADC is called PGA in the capture screen of alsamixer. Again the “DAC” in the alsamixer capture section is due to buggy linux codec code. So to sum up, use DAC in the playback section of alsamixer and PGA (for ADC) in the capture section of alsamixer.
  3. It wasn’t clear whether there are more xruns or not - which jack settings are being used ?


1 Like

HI @flatmax!

Welcome to Zynthian’s community! Nice to see you here. We are a few AudioInjector owners in our community.
Your help will be really appreciated for having AI cards fully integrated in zynthian and working 100%. Your cards are very interesting stuff for building synthesizers :wink:


Hi Matt, nice to see you here.
Please let us know, when you fixed the driver.
I will test that and the DAC/PGA issue in that case.

-P 70 -t 2000 -s -d alsa -d hw:0 -r 48000 -p 256 -n 2 -X raw

Those are xruns when Pianoteq is used. The Hifiberry seems to use less processing power.
When I play the same sound with Hifiberry, the performance stays green at approx. 50% most of the time with peaks at 80%. (at 44.1k)
But with AudioInjector Ultra and Zero as well, I am constantly at 60/70% with little peaks up to 100%, so that there are occasional xruns.

Thanks a lot,

Sweet !

I am wondering why two i2s based cards would have such different cpu usage ?

Both use the same DMA right? Their Alsa soc pcm processes should be very similar … hmmm

I have had a thought. Maruks, can you tell me, does the audio injector open jack in full duplex mode (with input and output) ? Do the other sound cards open jack in half duplex output only mode ?

Hm. Yes the hifiberry doesn’t have Audio In.
How can I disable it so that the Audioinjector Zero is saving resources?
Is muting enough?
The comparison between hifiberry and ultra isn’t fair because ultra is set to 48k.

Just noting that upstream Linux is in the process of being patched for the issue 1 above.
This will make alsactl store work as expected.

Turns out it was a cs4265 linux codec driver bug.


Thanks for the update, @flatmax!

Can I expect the change already when I do an rpi-update?

1 Like

I just tried, but an rpi-update didn’t solve it. Do I have to wait?
Are you informing us, when we can test again?


I just tested the Ultra with our first running buster image on a Raspi4…no :frowning: jack hasn’t been started.

Ok, I don’t know, what went wrong first. Now it works.
The alsastore issue is solved.
The pianoteq index is 17 and the first time in my life I don’t get any xruns…running raspi4…

So now I can officially say, that zynthian supports Audio Injector Ultra as well :slight_smile:


Please use this thread

fyi, there is currently a bug:

I think, it’s even located in the driver itself.
What is the best way to run a command during startup?
I could pick one of the raspbian ways. But is there a zynthian way as well?

Something I could configure in the webconf would be nice.

You need to run a mute every start…yes, mute, not unmute…I think, it’s reversed somewhere.

This is hardcoded in the, inside zynthian-sys/scripts. You can fix It there.


that is only called during update.
I added this line (which works when I run it manually)
amixer -c audioinjectorul sset ‘DAC’ mute
(note the bug…it means unmute)

But after restart it’s still mute.
I tried /etc/rc.local as well. But that is too early.
I tried to change the line in zynthian_engine_mixer but this only helps for the startup issue. When I change the volume in AudioMixer, it’s mute again.