hi again, if you remember i had been asking how to extend my music player to do two things:
1)play music from folders and subfolders (complete)
2)change song at the end of each one (incomplete)
well after looking around a while i found the answer :

# create a list of all the files in a given direcory
# and any of its subdirectories (Python25 & Python30)

import os
import os.path

def file_lister(currdir, mylist=[]):
    """
    returns a list of all files in a directory and any of
    its subdirectories
    note that default mylist becomes static
    """
    for file in os.listdir(currdir):
        # add directory to filename
        full_name = os.path.join(currdir, file)  
        if not os.path.isdir(full_name):
            mylist.append(full_name)
        else:
            # recurse into subdirs
            file_lister(full_name)
    return mylist

which i edited and added to my program to make this:

import webbrowser, random
import os
import os.path
running = 1

def file_lister(currdir, mylist=[]):
    """
    returns a list of all files in a directory and any of
    its subdirectories
    note that default mylist becomes static
    """
    for file in os.listdir(currdir):
        # add directory to filename
        full_name = os.path.join(currdir, file)  
        if not os.path.isdir(full_name):
            mylist.append(full_name)
        else:
            # recurse into subdirs
            file_lister(full_name)
    return mylist

dir_name = r"C:\Documents and Settings\Owner\My Documents\\" 
file_lists = file_lister(dir_name)
file_list = filter(lambda x: x.lower().endswith(".mp3"),file_lister(dir_name))

choice = int(raw_input("Press 1 to play a new song"))
while running == 1:
    if choice == 1:
        song = random.choice(file_list)
        webbrowser.open(os.path.join(dir_name,song))
    choice = float(raw_input("Press 1 to play a new song"))

but now i want to make it fully automatic and change song at the end of the previous one, how would i go about this?

What i would do is just sleep the program until the next song is ready, to find out how long to sleep though is the hard thing, so you can either make a dictionary with all the songs and their times. Or you can use something like this:

>>> import mpgedit
>>> play = mpgedit.Play('example.mp3')
>>> play.total_time()
(213, 129)
>>> secs, msecs = play.total_time()
>>> mins = secs / 60
>>> secs = secs - mins * 60
>>> print "%d:%02d minutes" % (mins, secs)
3:33 minutes

from http://simonwillison.net/2003/Dec/4/mp3lengths/

This of course needs a module, that is:

http://www.mpgedit.org/mpgedit/download_sdks.html

It worked fine on my computer so hopefully it will work on yours.

thanks i tried that but it keeps on raising this error when i try the test you showed

Traceback (most recent call last):
  File "C:\Python25\testing mpgedit.py", line 1, in <module>
    import mpgedit
ImportError: No module named mpgedit

Hold the phone, the actual thing you need to import is pympgedit.
And when you install it you need to log on and off before it works.. changes to the PYTHONPATH

thanks i logged of and on again and it works now but like it says in your first link the files only give me

(-1, -1)

do you know the solution to this?

i HAVE googled this to no avail

Yeah i just double checked and i am getting the same error. Sorry about that, it looked rather promising!

hmm.. if you only have 13 files, then maybe you could make a dictionary with the values of the length.

i only tested it with 13 files but ive got at least 3gb of music on my computer that i want to listen to! i also looked at mad but it said it didnt exist! ill take a look at it again

This article has been dead for over six months. Start a new discussion instead.