I've been tasked with migrating our project from using two different sound 
libraries to use only pulse.
I'm stuck with 0.9.21 on RHEL6 as the release because too many customers are on 
this version to force a migration.

With this version, the asynchronous version I've found to be too unreliable. 
Asserts get thrown about 5% of the time for conditions that should not be true, 
even when using example code on the pulse site. So, I've gone to the simple 
api. Outside of our product, I've gotten both the record and play versions to 
work. Inside our product, the record part works fine. However, the playback 
version blocks in pa_simple_write (the first write when the buffer is made 
small, once full in a large buffer) with no sound ever being played. I've tried 
setting the buffer attributes to different settings with no success. Using 
pacmd, both the sink and the sink input are shown in the running state. No 
other applications are using audio at the same time. The audio I'm trying to 
send is continuous so (or at least it would be) I wouldn't think a suspension 
would occur due to underflow. I've also tried doing an open, write, close for 
each piece of audio with no luck. Our product is multi-threaded, but the audio 
is all in one thread. I've tried using the default device (having set the 
default) and using the device name directly to no avail in the pa_simple_new 
call.

As there are only 3 calls in the simple api, I don't know what to do at this 
point.
Does anyone have any ideas of where to look or what could be the issue?

Though the calls are basic, here is the code:

In a routine called to open the stream:

pulseSpecs.rate = 44100;
pulseSpecs.channels = 2;
pulseSpecs.bits = PA_SAMPLE_S16LE;
pulseAudio = pa_simple_new(NULL, "RGS Audio", PA_STREAM_PLAYBACK, NULL /* or 
alsa_output.pci-0000_00_1b.0.analog-stero */, "RGS Play", &pulseSpecs, NULL, 
NULL, NULL);

In a routine to receive the audio and send it to pulse:

Std::vector<unsigned char> rawSound is a parameter to the routine
If (rawSound.size() == 0) return;
pa_simple_write(pulseAudio, &rawSound[0], rawSound.size(), NULL);
//also tried copying rawSound to another buffer


_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to