Pages

Sunday, 15 July 2007

Plus Music Fixer for Nokia Phones


Welcome to an extension of what a did earlier to make iTunes Plus songs play on certain Nokia phones.

This time around I've made a fixer that doesn't require you to mess around with the songs in iTunes or on your computer first.

Update #1: Fixed bug in 3rd Edition installer, updated link.
Update #2: Fixed bug with special characters in files and folders, updated links.
Update #3: New version makes this version totally redundant - check this out instead.

This is made possible by the work of the Python for S60 project which allows simple programs to written for the phone (much simpler than normal!)

This means that to use this fixer, you'll need to install Python for S60, version 1.4.0 or later, followed by my tool, on your phone. This will work for Nokia S60 2nd and 3rd edition phones, but the downloads are different so select the correct ones below.

Note: For simplicity, I'm providing direct links to Python for S60, you can view the downloads via this link (check especially for updates since this post was written). Also note that I provide the 2nd edition links as a courtesy to those of you who I know are using these phones - while the code is identical in both, the 2nd edition version has not been tested. Check here (or in my previous post) to discover the 'edition' of your phone. Lastly, note that some browser/web site combinations cause .sis files to download as text - right-click the links and choose Save/Download.

Update: Please don't download these - go get yourself v2.0 instead - thanks!

S60 3rd Edition (most E-Series, N-Series):

  1. Python for S60 v1.4.0
  2. Plus Music Fixer v1.1.0
    (Note that this installation is self-signed - click Continue when warned by your phone)

S60 2nd Edition (earlier models):

  1. Python for S60 v1.4.0 - 2nd Edition/original or Feature Pack 2 or Feature Pack 3 phones
  2. Plus Music Fixer v1.1

Now my idea with this tool is that you will run it after adding a batch of music to your phone (eg, via the memory card or USB) or after a song fails to play in Music player. When you start it from your menu, it will proceed to scan your phone and any memory card for .m4a music files that may need fixing. It will then tell you whether fixing is required. You can then choose to fix all or selectively by pressing the left softkey (Options) and choosing from the menu options. Fixing takes no time at all.

As always I advise against doing this to your master copy of your music, however I assume that your phone is not your master copy, and often has limited space, so this tool will not create its own backups and you are responsible for backing up your music.

The rescan menu item is useful for repeating the scan after fixing files to verify they were actually fixed.

If an error occurs a message will be shown. A Python error will lead to an "errors.txt" file being stored in the Documents folder of your phone memory (if this exists) which you can view (using Notes) or send (using File manager) to me (please).

Future plans:

  • Also optionally convert iTunes metadata so that it may be viewed in Music player
  • Working on a Music player replacement for those phones that have limited versions of the application (ie, E-series phones)
  • A better icon

This application is made possible thanks mainly to AtomicParsley's description of iTunes files.

6 comments:

  1. I get an error, when the Plus Music Fixer is scanning my music and it points me to the errorlog, that contains this:

    Traceback (most recent call last):
    File "C:\private\a00036f8\default.py", line 37, in logmethod
    return method()
    File "C:\private\a00036f8\default.py", line 201, in _rescan
    lookforfiles()
    File "C:\private\a00036f8\default.py", line 161, in lookforfiles
    findfilesin(i + os.sep)
    File "C:\private\a00036f8\default.py", line 155, in findfilesin
    findfilesin(os.path.join(path, i))
    File "C:\private\a00036f8\default.py", line 155, in findfilesin
    findfilesin(os.path.join(path, i))
    File "C:\private\a00036f8\default.py", line 155, in findfilesin
    findfilesin(os.path.join(path, i))
    File "C:\private\a00036f8\default.py", line 154, in findfilesin
    if (os.path.isdir(os.path.join(path, i))):
    File "c:\resource\ntpath.py", line 51, in join
    path += "\\" + b
    UnicodeError: ASCII decoding error: ordinal not in range(128)

    I'm running this on a N95 with firmware 11.0.026 and lates Python installed (1.40) for S60 3rd edition.

    Any help?

    ReplyDelete
  2. Ah oops, a non-US character bug. I'll get a fix up for that pronto. My laziness, sorry.

    Joshua

    ReplyDelete
  3. Awesome! Great work and thanks for doing it. Works just fine on my N80 (v4.0632.0.38). Now if only we could read Artist name and see cover art. Good job, why cant Nokia get this sort of thing sorted.

    ReplyDelete
  4. Thanks for the feedback.

    Ask and ye shall receive (because I want it to) I'm working on artist name at least.

    ReplyDelete
  5. I have a error file for you as well :-

    Plus Music Fixer v1.1.0
    Traceback (most recent call last):
    File "C:\private\a00036f8\default.py", line 38, in logmethod
    return method()
    File "C:\private\a00036f8\default.py", line 220, in _rescan
    lookforfiles()
    File "C:\private\a00036f8\default.py", line 176, in lookforfiles
    findfilesin()
    File "C:\private\a00036f8\default.py", line 160, in findfilesin
    findfilesin()
    File "C:\private\a00036f8\default.py", line 160, in findfilesin
    findfilesin()
    File "C:\private\a00036f8\default.py", line 160, in findfilesin
    findfilesin()
    File "C:\private\a00036f8\default.py", line 160, in findfilesin
    findfilesin()
    File "C:\private\a00036f8\default.py", line 166, in findfilesin
    testm4aparse(os.path.join(os.getcwd(), i))
    File "C:\private\a00036f8\default.py", line 145, in testm4aparse
    inc = m4aparseatom(path, f, 0, [])
    File "C:\private\a00036f8\default.py", line 134, in m4aparseatom
    f.seek(pos, 1)
    IOError: [Errno 32] Broken pipe

    ReplyDelete
  6. Thanks Hugh, I'll look into it -- I think that might be caused either by me misreading the length of the file or running out of memory.

    ReplyDelete