[alsa-devel] Hot to properly output DSD silence pattern before/after playback?

Martin Pietryka martin.pietryka at streamunlimited.com
Wed Oct 21 15:46:33 CEST 2015


Hello Guys,

I have already asked the question last week, but the thing got a bit 
more complicated.

So we need to achieve the following when playing back DSD audio:

1.) Start outputting the DSD silence pattern (0x69) for ~40ms
2.) After ~10ms unset a mute GPIO
3.) Start outputting DSD data after silence is over

and after DSD playback is finished a similar procedure:

1.) Start outputting the DSD silence pattern (0x69) for ~40ms
2.) After ~10ms set a mute GPIO
3.) (let silence run out)

In addition to that, we also have the need to toggle the mute GPIO from 
an appropriate place at an appropriate time, the timing does not have to 
be exact but we need to be sure that the actual hardware already started 
outputting the silence samples.

We have figured out three possibilities where to add the silence:
1.) Inside our application:
     We are using GStreamer and for various reasons we currently can't 
do it here without a significant effort.

2.) Inside alsa-lib:
     The idea here is to inject a snd_pcm_writei() call on the first 
call of snd_pcm_writei() and inside snd_pcm_drain(). This is really 
ugly, but doable, I already have a simple proof of concept working. But 
here I think the GPIO stuff will get really complicated.

3.) Inside the kernel:
     Modify the soc driver to output the silence pattern before and 
after playback.

So what do you guys think would be the best approach to this problem, 
are there any other possibilities?

I would imagine someone has had to do something similar before, but I 
couldn't find anything with Google, so if you know something regarding 
this, please let me know.

Thanks,

Martin


More information about the Alsa-devel mailing list