AIM Music Link

Share Your Music with Your Buddies


The latest version of AIM Music Link is 4.1.0.0. You can download AIM Music Link here.
To read what is new in this release check out the AIM MusicLink history.

What is AIM Music Link?

AIM Music Link is an Open AIM plugin written in C++ and COM/ATL that will set your AIM status based on the music you are listening from 7 supported media players. The AIM status can be viewed by you and your buddies in the buddy list. AIM Music Link gets the current playing song from the following media players:
PlayerVersion
  iTunes versions4.0+
  WinAmp versions3.0+
  AOL Radio + CBS
  ShoutCast Radio
  XM Player version3.4.2.1+
  MediaMonkey version2.0+
  Windows Media Player10+
  Yahoo Jukebox
  LAUNCHcast Radio via Yahoo Jukebox
  Real Player
  Songbird version0.5+
  Foobar version0.9.5.4+
AIM Music Link will check the media players in the order that is shown above. For example, if you have iTunes and WinAmp running at the same time, iTunes songs will win out over WinAmp.

If you have questions about AIM MusicLink please contact me annonymously below.

AIM Music Link requirements

  • Windows 2000, XP, Vista
  • AIM 6.0, 6.1, 6.5, 6.8*
  • Any Open AIM clients that support plugins**
  • The following music players :
  • PlayerVersion
      iTunes versions4.0+
      WinAmp versions3.0+
      XM Player version3.4.2.1+
      MediaMonkey version2.0+
      Windows Media Player10+
      Yahoo Jukebox
      Real Player
      Songbird version0.5+
      Foobar version0.9.5.4+
      AOL Radio + CBS
      ShoutCast Radio
      LAUNCHcast Radio via Yahoo Jukebox
* - AIM 6.8+ is the prefered version and is the only supported version of AIM for AIM Music Link
** - In Addition to AIM Windows, Open AIM based clients like AIM Lite that support plugins will load AIM Music Link.

AIM Music Link FAQs

Q: How do I access the AIM MusicLink preferences?
A: AIM MusicLink preferences can be found via the Actions menu at the bottom of the buddy list.


Q: How can I turn on or off AIM MusicLink logging?
A: Open the AIM MusicLink preferences and choose the appropriate check box. AIM MusicLink supports a wide variety of preferences as you can see below.
Q: Can I change the format of the status from "Artist - Song" to "Song - Artist"?
A: Open the AIM MusicLink preferences and choose the check box circled in red below.


Q: How can AIM MusicLink be uninstalled?
A: To uninstall AIM MusicLink, exit AIM, then go to Add/Remove Programs via the Control Panel and choose AIM MusicLink. Failure to exit AIM will cause AIM MusicLink to be left behind, since AIM still has MusicLink loaded. If you do not want to use Add/Remove Programs, you can uninstall by going to c:/Program Files/AIM MusicLink and choose unwise.exe.

Q: Why does AIM MusicLink not work with iTunes?
A: Make sure iTunes is installed in its default location "c:/program files/itunes".

AIM Music Link versions

The latest version of AIM Music Link is 4.1.0.0. You can download AIM Music Link at the AIM Galery or here. Older versions are available below, but users download these older versions at their own risk as these older version may not work with the latest AIM client.

AIM Music Link change log

Version 4.1.0.0
Release Date - December 24, 2008
Download Version 4.1.0.0
  • AIM MusicLink now supports an option to set your status in "Artist - Song" format and "Song - Artist" format.
  • Fixed a long standing bug with Windows Media Player not reporting the correct song. This was due to an issue with the Windows Media Player API passing incorrect data in the MediaChange event. I discovered a work around this Microsoft bug.
  • Fixed bug with RealPlayer song status being set with a missing leading character.
  • Fixed bug with Uninstaller not unregistering the AIM MusicLink dlls.
----------------------------------------------------------------------------------------
Version 4.0.0.0
Release Date - August 1, 2008
Download Version 4.0.0.0
  • Added support for Foobar2000 version 0.9.5.4+
  • Added auto-upgrade support.
  • Updated the AIM MusicLink preferences
    • Added a preference to turn off checking for AIM MusicLink Updates
    • Added a button to check for update immediately
    • Added a button to reset status, this can be used to clear stale data when a player crashes or closes at a bad time
  • Fixed bug where log folders where being written even when user did not want logging.
  • Added support for writing current song to the AvTrack object in OpenAIM.
  • AIM MusicLink is now injected into the buddy feed.
----------------------------------------------------------------------------------------
Version 3.0.0.0
Release Date - July 7, 2008
Download Version 3.0.0.0
  • Added support for the XM Player
  • Fixed bug with ITunes where player state was not being honored. ITunes songs will only be sent if ITunes is actually playing the song.
  • Fixed issue where Windows Media Player reported a song playing even when the player was not loaded. If Windows Media Player crashes during playing of a song incorrect data may still be reported.
