Apple's iTunes is a powerful audio library manager and player now available for both Windows and Mac. Its feature set is endless and expanding, and, thankfully, through COM, third-party developers can access a good portion of this, even through the .NET Framework and its interop capabilities.
I have built a simple demo application to demonstrate a variety of the features that are available using the iTunes COM interface. This application, by no means, represents the full power of the interface, but is designed to show the different capabilities. Apple's developer web site has an SDK for the complete COM interface.
My application is a system tray utility for controlling iTunes easily and displaying the currently play track. It calls methods, changes properties, and receives events all through COM. It implements the basic functionality of playing, pausing, stopping and changing the currently playing track as well as popping up a window when the track changes.
Instantiating the iTunes Application
In order to access the features that iTunes has to offer, you must first add a reference to the iTunes COM Library to your project. Right click on your project in the Solution Explorer, choose "Add Reference...". Select the COM tab and find the "iTunes 1.1 Type Library", click "Select" and finally click "OK". You will now see "iTunesLib" under your References list for that project.
Next, in any files that you want to communicate with iTunes in, add the following directive:
In order to control iTunes you must create a new instance if the controlling interface. This interface allows your program to communicate with and control (and be controlled by) and already open instance of iTunes.
private myiTunes = new iTunesAppClass();
myiTunes member, you can access functions like
Quit(). If for some reason iTunes is closed and your application continues to try and communicate with it, a
COMException will be thrown.
Receiving Events from iTunes
myiTunes member also allows access to certain events like when a new track starts playing, when the current one stops, etc. To specify a new event handler for one of these events,
iTunesLib uses the same delegate model that all other events in C# use:
myiTunes.OnPlayerPlayEvent += new _IiTunesEvents_OnPlayerPlayEventEventHandler(
protected void myiTunes_OnPlayerPlayEvent(object iTrack)
iTrack parameter provides information about the currently playing track, but in order to get at this information, we must first cast the
iTrack into an
string myArtist, myName;
IITTrack myTrack = (IITTrack) iTrack;
myArtist = myTrack.Artist;
myName = myTrack.Name;
This is by no means all of the information available in the
IITTrack interface. More information is available in Apple's documentation.
I hope that I have merely whetted you appetite in terms of what can be done with controlling Apple's powerful audio application, iTunes. The possibilities are endless: you can batch convert your media to a different format, organize and manage playlists, and batch rename tracks, among other things. Consult Apple's SDK for more information. It is vague in terms of examples, however it contains information about all of the interfaces, what they do, and what members and functions are accessible through each.
Furthermore, I hope I have introduced you to the idea of COM (component object module) and its potentials within your own work. Whether utilizing other COM components functionality or creating your own COM components, I think you will find that it can be endlessly useful, under the right circumstances.
This software is known to work with the following configuration:
- Microsoft Windows XP SP1 or later
- Microsoft .NET Framework 1.1
- Apple iTunes 4.6
The software may possibly work under different configurations, but this has not be verified to date.
AnimateWindow WinAPI function does not work properly for fading in the popup display.
- Popup window timer does not reset when track is changed while popup is showing.
- 07/14/2004 - Article Released