At this time, Raspbery Pi linux kernel does not support mono audio out of the I2S interface, you can only play stereo, so any mono audio files may need conversion to stereo!
2017-11-2 Raspbian PIXEL ('full') has broken something in volume control. I2S works, but there's no software volume setup, if you need this, try Raspbian Lite - will try to fix as soon as we figure out why :)

Fast Install

Luckily its quite easy to install support for I2S DACs on Raspbian.

These instructions are totally cribbed from the PhatDAC instructions at the lovely folks at Pimoroni!

Run the following from your Raspberry Pi with Internet connectivity:

curl -sS https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/main/i2samp.sh | bash

We've added an extra helper systemd script that will play quiet audio when the I2S peripheral isn't in use. This removes popping when playback starts or stops. It uses a tiny amount of CPU time (on a Pi Zero, 5%, on a Pi 2 or 3 its negligible). You don't need this on RetroPie because it never releases the I2S device, but it's great for Raspbian.

You will need to reboot once installed.

You must reboot to enable the speaker hardware!

After rebooting, log back in and re-run the script again...It will ask you if you want to test the speaker. Say yes and listen for audio to come out of your speakers...

If it sounds really distorted, it could be the volume is too high. However, in order to have volume control appear in Raspbian desktop or Retropie you must reboot a second time after doing the speaker test, with sudo reboot

You must reboot *twice* to enable alsamixer volume (really!)

Once rebooted, try running alsamixer and use arrow keys to lower the volume, 50% is a good place to start.

If you're still having audio problems, try re-running the script and saying N (disable) the /dev/zero playback service.

You can then go to the next page on testing and optimizing your setup. Skip the rest of this page on Detailed Installation if the script worked for you!

Detailed Install

If, for some reason, you can't just run the script and you want to go through the install by hand - here's all the steps!

Update /etc/modprobe.d (if it exists)

Log into your Pi and get into a serial console (either via a console cable, the TV console, RXVT, or what have you)

Edit the raspi blacklist with

sudo nano /etc/modprobe.d/raspi-blacklist.conf

If the file is empty, just skip this step

However, if you see the following lines:

blacklist i2c-bcm2708
blacklist snd-soc-pcm512x
blacklist snd-soc-wm8804

Update the lines by putting a # before each line

Save by typing Control-X Y <return>

Disable headphone audio (if it's set)

Edit the raspi modules list with

sudo nano /etc/modules

If the file is empty, just skip this step

However, if you see the following line:

snd_bcm2835

Put a # in front of it

and save with Control-X Y <return>

Create asound.conf file

Edit the raspi modules list with

sudo nano /etc/asound.conf

This file ought to be blank!

Copy and paste the following text into the file

pcm.speakerbonnet {
   type hw card 0
}

pcm.dmixer {
   type dmix
   ipc_key 1024
   ipc_perm 0666
   slave {
     pcm "speakerbonnet"
     period_time 0
     period_size 1024
     buffer_size 8192
     rate 44100
     channels 2
   }
}

ctl.dmixer {
    type hw card 0
}

pcm.softvol {
    type softvol
    slave.pcm "dmixer"
    control.name "PCM"
    control.card 0
}

ctl.softvol {
    type hw card 0
}

pcm.!default {
    type             plug
    slave.pcm       "softvol"
}

Save the file as usual

Add Device Tree Overlay

 Edit your Pi configuration file with

For older versions of Raspberry Pi, edit /boot/config.txt instead.

sudo nano /boot/firmware/config.txt

And scroll down to the bottom. If you see a line that says: dtparam=audio=on

Disable it by putting a # in front.

Then add:
dtoverlay=hifiberry-dac
dtoverlay=i2s-mmap

on the next line. Save the file.

Reboot your Pi with sudo reboot

This guide was first published on Nov 21, 2017. It was last updated on Apr 17, 2024.

This page (Raspberry Pi Setup) was last updated on Apr 12, 2024.

Text editor powered by tinymce.