python 未使用pyinstaller onefile加载音频“[AudioSDL2 ]无法加载”

jchrr9hc  于 2023-01-08  发布在  Python
关注(0)|答案(1)|浏览(98)

pyinstaller onefile不加载音频,只加载图像。当我测试没有onefile的pyinstaller时,应用程序工作正常,如果我测试pyinstaller onefile并将音频放在文件夹dist中,应用程序也工作正常。
我也测试了"resource_path",但不起作用。
错误[警告][AudioSDL2]无法加载som/som. ogg:b '使用空源混合加载WAV_RW'
应用程序工作正常,但声音无法加载。
我有:python 3.8.10
pyinstaller 5.6.2 pyinstaller-挂钩-控件== 2022.13
"kivy [base]" kivy_示例-非二进制kivy
这里有一个例子
main.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
import os, sys
from kivy.resources import resource_add_path

from sound import *

'''def resource_path(relative_path):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
        return os.path.join(base_path, relative_path)

resource_path('som/Bleeping-Demo.ogg')'''

class Gerenciador(ScreenManager):
    pass

class Menu(Screen):

    def on_enter(self, *args):
        self.sonoplastia = Sonoplastia()
        self.sonoplastia.sonoplastiaAstronautaGeral['menu'].volume = .5
        self.sonoplastia.sonoplastiaAstronautaGeral['menu'].loop = True
        self.sonoplastia.sonoplastiaAstronautaGeral['menu'].play()
    
class teste(App):
    def build(self):
        return Gerenciador()

if __name__ == '__main__':
    if hasattr(sys, '_MEIPASS'):
        resource_add_path(os.path.join(sys._MEIPASS))
    teste().run()

sound.py

from kivy.core.audio import SoundLoader

class Sonoplastia():
    
    sonoplastiaAstronautaGeral = {'menu': SoundLoader.load('som/som.ogg')}

teste.kv

#:kivy 2.0

<Gerenciador>
    Menu:
        id: menu_screen
        name: 'menu'
    
<Menu>:
    id: menu
    BoxLayout:
        orientation:'vertical'
        size_hint: 1, 1
        Label:
            canvas.before:
                Color:
                    #rgba: 1, 1, 0, 1
                Rectangle:
                    source: 'imagens/background.png'
                    size: self.size
                    pos: self.pos

teste.spec
一个三个三个一个
我想要pyinstaller的一个文件来加载音频。

ffscu2ro

ffscu2ro1#

我不确定这是否能解决您的问题,但您可以通过更改sound.py中的路径来修复应用程序无法找到.ogg文件的问题:

import os
from kivy.core.audio import SoundLoader

som_path = os.path.join(os.path.dirname(__file__), 'som\\som.ogg') 

class Sonoplastia():
    
    sonoplastiaAstronautaGeral = {'menu': SoundLoader.load(som_path)}

相关问题