[pulseaudio-discuss] PulseAudio questions

Nikita V. Youshchenko yoush at cs.msu.su
Tue Aug 28 02:39:58 PDT 2007


> If I understand correctly you are running PA on top of some SunRay
> specific OSS emulation? This looks like an issue in that emulation to
> me. According to the OSS docs reads/writes to the OSS devices are
> always guaranteed to be multiples of the frame sizes in size. And
> apparently that guarantee is not valid for these machines?

SunRay software creates audio device files for each connected terminal:

root at sunraysrv:/tmp/SUNWut/dev/utaudio> ls -l | grep -- -5
crw------- 1 nikita   users 14, 3 2007-08-22 17:53 utdsp-5
prw------- 1 nikita   users     0 2007-08-22 17:53 utdsp-5stat
crw------- 1 nikita   users 14, 0 2007-08-22 17:53 utmix-5

These devices are serviced by a kernel module, utadem.ko, which is included 
with SunRay server software. Module comes with sources, so I may try to 
check what happens with data written to the device.

Most OSS software does not have issues with these devices. PA is the first 
one. Although I did not try many :)

> > - when user starts mplayer within session, 'session-side' pulseaudio
> > server crashes at top of pa_memblockq_drop() on
> >   assert(length % bq->base == 0);
>
> Seems to be the same issue here. Both asserts make sure that the data
> is properly aligned to fram sizes. And apparently this is not
> guaranteed to be true when read/written from the OSS devices.
>
> > I tried to comment out both asserts, and without those looks like
> > everything works.
> > However, I guess that asserts are there for a reason? What is a
> > better fix?
>
> It is very difficult to debug this from here. I think the workaround
> in PA would be far from trivial.

I'm willing to help debugging. What should I do/check/etc ?

> > 2. When applications within session are playing short sounds, it
> > sounds like last very short fragment (0.1 sec or so) of eash sound is
> > played at the beginning of the next sound. Looks like somewhere a
> > buffer is not flushed at sound end, so data collected there is passed
> > to audio hardware when new sound if being played.
> > Any comments on this?
>
> Sounds like a classic esd bug. Someone mentioned that SunRay would be
> using esd for audio, is that right? If so, you're currently having the
> ESD experience. It's probably the best idea to replace ESD entirely by
> PA.

This happens also with a PC/linux terminal. Just reproduces with the 
following setup:

Termimal runs a pulseaudio daemon what talks to local audio hardware (via 
alsa) and listens with module-native-protocol-tcp

Application server runs a pulseaudio daemon that listens through 
module-native-protocol-unix and forwards data to terminal with 
module-tunnel-sink.

Applications play audio with 'paplay'.

So only pulseaudio (and terminal-side alsa hardware) is involved. No esd.

>
> > 3. It will be very useful to implement completely transparent audio
> > migration, such that apps playing 'long' sounds will not notice that
> > user disconnected and then reconnected from other terminal, but will
> > transparantly continue playing.
> >
> > >From pulseaudio point of view, audio sink on 'session' pulseaudio
> > > server
> >
> > may disappear, and then - probably after some minutes - a new 'sink'
> > may appear. And same with source.
> > Is it possible to script pulseaudio server somehow such that
> > applications running in the session won't notice anything?
>
> I am working on som more transparent network support in PA. Something
> like a beefed up tunnel sink with zeroconf support. There's already
> module-rescue-streams which moves streams to a different sink if a sink
> dies.
>
> Stay tuned.

Great, will look into module-rescue-streams.

> > 4. Is there any audio mixer application that may run within KDE's
> > panel, and control audio volume in this configuration.
> > KDE's kmix talks to ALSA directly. I was able to fool it by writing in
> > alsa configuration file that ctl 'hw' is 'type pulse', and it even
> > worked. But real 'hw' device has parameters, so my hack resulted in
> > kmix recognized 32 mixers :).
>
> 32 mixers? How come? Please explain?

nikita at desktopvm:~> cat /tmp/xxx
ctl.hw {
    type pulse;
}

pcm.default {
    type pulse
}

ctl.default {
    type pulse
}
nikita at desktopvm:~> ALSA_CONFIG_PATH=/tmp/xxx kmix --nofork

And see how many mixer it finds. Oh, there are not 32, only 20 :)
Looks like kmix tries to open different ALSA mixers, and with such a config 
all those are opened successfully and forwarded to pulseaudio.

> > Maybe it is possible to set up things such that 'hw' only with
> > particular parameters is 'type pulse', and with all other parameters
> > it is non-existent?  Or just use another mixer app which is more
> > pulseaudio-friendly (but still runs in KDE panel!)
>
> I am sorry. I have no experience with KDE. Presumably you can use the
> combination of padevchooser and pavucontrol.

The question was more about ALSA than about KDE.
Probably I may write something in the alsa configuration file that ctl hw 
only with particular parameters will be forwarded to pulse, and all others 
will be reported as non-existent.

Nikita



More information about the pulseaudio-discuss mailing list