----------------------------------------------------------------------------------------
Version 2.2.0.0
Release Date - May 8, 2008
Download Version 2.2.0.0
  • Added a music note next to song title and artist in AIM Status Message
  • Fixed Songbird support by releasing a new Songbird extension for Songbird version 0.5 and above.
  • Fixed MediaMonkey support bug where MediaMonkey songs were not being found in MediaMonkey version 3.0 and above
----------------------------------------------------------------------------------------
Version 2.1.0.5
Release Date - January 11th, 2008
Download Version 2.1.0.5
  • Added support for generating AIM Music Link Logs
    • Logs are saved to C:\Documents and Settings\\My Documents\AIMMusicLink\\AIM MusicLink Logs
    • Logs can be accessed via the Actions menu at the bottom of the buddy list
  • Added support for AIM 6.8
  • Added support for Windows Media Player 11
  • Added support for WinAmp 5.5
  • Added support for iTunes 7.x
  • Added a check for iTunes location during install and message user that iTunes will not work if its not installed in c:\program files\iTunes.
----------------------------------------------------------------------------------------
Version 2.0.0.4
Release Date - November 8, 2007
Download Version 2.0.0.4
  • Added Media Monkey support to AIM Music Link bringing the total number of supported players to 7
  • Fixed bug where first letter of the song title and artist was getting cut off
  • Fixed issue when streaming music to WinAmp over a slow connection the text "[Buffering...]" would get set as the current playing song. This was most common with AIM Tunes or Shoutcast
  • Added an about screen for AIM Music Link to show supported media player version and extra info
----------------------------------------------------------------------------------------
Version 2.0.0.2
Release Date - August 28, 2007
Download Version 2.0.0.2
  • Re-introduced setting current playing song in the AIM Profile/Buddy Info via the %song tag
  • Profile support is off by default
  • Fixed issue where profile background color was not being honored properly
----------------------------------------------------------------------------------------
Version 2.0.0.1
Release Date - July 19, 2007
Download Version 2.0.0.1
  • Added Songbird 0.2 support to AIM Music Link bringing the total number of supported players to 6
  • Removed support for setting current playing song in profile to avoid profile corruption
  • Removed list view of all buddies with status being set. The AIM 6.5 Beta 2 client shows status inline and this extra Boxely UI window is superflous.
  • Removal of the Boxely UI dialog allows for ALL Open AIM clients to load AIM Music Link; the plugin will now work with AIM Pro, AIM Lite and other Open AIM clients
  • Preferences are now accessible via the Actions Menu at the bottom of the buddy list
----------------------------------------------------------------------------------------
Version 1.0.0.5
Release Date - March 29, 2007
Download Version 1.0.0.5
  • Fixed bug where preference honoring hyperlinking of song in profile was not being remembered
  • Fixed issue where first character of song from Yahoo Jukebox was being cut off
----------------------------------------------------------------------------------------
Version 1.0.0.0 (Refreshed to version 1.0.0.4)
Release Date - February 16, 2007
Download Version 1.0.0.4
  • First release of AIM Music Link, formerly known as MyPlaylist when it was part of AIM Gadgets and prior to that JAMS
  • Added User Interface to show all buddies who have an AIM status set
  • Added Windows Vista Support
  • Added support for AIM 6.1
  • Added ability to listen to what your buddies are listening to by adding hyperlink to profile and setting AccSessionProp_StatusLink that points to the iTunes store
  • Added support when double clicking on song status in User Interface will launch the iTunes store
----------------------------------------------------------------------------------------

The code behind AIM Music Link

AIM Music Link takes advantage of the Open AIM APIs available at http://open.aim.com. Anyone can use the APIs that I am using to build AIM Music Link. Below are code samples in a variety of programming languages that Open AIM supports. The code samples will show how to set a user's profile/buddy info as well as their status message and the url that the status message may point to. The code samples will not show how to obtain music information from any of the supported AIM Music Link players.

AIM Status message dates back to 2003, when we added OSCAR protocol to support Apple's iChat client setting a user's status message for display in the iChat Buddy List. Soon after we added additional protocol for the "Status Link" which allowed developers to set a URL associated with the status message.

C++ Example:

