Pages

Tuesday, 19 June 2007

Linked on allaboutsymbian.com!

I indirectly made it to the front page of allaboutsymbian.com. This is pretty cool (to me).

And Nokia has also noticed: an eagle-eyed blogger has noted an official E70 profile! C'mon Nokia cover the whole range.

Note that for some people there still are reasons to customise your profile - for example, to bypass the transcoding of .m4a files or to customise the bitrate of the transcode (I'll show you how soon). I'll try to keep you posted.

Friday, 15 June 2007

Nokia stuff: What's next?

Brilliant effort everyone -- in less than a week I've got submission for almost the entire E-Series range plus more. The comments are worth reading on some of these posts for the phone information that Nokia Media Transfer will work for. Proves to me that Nokia's compatibility warning for the tool is purely political. Let's see if they will get their act together and support more phones out of the box soon.

Also we've had iTunes Plus fix - I've been working this workflow to death on my own music. Commenter Bill reports that the Perl libraries (Audio::M4P::QuickTime) have been updated and AtomicParsley is aware of the change made by Apple. This means that there might be a more robust way than mine to fix the songs soon. (Note that I don't expect AtomicParsley to accept my non-standard metadata hack, so don't go looking for that just yet...)

I'm going to be working the phone angle still. For example I'm looking at right now an AppleScript (sorry Windows users) that will work from inside iTunes to fix selected music. I'm also working on making the iTunes support in Nokia Media Transfer even better (for example, you'll notice I haven't offered a way to change Nokia's default bitrate when it transcodes songs/videos, I'm working on that).

What a great way to (somewhat suddenly) kickstart the blog too. And it proves that I need to get a better webhost -- I apologise for inflicting the GeoCities two-click download process on everyone, but that's all I've got right now.

Wednesday, 13 June 2007

Testing E90 profile (or What to do sans XCode)

Update #1: Juha reports this is working, so I've moved it into the other list.

I am uploading a untested E90 profile for JuhaN in the comments.

This should work on an E90, but I'm yet to see (I just have the one phone...). So for now treat it with caution.

However it brings up the point that I assumed everyone who wanted would simply have XCode. The main reason why you need XCode is because Nokia's profiles are in binary format.

I believe Nokia's tool will accept either format (though I've been superstitious and left them all as binary).

Once they are text-based, you will be able to (carefully!) edit the profile with TextEdit or similar.

To make them text-based, run plutil -convert xml1 nameof.profile and plutil -convert binary1 nameof.profile from Terminal. Note that you won't need to do this on this particular testing profile (it's been done). I assume plutil came with Mac OS X and not XCode but I'm not sure.

Grab the test profile on the linked page.

Update 12/08/2010: Changed link to GeoCities mirror.

Tuesday, 12 June 2007

Administrator: Okay my bad...

I'm working on fixing an issue with the installer that I provided for the E61.

As I noted, it requires an Administrator password.

This should be unnecessary, and might be a cause for NMT to not recognise phones right away. If you have problems simply move the e61.profile file from /Library/Application Support/Nokia Media Transfer/Profiles off the Macintosh HD to the same folder from your home folder.

This really only affects the initial E61 profile -- the rest you currently have to copy yourself anyway.

More E-Series Profiles for Nokia Media Transfer

Update #1: Adding E65 profile...
Update #2: Adding E50, E90 profiles...

I promised that if you send them I'll post them for everyone. I've got to go to work soon so I can't bundle them up nicely however here's what I've received: thanks and keep e-mailing them in...

  • Nokia E61 (my version)

  • Nokia E61i (thanks Leo!)

  • Nokia E65 (thanks Adrian!)

  • Nokia E70-1 (thanks Alice!)

  • Nokia E50 (thanks Harshal!)

  • Nokia E90 (thanks Juha!)


I've also re-uploaded the E61 one without the installer so it can be more easily modified (and if the installer doesn't work).
I'll update this post when I've got more (or when I get better download space) - for now I point you at my GeoCities page for the download links.

Update 12/08/2010: Changed link to GeoCities mirror.

Sunday, 10 June 2007

Update: Metadata patch bug fixes

I have fixed a couple of bugs in the metadata syncing patch to AtomicParsley:

  • It will now prevent you from having duplicate Nokia/3GP metadatas if you re-run the tool on the same file, it will instead update the file (removing the old metadata).

  • I've fixed a bug with the use of --overWrite when you run AtomicParsley from the same folder as the music file.


I will update the link in the previous entry so people don't get caught out.

Unified iTunes and Nokia Metadata

