Under The Microscope

Archive for March, 2013

Piezo 1.2.2 Adds Full Retina Support

Piezo IconOur charmingly simple audio recorder Piezo has just received its first update in quite some time. This update takes care of some minutia, including correcting a very rare crash, as well as signing the application for Apple’s Developer ID program, the last of our paid apps to need this update. More importantly, however, it now offers full Retina support.

Piezo's Retina UIPiezo’s new Retina UI (scaled down slightly to fit!)

Piezo marks our second app with full Retina support, along with our audio editor Fission. While we’ve made small Retina-related improvements in our other apps, we don’t yet have full Retina support in Airfoil, Audio Hijack Pro, or Nicecast. That’s likely to come in their next major updates (versions 5, 3, and 2, respectively), which are still in the planning stages. Stay tuned though – as more machines, and more users gain Retina quality visuals, we’ll certainly want to be there!

For now, you can get version 1.2.2 from the Piezo page, or via the Mac App Store. It’s a free update, so be sure to grab it now.

Airfoil for Windows 3.4 Brings Improved Audio Capture

Airfoil for Windows IconIt’s been a few months since Airfoil for Windows last saw an update, but we’ve been hard at work on refining its underpinnings. Our audio streamer is more popular than ever, so improving things behind the scenes is definitely a worthwhile investment. Today, we’re happy to unveil Airfoil for Windows 3.4, the latest and greatest way to stream audio from Windows all around your house. To download the newest version (it’s a free update), just head over to the Airfoil for Windows page. To learn more about the technical details of this update, read on.

A Major Update to Instant On

After much effort and testing, the latest version of Airfoil for Windows now includes a major update to Instant On, the built-in component to capture audio seamlessly. When Airfoil was first unveiled, its ability to capture audio usually required the quitting and re-opening of your source app. To work around the need for that cumbersome relaunching, we created Instant On, a technology to allow Airfoil to grab audio from applications instantly. While this worked well, there are some applications that don’t produce audio at all, others that don’t produce audio you’d want to capture, and some which just don’t work properly when Instant On is running.

With our latest update, Instant On now affects only a curated whitelist of audio applications. This list contains the most common applications our customers use with Airfoil for Windows, including Foobar 2000, Spotify, Chrome, Firefox, and more. You can view and edit the Application List at any time in Airfoil’s Preferences window. Any applications on this list won’t need to be re-launched when Airfoil captures audio from them.

Instant On's Application List

Airfoil’s Instant On Whitelist

When you attempt to intercept audio from a running application that isn’t yet on the approved list, Airfoil will offer to add it to the list, so future relaunches won’t be necessary.

Of course, Instant On is still entirely optional, just as before. For the best experience, we definitely recommend activating it. To do so, just click the “Enable Instant On” checkbox in Airfoil Preferences window:

Airfoil's Preferences

With Instant On, the need for Airfoil to relaunch running applications to capture their audio vanishes, and things work as smoothly as possible. Best of all, with the new whitelist, issues that were once rare will disappear completely.

And More

This update also marks the first release where Airfoil is fully scriptable, allowing for control by other applications. For more details on scripting Airfoil, see this link. As usual, this update also includes has a handful of small improvements and fixes, and we always recommend using the latest version. So update your copy of Airfoil for Windows now!

Scripting Airfoil for Windows 3.4 (And Up)

Developers have often asked for the ability to interface with Airfoil for Windows via some kind of scripting interface. There was very limited support for this in version 2.x of Airfoil for Windows, but there was always more we wanted to do with it.

Now in Airfoil for Windows 3.4 we have full out-of-process COM scripting support, which should allow 3rd party apps in just about any language (any language that supports COM that is), to interact with and control Airfoil for Windows.

For example, suppose you wanted to get a list of all recent sources using Windows JScript:


var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil");

var recentSources = airfoilApp.GetRecentSources();
for(var i = 0; i < recentSources.Count(); i++)
{
	var audioSource = recentSources.Item(i);
	WScript.Echo("Recent source " + i + " is " + audioSource.Name());
}

Or maybe you'd like to see if a certain application is running, and if it is, tell Airfoil for Windows to start intercepting its audio:


var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil");

var runningSources = airfoilApp.GetRunningSources();
for(var i = 0; i < runningSources.Count(); i++)
{
	var audioSource = runningSources.Item(i);
	WScript.Echo("Running source " + i + " is " + audioSource.Name());
	
	// The Id() method returns the full path to the source, so 
	// we have to look at just the ending.
	if(endsWith(audioSource.Id().toLowerCase(),"firefox.exe"))
	{
		airfoilApp.SetCurrentSource(audioSource);
	}
}

function endsWith(str, suffix) 
{
    return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

Interfacing with and controlling remote speakers is just as easy. This script enumerates the list of remote speakers that Airfoil for Windows can see, adjusts their volume, and then connects to any speaker that isn't currently connected:


var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil");
var speakerCollection = airfoilApp.GetSpeakers();

for (var i = 0; i < speakerCollection.Count(); i++)
{
	var speaker = speakerCollection.Item(i);
	WScript.Echo("Speaker " + i + " is " + speaker.Name() + "\n");
	
	// Set the volume to half and connect if it isn't already connected
	speaker.SetVolume(0.5);
	if(!speaker.Connected())
	{
		speaker.Connect();
	}
}

Finally, you can also request to be notified of various events, including when source metadata changes:


var airfoilApp = WScript.CreateObject("RogueAmoeba.Airfoil", "AirfoilApp_");
var metadataProvider = airfoilApp.GetCurrentMetadata(); 

function AirfoilApp_OnMetadataChanged()
{
	WScript.Echo("Metadata Was Changed.");
	if(metadataProvider.ProvidesTrackMetadata())
	{
		WScript.Echo("Current track: " + metadataProvider.Title());
	}
}

There is plenty of other functionality provided by the scripting interface which isn't shown in the above examples. You can find the complete documentation of the API here:

Airfoil for Windows API Documentation and Examples

If you create a script or application to control Airfoil, be sure to let us know!