Python 使用Pyfoobar将歌曲长度更改为数字

Python 使用Pyfoobar将歌曲长度更改为数字,python,Python,在尝试为foobar创建一个正在播放的脚本时,我一直在尝试将当前曲目的长度(字符串)转换为正则整数 from pyfoobar import foobar import time fb2k = foobar() while(fb2k.isPlaying()==True): fb2k.playRandom() length=fb2k.lengthOfTrack() minute=int(length[0])*60 second=int(length[2:])

在尝试为foobar创建一个正在播放的脚本时,我一直在尝试将当前曲目的长度(字符串)转换为正则整数

from pyfoobar import foobar
import time

fb2k = foobar()
while(fb2k.isPlaying()==True):
    fb2k.playRandom()
    length=fb2k.lengthOfTrack()
    minute=int(length[0])*60
    second=int(length[2:])
    length=(minute+second)-1
    print "Now Playing: "+fb2k.getCurrentArtist()+" - "+fb2k.getCurrentTrack()
    time.sleep(length)
为了更新每一个新曲目,我使用了一个循环,在当前曲目中延迟秒数。编译时,出现以下错误:

Traceback (most recent call last):
  File "C:\Users\000\Downloads\pyfoobar\pyfoobar\playing.py", line 8, in <module>
    minute=int(length[0])*60
IndexError: string index out of range
回溯(最近一次呼叫最后一次):
文件“C:\Users\000\Downloads\pyfoobar\pyfoobar\playing.py”,第8行,在
分钟=整数(长度[0])*60
索引器错误:字符串索引超出范围

我可能遗漏了一些明显的东西,但我找不到修复错误的方法,特别是因为计算长度的行将返回正确的秒数。

您确定
playRandom
是同步的吗?在调用
lengthOfTrack
之前,您测试了
isplay
,但可能在调用
playdrandom
(在它完成执行之前)
isplay
为false,因此
lengthOfTrack
将返回未定义的内容。我没有使用COM的经验,所以可能我说的是一些愚蠢的话,但我要做的第一件事是在循环中再次检查
isPlaying

你确定
playRandom
是同步的吗?在调用
lengthOfTrack
之前,您测试了
isplay
,但可能在调用
playdrandom
(在它完成执行之前)
isplay
为false,因此
lengthOfTrack
将返回未定义的内容。我没有使用COM的经验,所以可能我说的是一些愚蠢的话,但我要做的第一件事是在循环中再次检查
isPlaying

存储在
length
中的值是多少?你能把它打印出来吗?对于一首歌,比如说4:18,它将返回4:19。最后的长度行减去1秒以更正此错误。存储在
长度中的值是多少?你能把它打印出来吗?对于一首歌,比如说4:18,它将返回4:19。最后一条长度线减去1秒来纠正这一点。我尝试将其设置为一个简单的无限循环(虽然(True)),但它似乎并不取决于播放的曲目。@OracleScreer但如果没有播放曲目呢?
lengthOfTrack
将返回什么<代码>“0:00”
?您的问题似乎是
length
在某个时刻是一个空字符串,我唯一的猜测是,当foobar切换曲目时(响应您的
playdrandom
调用),会发生这种情况。创建后,请尝试打印长度。我尝试进行长度计算并将延迟设置为设定的时间来测试。不知何故,这会将曲目和艺术家更改为“检查元数据”。我觉得循环中的某些东西本身可能会引起问题,因为它们在外部都可以正常工作。我确实同意,可能的“无长度”可能会造成问题。@OracleScreer,但您是否确认该曲目正在播放?我可以看出你不相信我,但我相信这是最有可能的错误原因。在这种情况下,其他方法(返回元数据)也会产生意外的结果。如果您在
playdrandom()
之后调用
time.sleep(1)
,可能会给foobar足够的时间来更改曲目。延迟修复了问题!你是对的,一定是空字符串。我注意到playRandom在foobar的下一首曲目中添加了一个额外的曲目选择,因此我将把它移到初始歌曲的循环之外。谢谢你的帮助!我尝试将其设置为一个简单的无限循环(虽然(正确)),但它似乎并不取决于播放的曲目。@OracleScreer但如果没有播放曲目呢?
lengthOfTrack
将返回什么<代码>“0:00”?您的问题似乎是
length
在某个时刻是一个空字符串,我唯一的猜测是,当foobar切换曲目时(响应您的
playdrandom
调用),会发生这种情况。创建后,请尝试打印长度。我尝试进行长度计算并将延迟设置为设定的时间来测试。不知何故,这会将曲目和艺术家更改为“检查元数据”。我觉得循环中的某些东西本身可能会引起问题,因为它们在外部都可以正常工作。我确实同意,可能的“无长度”可能会造成问题。@OracleScreer,但您是否确认该曲目正在播放?我可以看出你不相信我,但我相信这是最有可能的错误原因。在这种情况下,其他方法(返回元数据)也会产生意外的结果。如果您在
playdrandom()
之后调用
time.sleep(1)
,可能会给foobar足够的时间来更改曲目。延迟修复了问题!你是对的,一定是空字符串。我注意到playRandom在foobar的下一首曲目中添加了一个额外的曲目选择,因此我将把它移到初始歌曲的循环之外。谢谢你的帮助!