Okay as promised, I have a way to get the most out of syncing your music with your Nokia phone.

The Nokia E61 (and I expect all E-series and possibly earlier N-series models) does not read iTunes-style metadata. This means your fancy new fixed iTunes Plus tracks only come up in Music Player using their file name. Which is a bit of drag.

With a bit of nasty hack-work (again!) we can fix this.

Update #1: Fixed some bugs in the patch, new one uploaded.

Nokia Music Player supports (in MPEG4 containers) 3GP-style metadata, including at least:

  • Title (song title)

  • Performer (artist)

  • Genre



The bad news is, it's not easy to get that stuff into the file itself, because having both in there at the same time is non-compliant/non-standard but hey it works and you've got a backup right? (Apple reminds you, now I'm reminding you too.)

I have found that in the same way that Nokia Music Player gracefully ignores iTunes metadata, iTunes also gracefully hides 3GP metadata. Which means all we need is a simple way to update the 3GP metadata. I treat the iTunes metadata as the primary source - after all it's the one you can edit (ie, via Get Info in iTunes) and its the one that's set by the iTunes Store and its the only one there at the beginning.

I've made a patch to the AtomicParsley command line tool that will copy across the above fields from whatever iTunes has them set to.

Firstly at this point, I'm not going to package this one up nicely yet - it's 'on the edge' and could dearly use more testing but for those brave types like me, you can grab the unified diff patch (from the Download link on that page), apply it to the AtomicParsley v0.9.0 source code, recompile (sh build in the AtomicParsley directory) and use it (obviously you'll need Xcode Mac fans, and Windows fans, see the AtomicParsley instructions - I'm not testing there).

Once that's done it's simple to use:

path/to/AtomicParsley --3gp-help
path/to/AtomicParsley path/to/Music/file.m4a --nokia

And the tags will be duplicated. Note that as for all of AtomicParsley the default is to make a copy named something like file-temp-####.m4a. If you're confident that it's working for you, simply add --overWrite to the end of the line. That way you won't confuse iTunes or have to rename the file (because you've already got a backup, right?)

Now when you sync the music with your phone (manually or via Nokia Media Transfer) you should see the Title and Artist (instead of Unknown) in the Now Playing screen and View Details in the Options menu will show the Genre as well. If you update the Music Library, you'll be able to find the music via Title, Artist, and Genre.

Before you ask, I haven't found a way to make Album work properly yet. I suggest that you use Track lists (in the library) to simulate Albums (ie, one track list per album with the tracks listed in order). You can do this directly from iTunes with Playlists using Nokia Media Transfer since that tool converts iTunes Playlists to Track lists for you.

That's enough to make my phone replace my iPod for now, so I'm happy, by all means leave me a comment if there's any issues.

Nokia Media Transfer for E-Series

Nokia seems to have a thing about E vs N.
They are not the only ones - some carriers fall foul of it too.
N-Series unfairly get some fun stuff that us E-Series users don't get offered, officially.

Oftentimes though something can be hacked to make it work. Nokia Media Transfer (at least 1.0 beta) is one of those times.

Update #1: More profiles added from commenters - thanks everyone!
Update #2: Nokia has unofficially pushed out an E70 profile! To get the update simply choose Add Device... from Nokia Media Transfer and click Next (the update lives in /Library/Application Support/Nokia Media Transfer/Profiles).
Update #3: More official support (originally noted here) for E-Series phones -- my Mac has downloaded profiles making some, but not all of the profiles here redundant. The tool downloads E50, E61i, E65, E70 and E90 profiles.

If you go to Nokia's official download page for Nokia Media Transfer, as of this writing almost every N-series phone is supported but no other phones at all. Yet they all share the same OS (on the phone) and roughly the same media components, so this shouldn't be the case.

Not being one to want to miss out a free tool (and knowing that Mac software tends to be more flexible) I mucked around a bit.

If you simply download and run Nokia Media Transfer with, for example an E61 connected via Bluetooth or USB, the Setup Assistant will simply say 'Not supported'. However you'll notice that there is a spinner that says 'Downloading profile updates...', so our phones might become supported. For now though they are not, however that means the profiles are stored somewhere.

The profiles are actually stored in Nokia Media Transfer.app/Contents/Resources/Profiles. However if you want to make a profile, don't put it there. When you've run Nokia Media Transfer at least once, a corresponding folder in Library/Application Support/Nokia Media Transfer/Profiles in your home folder is created. We'll store our profile here.

Now you don't need to follow along with this if you have an E61. I'm going to put my file here for download, but you will have to follow along for other phones. It is downloadable as an installer from here. Simply extract and mount the image, then run the installer, and you're done.

For those of you still following along, first you need a profile to copy from. Use Nokia's device specifications site (if you are unsure) to pick an N-series equivalent to your phone (for the E61 I chose the N73). Go into the application (right-click and choose Show Package Contents) and copy this profile into your Library/Application Support/Nokia Media Transfer/Profiles folder.

Now for the next part you'll need to have installed Apple's Developer Tools (aka Xcode) if you haven't already. The tool we need is Property List Editor. Rename your copied profile (ie, from n73.profile to e61.profile) then select it and select Open With... and navigate to Developer/Applications/Utilities/Property List Editor.

Now in Property List Editor you can change the settings to further match your phone. Here's mostly what I've changed so far:

  • profiles/0/conformanceGuaranteedFileExtensions - added m4a to the array (I'll explain why further down)

  • profiles/0/profileName - change this so it doesn't clash with the other profiles

  • profiles/0/supportedModels/0/modelNames/0 - change this to the correct model name

  • profiles/0/supportedModels/0/modelNumber - change this to Nokia's model number (this is written on the label underneath the battery in the phone - RM-89 for E61)


I also searched through the video entries and changed the 352x288 resolution to the native 320x240 screen resolution of the E61 so videos work too.

The first setting changes Media Transfer's iTunes Plus behaviour - if you've already gone through and used my method of fixing your iTunes Plus songs, they appear in iTunes (and thus to Media Transfer) as .m4a files. We know these files will work with the phone so we tell Media Transfer to simply copy them. Note that if you download new iTunes Plus tracks these will appear to Media Transfer as Purchased tracks, and it will continue to transcode them (otherwise they won't play!), which is the best behaviour. I'd set up a Smart Playlist for iTunes Plus (Kind contains "Purchased AAC") so you know which files you haven't fixed yet.

The remaining settings tell Media Transfer about the model of your phone so that it recognises it.

Now I had a problem where Media Transfer wouldn't recognise my phone after I added the profile, so after saving the file follow these steps:

  1. Quit Property List Editor.

  2. Quit Nokia Media Transfer (and its Setup Assistant) - click Cancel on the Assistant and choose Quit Nokia Media Transfer from the little button in the menu bar.

  3. Go to Library/Application Support/Nokia Media Transfer from your home folder in Finder and delete Devices.plist.

  4. Restart Nokia Media Transfer by double-clicking it, then click it in the menu bar, choose Tools and Settings and then Add Device...

  5. Click Next on the Assistant, then turn Bluetooth on or connect the phone via USB and you should now be able to select your phone.



From this point all of Nokia's instructions should apply to your phone. Note that I unticked the option to make the phone appear as a digital camera -- since the E61 doesn't have a camera this doesn't apply -- though I didn't see anything in the profile to prevent this yet.

I've successfully synced fixed and converted iTunes Plus songs and videos directly from iTunes to the phone via both Bluetooth and USB (with USB being preferred). Note that you choose "PC Suite" for USB mode, which is good because it doesn't quit applications unlike Disk drive mode.

Update 12/08/2010: Changed link to GeoCities mirror.

Nokia Media Transfer (or scooped by the big N)

Well Nokia has somewhat come to the rescue of iTunes Plus fans with the release of its new Nokia Media Transfer beta 1.0.

This smoothes the waters between iTunes, iTunes Plus songs and some Nokia smartphones on Mac OS X.

What this tool does is allow you to treat your Nokia N-Series (or E-Series as I will soon point out) mobile phone as an iTunes syncable device. And when it detects iTunes Plus (ie, Purchased) songs, it automatically retranscodes them using QuickTime before sending them to your phone via Bluetooth and USB.

Note: If you're a purist you are NOT going to be impressed with this solution. Examination of the file Media Transfer creates (by Bluetoothing it back to the computer) I noticed its a re-transcoded to 128kbps MP4 file with no metadata at all. This is not the lossless re-wrap I expected. I'll cover how to fix Nokia Media Transfer's behaviour soon. (This may appeal to some people: the Apple fingerprint seems fully stripped from the file though.)

This is a somewhat clean solution in that only songs that you want to send to your phone are transcoded, and you only ever have one copy of a song (the original, safe, purchased copy) in your iTunes library. However it does mean the sync process takes a little longer, but since the sync process is automatic, it's a dramatic improvement over the manual process.

So this is an alternative solution for Mac OS X users -- Nokia's music tool for Windows will likely achieve the same end (users yet (someone might fill me in...).

However I notice it's not perfect... Nokia's tool doesn't export phone-compatible metadata tags to my E61 (groan!) but guess what, I've got a solution for that coming too.

Download Nokia Media Transfer from http://europe.nokia.com/A4423134.

Saturday, 9 June 2007

PutPinfInItsPlace: An iTunes Plus fixer for Nokia mobile phones

I have a Mac.
I have iTunes.
I have a Nokia E61.

So you would think... perfect! Everything is wonderful now that iTunes Plus is out, but...

As is described by following the link above, there is an incompatibility between iTunes and Nokia mobile phones (and potentially other devices on and beyond the Symbian platform).

Update #1: A means of syncing these files to the phone.
Update #2: I have uploaded a version of PutPinfInItsPlace that is compatible with Mac OS X Panther 10.3.9/Java 1.4. Everyone should be covered now, sorry about that.
Update #3: An alternative option for doing the conversion on the phone instead is now available. (Hint: I prefer it this way.)

While there is a simple workaround, again described in the link, which involves re-wrapping the iTunes Plus file in a new AAC file, I wasn't happy with that so I kept investigating.

Turns out there is a single byte that makes all of the difference to such devices, as is borne out by the output of Atomic Parsley (v0.9.0, http://atomicparsley.sourceforge.net):
An iTunes Plus song has the following apparent structure:
...
Atom stsd @ 450 of size: 32871, ends @ 33321
Atom mp4a @ 466 of size: 32855, ends @ 33321
Atom esds @ 502 of size: 51, ends @ 553
Atom pinf @ 553 of size: 32768, ends @ 33321 ~
Atom stts @ 33321 of size: 24, ends @ 33345
...
~ denotes an unknown atom

Whereas the re-wrapped container (that works on the devices) has the following structure:
...
Atom stsd @ 442 of size: 32871, ends @ 33313
Atom mp4a @ 458 of size: 32855, ends @ 33313
Atom esds @ 494 of size: 32819, ends @ 33313
Atom stts @ 33313 of size: 24, ends @ 33337
...

Note that the unknown atom pinf (that's where your iTunes account information appears to be by the way) doesn't appear in the QuickTime Pro-containered file.

I tried to trivially strip out the pinf atom using Atomic Parsley, but no joy, and this is seemingly a red herring - as a hex editor examination of the files will attest to. The re-wrapped version of the file still has my account name in it, yet it doesn't cause the device to baulk!
The only difference in that area of the file is one byte - it's in the size of the esds atom. It appears that QuickTime Pro writes the pinf atom out as a child of esds (and Atomic Parsley and other tools don't parse the file that deeply to care), whereas the iTunes Store/iTunes 7.2 writes the pinf atom out as a sibling instead. It is only this difference (not any metadata) that prevents the file from playing on my phone.
Note that changing this byte means iTunes 7.2 no longer sees the file as a "Purchased AAC audio file", instead Get Info reports simply an "AAC audio file" kind. The Account Name is still visible.

So on to fixing this. You can simply find the byte (get a hex editor, I used the free 0xED - http://www.macupdate.com/0xED) which is in the atom size field immediately before 'esds' appears) and change it to include the pinf size. But this would obviously get tedious.

I've already got 27 iTunes Plus songs and I'm bound to get more, so to help me and you out, here's a very simple tool to change the byte for you.

I named it "PutPinfInItsPlace" since the problem is a misplaced pinf atom (smart hey?). This is a Java application, purely so that iTunes Windows and iTunes Mac users can use it (Windows users - install Java from http://www.java.com).

It will accept a list of files either on the command line, or if no files are given, it will ask you for them with a simple file chooser window. You can select as many files as you like at a time.

It will first back up your file as is in the same folder (renaming it to song name.purchased.m4a), and it won't continue if it can't back up your song, so it should be safe to use.

Then it will walk through the file looking for the misplaced pinf atom, copying the file out as it goes, changing the byte when it finds it then finishing off the file. Messages will let you know of its progress.

You can use the file directly on your iTunes Music folder because the tool preserves the original file names and metadata so iTunes should keep your ratings. If the conversion is successful you can manually delete or move the backups away.

There is more information on the tool in the README.txt file, and I'd appreciate some success or failure comments here. Thanks!

I hope this information (so someone can fix the issue or make a better tool) and tool is useful in the meantime.

You can download the tool from the link on http://geocities.ws/jking_ok/blog.html.



Update 12/08/2010: Changed link to GeoCities mirror.