[pulseaudio-discuss] PulseAudio <-> ALSA issues

Wolfgang Rosenauer wolfgang at rosenauer.org
Tue Jul 8 11:27:09 PDT 2008


Hi Colin,

Colin Guthrie wrote:
>> I've also opened a bug here:
>> https://bugzilla.novell.com/show_bug.cgi?id=405354
>>
>> I've rewritten some of the Alsa-using code to fix some issues which were 
>> in the application but in its current state I can't think of a major 
>> issue in the app which would cause PA to fail.
>> alsa lib doesn't return an error in any of it's calls but sound simply 
>> doesn't start while it should.
>>
>> The device seems to be initialized correctly and PCM stream is written 
>> to the buffer but stream never starts. The pulse audio config thingy is 
>> showing the application and offers a volume control for it but that's it.
>>
>> Anyone has any hints for me please?
> 
> While I don't see anything in the bug report's attachment about calls to 
> snd_pcm_delay(), you do mention it in a comment.
> 
> I suspect you are making the same mistake that the wine people have made 
> with regards to this function. It should return a delay that the 
> application should expect before a sample played now is actually heard. 
> It has been used incorrectly by some implementations to check whether a 
> queued sample has been fully output: i.e. when the function returns 0, 
> the sample has finished playing as there is no delay left. This is not 
> actually a correct use of the function. Wine people got this wrong, as 
> have several others. This is in part due to the high level documentation 
> of the function in the alsa docs mentioned in the implementation details 
> with reference to frame pointers. From this implementation (used for 
> hardware devices) it is only a small logical step to assume that it will 
> eventually return 0.
> 
> When used with a pulseaudio, advanced latency information is included in 
> the return value and it will rarely (if ever) return 0.

I don't think that's the issue in my case.
I use snd_pcm_delay() actually to get an idea how long/big our buffer 
still is to tell the stream delivery to send data to a second (software) 
buffer. So I get the buffered frames from alsa's buffer to know how many 
frames are in my queue before requesting more data from the audio stream.
The application never waits to hit a delay of 0.

That doesn't explain my observations anyway since I can verify that I 
write via snd_pcm_writei() while the PCM is in PREPARED state what 
should trigger the sound output. But I can't hear anything and following 
calls to snd_pcm_delay() and snd_pcm_avail_update() show that the delay 
is always the buffer size and doesn't change. That suggests that the 
actual sound output never starts.

Thanks anyway,
  Wolfgang



More information about the pulseaudio-discuss mailing list