我想通过SoundLoader模块在kivy中加载多个声音文件(* .ogg)。文件大小从300kB到700kB。
会发生什么:加载第一对文件,然后跳过剩余的文件。
是否有更好(也许更快)的方式来加载文件?是否可以将已经加载的文件“链接”到另一个Button实例,而不复制它(或者破坏它的文本)?
以下是相关代码:
#Getting filenames:
for line in rawsongs:
if ',' in line:
items = line.split(', ')
#Creating instances of Buttons, which control (play and stop)
#the soundfiles:
btn = AudioButton(
text=(items[1]+' - '+items[2]), font_size=50,
sound = SoundLoader.load(items[2]+'.ogg'),
size_hint_y = None, height = 240, group = 'audio')
#adding the Button to the Layout:
grid.add_widget(btn)
else:
pass
提前致谢;)
答案 0 :(得分:0)
在一些IRC与来自#kivy的人之后,我被建议使用kivy - 实习生“缓存管理器” Cache Manager docs @ kivy.org 所以更新的代码是这样的:
#NEW: Registering the Cache
Cache.register('songcache', timeout = 100)
#Getting filenames:
for line in rawsongs:
if ',' in line:
items = line.split(', ')
#NEW: Check if the file is already cached:
if Cache.get('songcache', items[2]) == None:
#Setting up the button:
btn = AudioButton(
text=(items[1]+' - '+items[2]), font_size=50,
sound = SoundLoader.load(items[2]+'.ogg'),
size_hint_y = None, height = 240, group = 'metro')
#NEW: Adding the instance of the soundfile to the cache:
Cache.append('songcache', items[2], btn.sound)
grid.add_widget(btn)
else:
btn = AudioButton(
text=(items[1]+' - '+items[2]), font_size=50,
#NEW: Linking the previously Cached instance with the new Button
sound = Cache.get('songcache', items[2]),
size_hint_y = None, height = 240, group = 'metro')
grid.add_widget(btn)
else:
pass
非常感谢#kivy的帮助!