On Wed, 07.10.09 10:31, stan (gryt2 at q.com) wrote: > Hi, > > I am adding (trying to add) pulse support to an application I author. > But no matter what I do, I can't get it to play correct sound. Here is > the sordid history. > > I first added pa_simple support as this seemed tailor made for what I > want to do - send buffers of data at regular intervals to a sound > device. I used the sample from the web page and looked at > implementations from several other applications - Csound, sox, > helix-player. It compiled cleanly, gave every indication it was > working, but the sound that came out sounded like a dying whale. I > traced it in gdb to the point of writing the buffer as a chunk > someplace, and everything looked fine. Maybe you are filling pa_sample_spec in improperly? Or maybe there is some confusion between samples and frames and you write incomplete data? "Sounds like a dying whale" is a little bit too little to tell what might be going wrong from my perspective. > So I upgraded to using the standard model - I copied the > xmms-pulse plugin.c as a template and modified it until it compiled on > my system without issues. Same problem, sound is horrible. To > actually use callbacks would require a complete change in architecture > for the application, and I'm not going there. Uh. xmms is not maintained and dead and removed from quite a few distros. Something similar is true for xmms-pulse. This is really not where you should be looking. > >From this list I discovered the pacmd interface. I turned on logging > to level 4 and set source line flagging. I now see messages about > being unable to push to the queue, and the line is 1355 in > protocol-native.c. That usually means that your client doesn't read enough, you send too many little requests or something like this. > I've added my user to the pulse, pulse-rt, and pulse-access groups. Don't do that. pulse-rt is obsolete since 0.9.16, and the other two groups are only relevant if you run PA in system mode, which you should not. And under no circumstances any user should become a member of the pulse group, except for the pulse user itself. > Some bugs/issues I've found along the way. > > The xmms-pulse plugin.c call to pa_stream_write has > PA_SEEK_STREAM_RELATIVE and offset reversed from the template in the > stream.h header file. Indeed. Fixed that in my checkout. Unlikely I will ever do another release of this though. > Configure complains about the /usr/include/pulse/stream.h file unless > the following two includes are added: > #include <pulse/context.h> > #include <pulse/proplist.h> Uh, it is recommended to include pulse/pulseaudio.h instead of the seperate header files. We probably should add some macro magic that warns the user about this. Nonetheless, fixed now. > Configure complains about the /usr/include/pulse/ext-stream-restore.h > file unless the following two includes are added: > #include <pulse/volume.h> > #include <pulse/channelmap.h> Fixed. > > This is taking waaaayyy too long. It is peripheral to the purpose of > my app, and I'd rather be adding new features. So I would be grateful > for any insight. Is your software Free Software? If so, may I have a peek on your code? Lennart -- Lennart Poettering Red Hat, Inc. lennart [at] poettering [dot] net http://0pointer.net/lennart/ GnuPG 0x1A015CC4