So i have the code:

import glob,os import random path = 'C:\\Music\\' aw=[] for infile in glob.glob( os.path.join(path,'*.mp3') ): libr = infile.split('Downloaded',1) aw.append(infile) aww = -1 while 1: aww += 1 print len(aw),aww random.shuffle(aw) awww = aw[aww] os.startfile(awww) 

but all it does is go through all of the songs without stopping. I thought if I could find the length of the song that is currently playing, I could use the "time" module to keep going after the song is done with the (sleep) attribute. However, I couldn't find how to get the length of the song on windows. Does anyone know a solution to my probleme?

1

5 Answers

You can use mutagen to get the length of the song (see the tutorial):

from mutagen.mp3 import MP3 audio = MP3("example.mp3") print(audio.info.length) 
3

You can use FFMPEG libraries:

 args=("ffprobe","-show_entries", "format=duration","-i",filename) popen = subprocess.Popen(args, stdout = subprocess.PIPE) popen.wait() output = popen.stdout.read() 

and the output will be:

[FORMAT] duration=228.200515 [/FORMAT] 
2

Newer versions of python-ffmpeg have a wrapper function for ffprobe. An example of getting the duration is like this:

import ffmpeg print(ffmpeg.probe('in.mp4')['format']['duration']) 

Found at:

2

You can also get this using eyed3, if that's your flavor by doing:

import eyed3 duration = eyed3.load('path_to_your_file.mp3').info.time_secs 

Note however that this uses sampling to determine the length of the track. As a result, if it uses variable bit rate, the samples may not be representative of the whole, and the estimate may be off by a good degree (I've seen these estimates be off by more than 30% on court recordings).

I'm not sure that's much worse than other options, but it's something to remember if you have variable bit rates.

Maybe do the playing also within Python, i.e. don't use os.startfile, use some Python library to play the file.

I have recently written such a library/module, the musicplayer module (on PyPI). Here is a simple demo player which you can easily extend for your shuffle code.

Just do easy_install musicplayer. Then, here is some example code to get the length:

class Song: def __init__(self, fn): self.f = open(fn) def readPacket(self, bufSize): return self.f.read(bufSize) def seekRaw(self, offset, whence): self.f.seek(offset, whence) return self.f.tell() import musicplayer as mp songLenViaMetadata = mp.getMetadata(Song(filename)).get("duration", None) songLenViaAnalyzing = mp.calcReplayGain(Song(filename))[0] 
0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.