How to fix sound issue with KODI on the orange pi


I have Orange Pi One board. It's a great product, it is faster, cheaper and smaller then Raspberry Pi, but it uses AllWinner H3 SOC and it is its main disadvantage.

If you want to use this board as a media center with KODI, you face the problem with sound. The sound works in Armbian applications but doesn't work in KODI. It happens because KODI uses S24_LE sampling format which is not supported by Orange Pi hardware.

root@orangepione:~# speaker-test  -D hw:1 -c2 --format S24_LE

speaker-test 1.0.28

Format S24_LE is not supported...

Ok, we found out the root of the problem, time to fix it!

Now we need to set sampling format which is supported by Orange Pi hardware. One of supported sample formats is S32_LE. Check if it is correct:

root@orangepione:~# speaker-test  -D hw:1 -c2 --format S32_LE

speaker-test 1.0.28

Playback device is hw:1
Stream parameters are 48000Hz, S32_LE, 2 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 64 to 131072
Period size range from 32 to 16384
Using max buffer size 131072
Periods = 4

Now check soundcards, we need to get the device number which plays over HDMI output.

root@orangepione:~# cat /proc/asound/cards
 0 [audiocodec     ]: audiocodec - audiocodec
 1 [sndhdmi        ]: sndhdmi - sndhdmi

The sndhdmi is a soundcard which attracts our interest. Remember the number of this one.

Now we can edit the Alsa config:

vim /etc/asound.conf

Delete old content and paste the following one:

pcm.snd_card {
        type hw
        card 1
        device 0

ctl.snd_card {
        type hw
        card 1
        device 0

pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave.pcm "snd_card"
    slave {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 48000
        format S32_LE
        channels 2
    bindings {
        0 0
        1 1

Save the file and reboot.

After that the KODI will play sound. If it doesn't play, check the number in card fields of the config, it must be the number from sndhdmi card, and samplerate and samplerate format in slave section. The samplerate should be equal with one from the speaker-test command output.