pulseaudio – flash blocks the audio device

On my x86_64 gentoo box, running gnome and therefore pulseaudio, I experienced the problem that when and after playing some flash videos (i.e. youtube) the sound device was blocked and no other application was able to play sound.  After killing the plugin sound worked just normal, but that was no convenient way.

64-bit flash plugin for Firefox

My first suspective was the 32-Bit flash plugin I used  in my 64-bit Firefox until now. So I replaced it by the new 64-bit plugin, which did not solve the problem, since it does also not use pulseaudio for playback. But I include the steps for completeness here:

echo “=www-plugins/adobe-flash-10.2.161.22_pre20100915 **” >> /etc/portage/package.keywords

emerge adobe-flash

For other linux distributions  like Debian, Ubuntu, Redhat or Suse you obviously have  to search the appropriate plugin and  install it the distribution-specific way. Afterwards you have to remove the 32-bit plugin from nspluginwrapper, which makes 32-bit plugins available for 64-bit firefox:

nspluginwrapper  -r /usr/lib/mozilla/plugins/npwrapper.libflashplayer.so

As I stated before this does not solve the problem, but at least it gives one a 64-bit flash plugin 😉

Make alsa applications use the pulseaudio server

There is a pulseaudio plugin for alsa, which is necessary for playback of alsa sound via the pulseaudio server. So the next step is to install this plugin. For gentoo it is contained in the alsa-plugins package. So for the gentoo way:

emerge alsa-plugins

Afterwards make sure that your /etc/asound.conf contains the following lines:

pcm.pulse {
type pulse
}
ctl.pulse {
type pulse
}
pcm.!default {
type pulse
}
ctl.!default {
type pulse
}

After restarting alsa everything that is playing sound via alsa now uses pulseaudio via the plugin and the sound device is no more used concurrently. One can playback via pulseaudio after using flash sites or even at the same time. Mission accomplished!

OSS emulation for pulseaudio

Sadly the above only works for applications directly using the alsa sound system. Applications depending on OSS (i.e. all Java Applications), using the kernel layer alsa oss emulation, still block the audio device, so the the kernel layer OSS emulation is a no go with pulseaudio. Include the corresponding modules in /etc/modprobe.d/blacklist.conf or remove the emulation completely from your kernel configuration.

screenshot

Of course this only shuts off these applications completely but is neccesary for the further steps to work. We´re lucky, we can use a daemon which provides the OSS devices (/dev/dsp, etc.) and links them via fuse to the pulseaudio daemon. For this we need to load the cuse kernel module (add it to /etc/modules.autoload.d/kernel-2.6 and it gets loaded automatically on next reboot)  or when not available add the functionality  to your kernel configuration and rebuild your kernel.

kernel configuration for cuse

Now we´re ready to install ossp, the daemon I mentioned before. It is available from Sourceforge, probably also in your distributions package repository. For gentoo users, as usual there is a more easy way. I found an ebuild for ossp on gentoo bugzilla, which I got to work with minor modifications. You can download the modified ebuild here: ossp-1.3.2.ebuild (929)

To use the ebuild, just copy it to/usr/local/portage/media-sound/ossp/ . You probably have to create the directory. Then run

ebuild /usr/local/portage/media-sound/ossp-1.3.2.ebuild digest

Be sure to include the following line in your /etc/make.conf.

PORTDIR_OVERLAY=”/usr/local/portage”

Also include ossp into your /etc/portage/package.keywords

echo “media-sound/ossp **” >> /etc/portage/package.keywords

Afterwards just

emerge ossp

For having osspd started automatically on every system boot I lazily included it in my /etc/conf.d/local.start.

echo /usr/sbin/osspd >> /etc/conf.d/local.start

Now sound should just work as one expects it to. Different sources can playback at the same time. No blocked devices occur because of concurrency, no matter which sound API the applications use.

Jürgen

References:

BombStrike´s blog: How to use two different computers with two differents OSes seemlessly

H3X.SE: FAQ

Linux Live: ALSA and Jack Cooperate using PulseAudio

Gentoo Bugzilla: osspd ebuild

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Java encoding

For one of our projects I had to write a simple program, for importing items into our online store (watercoolshop.de). When I finished the coding everything seemed to run smooth, but only on Windows. Afterwards I tested the program on my linux box and it did not work.

After checking all files I found out that the encoding of the files was wrong for importing into our shop. With the help of google and some other sites the problem was solved. I had to use ISO-8859-1 for all files, because the core data is 8859.

To read a file I use the following code now:

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(),”ISO-8859-1″));

and to write:

Writer bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName), “ISO-8859-1”));

I hope this will help someone who has a similar problem.

Thorsten

References:

java.ittoolbox.com

www.schoenitzer.de

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

java3d ebuild for gentoo

The java3d ebuilds in the gentoo portage tree are very outdated, and didn’t even work for me anymore. So I wanted to install a newer version of java3d. This resulted in the updated ebuild you can download from here:

sun-java3d-bin-1.5.2.ebuild (643)

I tried the ebuild together with sun-jdk-1.6.0.13 on x86_64 gentoo linux, but it schould also work on i586.

To use it just create the directory structure

mkdir -p /usr/local/portage/dev-java/sun-java3d-bin/

and copy the new ebuild to that directory. Then run

ebuild /usr/local/portage/dev-java/sun-java3d-bin/sun-java3d-bin-1.5.2.ebuild digest

Be sure to include the following line in your /etc/make.conf:

PORTDIR_OVERLAY=”/usr/local/portage”

Then just emerge sun-java3d.

emerge /usr/local/portage/dev-java/sun-java3d-bin/sun-java3d-bin-1.5.2.ebuild

The ebuild creates some symlinks in your VM’s directory, so if you switch the browser plugin or the entire VM you have to reemerge sun-java3d-bin. To have the library ready to use you also have to add the following lines to your /etc/profile:

if [ “$CLASSPATH” = “” ] ; then
CLASSPATH=”/usr/share/sun-java3d-bin/lib/vecmath.jar:/usr/share/sun-java3d-bin/lib/j3dutils.jar:/usr/share/sun-java3d-bin/lib/j3dcore.jar”
else
CLASSPATH=”${CLASSPATH}:/usr/share/sun-java3d-bin/lib/vecmath.jar:/usr/share/sun-java3d-bin/lib/j3dutils.jar:/usr/share/sun-java3d-bin/lib/j3dcore.jar”
fi
export CLASSPATH

if [ “$LD_LIBRARY_PATH” = “” ] ; then
LD_LIBRARY_PATH=”/usr/lib/sun-java3d-bin/”
else
LD_LIBRARY_PATH=”${LD_LIBRARY_PATH}:/usr/lib/sun-java3d-bin/”
fi
export LD_LIBRARY_PATH

To have the changes in effect logout and login again.

If you want to have java3d useable in firefox you have to modify the line:

export LD_LIBRARY_PATH=”/usr/lib64/mozilla-firefox”

in your /usr/bin/firefox to:

export LD_LIBRARY_PATH=”/usr/lib64/mozilla-firefox”:$LD_LIBRARY_PATH

Otherwise you will end up getting unstatisfied link errors since the j3d library cannot be loaded.

Finally you can test if your java3d works on Testseite für Java und Java3D – VS-C. If you are working in a multiheaded environment, this java3d version may only work on the first display. So, if you experience problems just place your browser on the first head.

Have Fun

Jürgen

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...