Play jukebox on PulseAudio

Need help? Post your questions here.

Moderator: moderators

Play jukebox on PulseAudio

Postby spookybathtub » Thu Mar 28, 2013 12:08 am

I am running Subsonic 4.7 on Tomcat 6 on Sun Java 7 on Ubuntu 12.04.
I want Subsonic jukebox mode to play through the PulseAudio Mixer, but it seems to be hogging the sound card directly. If I reboot the system and play SS jukebox, it works, but then no other apps can play sound. If I open another app first, then SS doesn't play, and it gives no error message in the log.

When I test Java applet in a browser (http://rob.kohina.net/javastream), it plays and shows up in the PulseAudio Volume Control as "ALSA plug-in [java]." It seems to be working correctly, because I can simultaneously play Java, Flash, and Rhythmbox, etc., and they all show up in the PulseAudio Volume Control.

Edit: I tried a suggestion to add these lines to sound.properties after downloading a couple files (libpulse-java.so and pulse-java.jar)
Code: Select all
javax.sound.sampled.Clip=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider
javax.sound.sampled.Port=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider
javax.sound.sampled.SourceDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider
javax.sound.sampled.TargetDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider

which causes this error in subsonic.log whenever I play a song:

Code: Select all
[2013-03-27 17:15:11,605] ERROR JukeboxService - Error in jukebox: javax.sound.sampled.LineUnavailableException
javax.sound.sampled.LineUnavailableException
   at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openImpl(PulseAudioMixer.java:714)
   at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:588)
   at org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:584)
   at org.classpath.icedtea.pulseaudio.PulseAudioMixer.open(PulseAudioMixer.java:579)
   at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:95)
   at org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:75)
   at org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:90)
   at net.sourceforge.subsonic.service.jukebox.AudioPlayer.<init>(AudioPlayer.java:61)
   at net.sourceforge.subsonic.service.JukeboxService.play(JukeboxService.java:112)
   at net.sourceforge.subsonic.service.JukeboxService.updateJukebox(JukeboxService.java:80)
   at net.sourceforge.subsonic.ajax.PlayQueueService.convert(PlayQueueService.java:361)
   at net.sourceforge.subsonic.ajax.PlayQueueService.convert(PlayQueueService.java:354)
   at net.sourceforge.subsonic.ajax.PlayQueueService.doPlay(PlayQueueService.java:136)
   at net.sourceforge.subsonic.ajax.PlayQueueService.play(PlayQueueService.java:118)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:601)
   at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:740)
   at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:744)
   at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:593)
   at org.directwebremoting.dwrp.BaseCallHandler.handle(BaseCallHandler.java:90)
   at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:120)
   at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:141)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
   at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
   at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:166)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:173)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
   at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
   at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
   at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at net.sourceforge.subsonic.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:43)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at net.sourceforge.subsonic.filter.ParameterDecodingFilter.doFilter(ParameterDecodingFilter.java:54)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at net.sourceforge.subsonic.filter.BootstrapVerificationFilter.doFilter(BootstrapVerificationFilter.java:54)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:722)
spookybathtub
 
Posts: 110
Joined: Thu Oct 07, 2010 7:13 am

Re: Play jukebox on PulseAudio

Postby SteveW » Fri May 24, 2013 12:17 pm

I would just like to note, that I have tried OpenJDK and the Oracle JRE and didn't get it to work with either.

I had a suspicion that it was caused by Java, I thought it may have been a group permissions issue, since Subsonic runs as another user and may not have permissions to access the audio subsystem. I simply ran out of ideas though.

On Oracle's JRE, I get Subsonic to confirm it's playing the audio, but I hear no sound and nothing shows up in Pulse, but using OpenJDK, the Subsonic audio app just doesn't play the tracks at all.
SteveW
 
Posts: 6
Joined: Thu Jan 12, 2012 2:12 pm


Return to Help

Who is online

Users browsing this forum: No registered users and 30 guests