Encontrar la longitud de un archivo mp3

Así que tengo el código:

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) 

Pero todo lo que hace es pasar por todas las canciones sin parar. Pensé que si podía encontrar la longitud de la canción que se está reproduciendo actualmente, podría usar el módulo “tiempo” para seguir adelante después de que la canción haya terminado con el atributo (dormir). Sin embargo, no pude encontrar la longitud de la canción en Windows. ¿Alguien sabe una solución a mi problema?

Puede usar el mutágeno para obtener la longitud de la canción (consulte el tutorial ):

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

Puede utilizar las bibliotecas FFMPEG:

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

y la salida será:

 [FORMAT] duration=228.200515 [/FORMAT] 

También puedes obtener esto usando eyed3, si ese es tu sabor haciendo:

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

Sin embargo, tenga en cuenta que esto utiliza el muestreo para determinar la longitud de la pista. Como resultado, si utiliza una tasa de bits variable, es posible que las muestras no sean representativas de la totalidad, y que la estimación esté en un buen grado (he visto que estas estimaciones están más de un 30% en las grabaciones de la corte).

No estoy seguro de que sea mucho peor que otras opciones, pero es algo para recordar si tiene velocidades de bits variables.

Tal vez haga la reproducción también dentro de Python, es decir, no use os.startfile , use alguna biblioteca de Python para reproducir el archivo.

Recientemente he escrito una biblioteca / módulo, el módulo musicplayer ( en PyPI ). Aquí hay un sencillo reproductor de demostración que puede ampliar fácilmente para su código aleatorio.

Solo haz easy_install musicplayer . Entonces, aquí hay un código de ejemplo para obtener la longitud:

 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]