0

SoundLoader モジュールを介して複数のサウンドファイル (*.ogg) を kivy にロードしたいと考えています。ファイルのサイズは 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

前もって感謝します ;)

4

1 に答える 1

0

#kivy のメンバーと IRC を行った後、kivy - intern "cache manager" 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 の人たちに感謝します!

于 2012-09-10T16:30:20.720 に答える