Airfoil Speakers 2.6.0 fails with PulseAudio
Actually, two bugs; most important first:
I was running Airfoil Speakers 1.0.0 on my Debian media center running PulseAudio (Mono version 1.9.1) -- worked like a charm. Decided to buy Airfoil! Then I upgraded to Airfoil Speakers 2.6.0, and audio skips like nobody's business (more skip than audio). Only debug output: "couldn't get delay" So I either need Airfoil Speakers version 1.0.0 again (not available on the website any more?), or I need my money back.
Next! Version 2.6.0 of Airfoil Speakers crashes upon connection if you don't have X (i.e. DISPLAY is not set), *even if* "--gui=false" is set (this was not the case in 1.0.0). Here's the exception trace:
$ airfoilspeakers --gui=false --debug 1000
Logged failed to initialize
options: /usr/lib/airfoilspeakers/AirfoilSpeakers.exe --gui=false --debug 1000
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.ArgumentNullException: Could not open display (X-Server required. Check you DISPLAY environment variable)
Parameter name: Display
at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000]
at System.Windows.Forms.XplatUIX11..ctor () [0x00000]
at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000]
at System.Windows.Forms.XplatUI..cctor () [0x00000] --- End of inner exception stack trace ---
at System.Windows.Forms.Timer.set_Enabled (Boolean value) [0x00000]
at System.Windows.Forms.Timer.Start () [0x00000]
at (wrapper remoting-invoke-with-check) System.Windows.Forms.Timer:Start ()
at RogueAmoeba.AirTunes.Server.ConnectionHealthWatcher.CheckHealth () [0x00000]
at RogueAmoeba.AirTunes.Server.ConnectionHealthWatcher+<>c__CompilerGenerated3.<>c__AnonymousMethod10 () [0x00000]
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[])
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] --- End of inner exception stack trace ---
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000]
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000]
at System.Delegate.DynamicInvokeImpl (System.Object[] args) [0x00000]
at System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) [0x00000]
at System.Delegate.DynamicInvoke (System.Object[] args) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.AsyncInvoke.Run (Boolean sync) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.InvokableMessage.Run (Boolean sync) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.RunLoop.ProcessMessage (RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.Message m, System.Boolean& quit) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.RunLoop.Run () [0x00000]
at RogueAmoeba.AirfoilSpeakers.Glue.AFSApplicationContext_CmdLine.Run () [0x00000]
at RogueAmoeba.AirfoilSpeakers.Program.Main () [0x00000]
** (/usr/lib/airfoilspeakers/AirfoilSpeakers.exe:31283): WARNING **: _wapi_handle_unref: Attempting to unref unused handle 0x411
I was running Airfoil Speakers 1.0.0 on my Debian media center running PulseAudio (Mono version 1.9.1) -- worked like a charm. Decided to buy Airfoil! Then I upgraded to Airfoil Speakers 2.6.0, and audio skips like nobody's business (more skip than audio). Only debug output: "couldn't get delay" So I either need Airfoil Speakers version 1.0.0 again (not available on the website any more?), or I need my money back.
Next! Version 2.6.0 of Airfoil Speakers crashes upon connection if you don't have X (i.e. DISPLAY is not set), *even if* "--gui=false" is set (this was not the case in 1.0.0). Here's the exception trace:
$ airfoilspeakers --gui=false --debug 1000
Logged failed to initialize
options: /usr/lib/airfoilspeakers/AirfoilSpeakers.exe --gui=false --debug 1000
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: An exception was thrown by the type initializer for System.Windows.Forms.XplatUI ---> System.ArgumentNullException: Could not open display (X-Server required. Check you DISPLAY environment variable)
Parameter name: Display
at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) [0x00000]
at System.Windows.Forms.XplatUIX11..ctor () [0x00000]
at System.Windows.Forms.XplatUIX11.GetInstance () [0x00000]
at System.Windows.Forms.XplatUI..cctor () [0x00000] --- End of inner exception stack trace ---
at System.Windows.Forms.Timer.set_Enabled (Boolean value) [0x00000]
at System.Windows.Forms.Timer.Start () [0x00000]
at (wrapper remoting-invoke-with-check) System.Windows.Forms.Timer:Start ()
at RogueAmoeba.AirTunes.Server.ConnectionHealthWatcher.CheckHealth () [0x00000]
at RogueAmoeba.AirTunes.Server.ConnectionHealthWatcher+<>c__CompilerGenerated3.<>c__AnonymousMethod10 () [0x00000]
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[])
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] --- End of inner exception stack trace ---
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000]
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000]
at System.Delegate.DynamicInvokeImpl (System.Object[] args) [0x00000]
at System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) [0x00000]
at System.Delegate.DynamicInvoke (System.Object[] args) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.AsyncInvoke.Run (Boolean sync) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.InvokableMessage.Run (Boolean sync) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.RunLoop.ProcessMessage (RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.Message m, System.Boolean& quit) [0x00000]
at RogueAmoeba.AirfoilSpeakers.SimpleRunLoop.RunLoop.Run () [0x00000]
at RogueAmoeba.AirfoilSpeakers.Glue.AFSApplicationContext_CmdLine.Run () [0x00000]
at RogueAmoeba.AirfoilSpeakers.Program.Main () [0x00000]
** (/usr/lib/airfoilspeakers/AirfoilSpeakers.exe:31283): WARNING **: _wapi_handle_unref: Attempting to unref unused handle 0x411
1
person has this question
I have this question, too!
Tell me when someone answers.
The more people who ask this question, the more it gets noticed.
The more people who ask this question, the more it gets noticed.
Create a customer community for your own organization
Plans starting at $19/month
-
Inappropriate?OK, more information!
It seems this first bug is intricately tied to the second! I managed to find two previous versions of Airfoil Speakers for Linux archived on the Internet (0.9.2 and 1.0.0). Neither of these work when running under a remote X session (e.g. "ssh -X <mediabox>"), but work swimmingly when run *without* X available (e.g. "ssh <mediabox>"). The immediate issue is that 2.6.0 will not run without X available. Now why Airfoil Speakers for Linux exhibits this behavior is beyond me. Maybe it tries to talk to the X server in the process of determining delay, even when --gui=false is specified, but falls back to some other method when X is honestly not available? Strange behavior nonetheless! And definitely something that should be fixed.
FYI, when using 2.6.0, Airfoil Speakers for Linux *will* work if PulseAudio is turned off, and Airfoil Speakers for Linux is allowed to talk directly to the ALSA device. But that is sub-optimal for me. So PulseAudio has *something* to do with it, but that's not everything. And newer distributions use PulseAudio by default, so this should be a supported configuration.</mediabox></mediabox>
I’m unsure
-
Inappropriate?Hi Slick,
Can you try the builds here: http://bigblueamoeba.com/lab/public/
and let me know if that helps.
David -
Inappropriate?This version does indeed run without X, so it solves that issue.
The next problem is PulseAudio. If I try to capture a certain application's audio (e.g. Firefox), Airfoil will tell me that I need to restart the application -- but this never works. Meanwhile, on the AirfoilSpeakers side, we see the error message "couldn't get delay." The only way to get audio to work is the capture System Audio on the Airfoil side -- but this is not satisfactory, as it does not account for A/V delay.
As more and more Linux distributions move to using PulseAudio as their default audio system, this will be more of a problem. AirfoilSpeakers for Linux will likely need to support querying PulseAudio for the audio delay.
I’m undecided
-
Inappropriate?I just installed the Airfoil Speakers debian package off your website on my ubuntu system, was having trouble when running without X as well, grabbed the 2.6.0-3 package above and it worked for me too! Thanks!
I’m happy
Loading Profile...