HRESULT CAimMusicLink::SetProfileAndStatusMsg(const CComBSTR& song, const CComBSTR& url)
{
    CComBSTR profile, plain, type;
    CString xSong(song);
    CComVariant vProfile;
    HRESULT hrProfile = m_spiSession->get_Property(AccSessionProp_Profile, &vProfile);
    if (hrProfile == ACC_E_NOT_LOGGED_ON)
        return S_FALSE;
    if (vProfile.vt == VT_DISPATCH)
    {
        CComQIPtr spiIm(vProfile.pdispVal);
        if (spiIm)
        {
            spiIm->GetConvertedText(OLESTR("text/plain"), &plain);
        }
        
        CString work;
        if (plain)
            work = plain;
        work.TrimLeft();    
        if (work.IsEmpty()) 
        {
            // no profile, write a nice sentence
            work.Format(_T("I'm currently listening to %s."), xSong);
            type = OLESTR("text/x-aolrtf");
        }
        
        // copy your work back into the profile
        profile = work;
        // Set the new profile
        CComPtr spiProfile;
        if (SUCCEEDED(m_spiSession->CreateIm(profile, type, &spiProfile)))
            m_spiSession->put_Property(AccSessionProp_Profile, CComVariant(spiProfile));        
    }
    
    // now lets set the status message
    CString cSong(song);
    if (cSong.GetLength() > 0)
    {
        CString cNote(_T("\u266B"));
        cNote += " ";
        cNote += cSong;        
        CComBSTR finalSong(cNote);
        hr = m_spiSession->put_Property(AccSessionProp_StatusTextLink, CComVariant(url));
        hr = m_spiSession->put_Property(AccSessionProp_StatusText, CComVariant(finalSong));
    }
}

C# Example:

public void SetProfileAndStatusMsg(string song, string url)
{
    string profile, plain, type = "";
    string xSong = song;
    object vProfile = "";
    try
    {
        vProfile = s.get_Property(AccSessionProp.AccSessionProp_Profile);
    }
    catch (COMException e)
    {
       if (e.ErrorCode == (int)AccResult.ACC_E_NOT_LOGGED_ON)
           return;
    }
    
    IAccIm im = (IAccIm) vProfile;
    plain = im.GetConvertedText("text/plain");
    
    string work = "";
    if (plain.Length > 0)
        work = plain;
    work.Trim();    
    if (work.Length > 0) 
    {
        // no profile, write a nice sentence
        work = string.Format("I'm currently listening to {0}.", xSong);
        type = "text/x-aolrtf";
    }
        
    // copy your work back into the profile
    profile = work;
    // Set the new profile
    IAccIm piProfile = s.CreateIm(profile, type);
    s.set_Property(AccSessionProp.AccSessionProp_Profile, (object)piProfile);        
    
    // now lets set the status message
    string cSong = song;
    if (cSong.Length > 0)
    {
        string cNote= "\u266B";
        cNote += " ";
        cNote += cSong;        
        s.set_Property(AccSessionProp.AccSessionProp_StatusTextLink, (object)url);
        s.set_Property(AccSessionProp.AccSessionProp_StatusText, (object)cNote);
    }
}

VB Example:

Public Sub SetProfileAndStatusMsg(ByVal song As String, ByVal url As String)
    Dim profile As String,plain As String,type As String =  "" 
    Dim xSong As String =  song 
    Dim vProfile As Object =  "" 
    Try
        vProfile = s.get_Property(AccSessionProp.AccSessionProp_Profile)
    Catch e As COMException
       If e.ErrorCode = CType(AccResult.ACC_E_NOT_LOGGED_ON,Integer) Then
           Return
       End If
    End Try
 
    Dim im As IAccIm = CType(vProfile, IAccIm)
    plain = im.GetConvertedText("text/plain")
 
    Dim work As String =  "" 
    If plain.Length > 0 Then
        work = plain
    End If
    work.Trim()    
    If work.Length > 0 Then
        ' no profile, write a nice sentence
        work = String.Format("I'm currently listening to {0}.", xSong)
        type = "text/x-aolrtf"
    End If
 
    ' copy your work back into the profile
    profile = work
    ' Set the new profile
    Dim piProfile As IAccIm =  s.CreateIm(profile,type) 
    s.set_Property(AccSessionProp.AccSessionProp_Profile, CType(piProfile, Object))        
 
    ' now lets set the status message
    Dim cSong As String =  song 
    If cSong.Length > 0 Then
        Dim cNote As String =  "\u266B" 
        cNote += " "
        cNote += cSong        
        s.set_Property(AccSessionProp.AccSessionProp_StatusTextLink, CType(url, Object))
        s.set_Property(AccSessionProp.AccSessionProp_StatusText, CType(cNote, Object))
    End If
End Sub

Javascript Example:

function SetProfileAndStatusMsg(song, url)
{
    var xSong = song;
    var vProfile = session.Profile;
    
    var plain = vProfile.getConvertedText("text/plain");
    var type;
    if (plain.length == 0)
    {
        work = "I'm currently listening to " + xSong " ".;
        type = "text/x-aolrtf";
    }
    var im = s.createIm(work, type);
    session.Profile = im;
    
    var cSong = "\u266B" + " " + song;
    session.StatusText = cSong;
    session.StatusTextLink = url;
}

AIM MusicLink is property of Gregory Cypes and AOL LLC