当我尝试向音乐加载器提供所选音乐文件时,发生错误:
代码:
import essentia
import essentia.standard
import os
file = os.listdir()
i = 0
number = len(file)
print("Number:", number)
while i<number:
if file[i].endswith(".mp3"):
print(file[i])
filename = file[i]
loader = essentia.standard.MonoLoader(file[i]) #<--ERROR
audio = loader()
#...
错误:
__init__() takes 1 positional argument but 2 were given
我搜索后发现,不仅传递了文件名,而且传递了“自变量(名为文件的列表对象)”。我说对了吗?现在的问题是:如何在没有self参数的情况下传递此列表的元素?
答案 0 :(得分:0)
快速浏览essentia docs for the MonoLoader method,看起来它需要多个参数,而filename
不是第一个参数(除文件名之外,所有其他参数都是可选的)。因此,您需要指定要传递filename
参数。例如:
loader = essentia.standard.MonoLoader(filename=file[i])
此外,如果您的示例代码不能真正表明mp3文件的位置,那么请确保将完整的文件路径传递给MonoLoader
,而不仅仅是文件名。
最后,我假设您只是在问题中展示while
循环的一部分,而实际上您是在某个地方递增i
以便不会永远运行。