【问题标题】:Kivy: SoundLoader and loading multiple files, but not 'double-load'Kivy:SoundLoader 和加载多个文件,但不是“双重加载”
【发布时间】:2012-09-08 21:05:51
【问题描述】:

我想通过 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

提前致谢 ;)

【问题讨论】:

    标签: python audio loading kivy


    【解决方案1】:

    在与#kivy 的人进行了一些 IRC 之后,有人建议我使用 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 的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-18
      • 2020-08-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2020-05-22
      • 2013-12-18
      相关资源
      最近更新 更多