Ответ 1
Вы можете использовать мутаген, чтобы получить длину песни (см. Учебник):
from mutagen.mp3 import MP3
audio = MP3("example.mp3")
print(audio.info.length)
Итак, у меня есть код:
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)
но все, что он делает, - это пройти все песни без остановки. Я подумал, что если бы я мог найти длину песни, которая сейчас играет, я мог бы использовать модуль "time", чтобы продолжить работу после того, как песня будет выполнена с атрибутом (sleep). Тем не менее, я не мог найти, как получить длину песни в окнах. Кто-нибудь знает решение моей проблемы?
Вы можете использовать мутаген, чтобы получить длину песни (см. Учебник):
from mutagen.mp3 import MP3
audio = MP3("example.mp3")
print(audio.info.length)
Вы можете использовать библиотеки FFMPEG:
args=("ffprobe","-show_entries", "format=duration","-i",filename)
popen = subprocess.Popen(args, stdout = subprocess.PIPE)
popen.wait()
output = popen.stdout.read()
и вывод будет:
[FORMAT]
duration=228.200515
[/FORMAT]
Вы также можете получить это с помощью eyed3, если это ваш вкус, сделав:
import eyed3
duration = eyed3.load('path_to_your_file.mp3').info.time_secs
Обратите внимание, что это использует выборку для определения длины дорожки. В результате, если он использует переменную скорость передачи данных, образцы могут не быть репрезентативными для целого, и оценка может быть удалена в значительной степени (я видел, что эти оценки превышают 30% на судебных заседаниях).
Я не уверен, что это намного хуже, чем другие варианты, но это что-то помнить, если у вас есть переменные скорости передачи.
Возможно, игра также в Python, то есть не используйте os.startfile
, используйте некоторую библиотеку Python для воспроизведения файла.
Недавно я написал такую библиотеку/модуль, модуль musicplayer
(в PyPI). Здесь - простой демонстрационный проигрыватель, который вы можете легко расширить для своего тасового кода.
Просто сделайте easy_install musicplayer
. Затем, вот пример кода для получения длины:
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]