[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] mixer.music in runtime



hey,

thanks... I'm not near a windows machine at the moment... so I can't
test.  Strangely the py2exe stuff works for me.

However...  what I meant before to try would be this... in your setup.

excludes = []
includes = ["pygame.mixer.music", "pygame.mixer_music", "pygame"]

opts = {
    "py2exe": {
        "includes":includes,
        "excludes":excludes
    }
}

setup(...
     options=opts
        )





On Wed, May 21, 2008 at 10:44 AM, Keith Nemitz <musenik@xxxxxxxxx> wrote:
>
> I've uploaded a minimal app that has the problem.
>
> http://p4.hostingprod.com/@mousechief.com/musicFailSetup.exe
>
>
> Here's the two relevant files:
>
> ------------------------------------- audio py
>
>
>
> import pygame,os
>
> musicNames = [];
> #soundNames = ["sangria","sonar","drop","badswap","chaching","wall"];
> soundNames = [];
> soundLib = {};
>
> mixer = music = None;  #Hogari_Hisaaki-Yasuko_Yamano-Beagle.ogg
> nextMusic = 0;
> musicVolume = 1.0; #0.4;
> musicFlag = True;
>
> lastSound = "";
> lastSndTime = 0;
> loopSound = None;
>
>
> def InitSounds():
>    global mixer, music, musicNames;
>
>    #try:
>    import pygame.mixer as pymix
>    mixer = pymix;
>    import pygame.mixer_music
>    music = pymix.music;
>    #except (ImportError, pygame.error):
>    #    return;
>
>    tp = os.path.join('data','music');
>    tl = os.listdir(tp);
>    for fname in tl:
>        if (fname[-4] == '.'):
>            musicNames.append(fname);
>    music.set_volume(musicVolume);
>
>    PlayMusic();
>    while music.get_busy():
>        pass
>    pass
>
>
> def PlayMusic(name, loopCount=1):
>    if (not music or not musicFlag): return;
>    #check music loop preference if loop: loop = -1;
>    loop = loopCount;
>
>    if music.get_busy():
>        #we really should fade out nicely and
>        #wait for the end music event, for now, CUT
>        music.stop();
>
>    fullname = os.path.join('data', 'music', name);
>    if (os.access(fullname,os.F_OK)):
>        music.load(fullname);
>    else:
>        fullname = os.path.join('data', 'sounds', name);
>        music.load(fullname);
>    music.play(loop);
>    return;
>
>
>
> ------------------------------------- setup.py
>
> # A setup script showing how to extend py2exe.
> #
> # In this case, the py2exe command is subclassed to create an installation
> # script for InnoSetup, which can be compiled with the InnoSetup compiler
> # to a single file windows installer.
> #
> # By default, the installer will be created as dist\Output\setup.exe.
>
> from distutils.core import setup
> import py2exe
> import sys
> import shutil
>
> ################################################################
> # arguments for the setup() call
>
> brigiton = dict(
>    script = "main.py",
>    dest_base = r"prog\brigiton",
>    icon_resources = [(1,"DHSGiT.ico")])
>
> zipfile = r"lib\shardlib"
>
> options = {"py2exe": {"compressed": 0,
>                      "optimize": 2}, }
>
> #dataList = []; #glob.glob("data\\*");
> #scan data folder for files and append in form "data\file
>
> ################################################################
> import os
>
> class InnoScript:
>    def __init__(self,
>                 name,
>                 lib_dir,
>                 dist_dir,
>                 windows_exe_files = [],
>                 lib_files = [],
>                 data_files = [],
>                 version = "1.0.2.0"): #another one down below.
>        self.lib_dir = lib_dir
>        self.dist_dir = dist_dir
>        if not self.dist_dir[-1] in "\\/":
>            self.dist_dir += "\\"
>        self.name = name
>        self.version = version
>        self.windows_exe_files = [self.chop(p) for p in windows_exe_files]
>        self.lib_files = [self.chop(p) for p in lib_files]
>
>    def chop(self, pathname):
>        assert pathname.startswith(self.dist_dir)
>        return pathname[len(self.dist_dir):]
>
>    def create(self, pathname="dist\\brigiton.iss"):
>        self.pathname = pathname
>        ofi = self.file = open(pathname, "w")
>        print >> ofi, "; WARNING: This script has been created by py2exe. Changes to this script"
>        print >> ofi, "; will be overwritten the next time py2exe is run!"
>        print >> ofi, r"[Setup]"
>        print >> ofi, r"AppName=%s" % self.name
>        print >> ofi, r"AppVerName=%s %s" % (self.name, self.version)
>        print >> ofi, r"DefaultDirName={pf}\%s" % self.name
>        print >> ofi, r"DefaultGroupName=%s" % self.name
>        print >> ofi
>
>        print >> ofi, r"[Dirs]"
>        print >> ofi, r'Name: "{app}\prog\data"'
>        print >> ofi, r'Name: "{app}\prog\data\music"'
>
>        print >> ofi
>
>        print >> ofi, r"[Files]"
>        print >> ofi, r'Source: "prog\data\music\*"; DestDir: "{app}\prog\data\music"; Flags:
> ignoreversion'
>
>
>        print >> ofi, r'Source: "prog\msvcr71.dll"; DestDir: "{app}\prog"; Flags: ignoreversion'
>        #print >> ofi, r'Source: "prog\libpng12-0.dll"; DestDir: "{app}\prog"; Flags:
> ignoreversion'
>        #print >> ofi, r'Source: "prog\jpeg.dll"; DestDir: "{app}\prog"; Flags: ignoreversion'
>        #print >> ofi, r'Source: "prog\libvorbisfile-3.dll"; DestDir: "{app}\prog"; Flags:
> ignoreversion'
>        #print >> ofi, r'Source: "prog\libogg-0.dll"; DestDir: "{app}\prog"; Flags: ignoreversion'
>        #print >> ofi, r'Source: "prog\libvorbis-0.dll"; DestDir: "{app}\prog"; Flags:
> ignoreversion'
>        print >> ofi, r'Source: "prog\libfreetype-6.dll"; DestDir: "{app}\lib"; Flags:
> ignoreversion'
>        #print >> ofi, r'Source: "prog\zlib1.dll"; DestDir: "{app}\lib"; Flags: ignoreversion'
>
>
>        for path in self.windows_exe_files + self.lib_files:
>            print >> ofi, r'Source: "%s"; DestDir: "{app}\%s"; Flags: ignoreversion' % (path,
> os.path.dirname(path))
>        print >> ofi
>
>        print >> ofi, r"[Icons]"
>        for path in self.windows_exe_files:
>            print >> ofi, r'Name: "{group}\%s"; Filename: "{app}\%s"' % \
>                  (self.name, path)
>        print >> ofi, 'Name: "{group}\Uninstall %s"; Filename: "{uninstallexe}"' % self.name
>
>    def compile(self):
>        try:
>            import ctypes
>        except ImportError:
>            try:
>                import win32api
>            except ImportError:
>                import os
>                os.startfile(self.pathname)
>            else:
>                print "Ok, using win32api."
>                win32api.ShellExecute(0, "compile",
>                                                self.pathname,
>                                                None,
>                                                None,
>                                                0)
>        else:
>            print "Cool, you have ctypes installed."
>            res = ctypes.windll.shell32.ShellExecuteA(0, "compile",
>                                                      self.pathname,
>                                                      None,
>                                                      None,
>                                                      0)
>            if res < 32:
>                raise RuntimeError, "ShellExecute failed, error %d" % res
>
>
> ################################################################
>
> from py2exe.build_exe import py2exe
>
> class build_installer(py2exe):
>    # This class first builds the exe file(s), then creates a Windows installer.
>    # You need InnoSetup for it.
>    def run(self):
>        # First, let py2exe do it's work.
>        py2exe.run(self)
>
>        lib_dir = self.lib_dir
>        dist_dir = self.dist_dir
>
>        # create the Installer, using the files py2exe has created.
>        script = InnoScript("DangerousHSGirls",
>                            lib_dir,
>                            dist_dir,
>                            self.windows_exe_files,
>                            self.lib_files)
>        print "*** creating the inno setup script***"
>        script.create()
>        print "*** compiling the inno setup script***"
>        script.compile()
>        # Note: By default the final setup.exe will be in an Output subdirectory.
>
> ################################################################
>
> setup(
>    options = options,
>    version = "1.0.2.0", #last digit for Windows increments between Mac increments
>    description = "py2exe script",
>    name = "Dangerous HS Girls in Trouble!",
>
>    # The lib directory contains everything except the executables and the python dll.
>    zipfile = zipfile,
>    windows = [brigiton],
>    # use out build_installer class as extended py2exe build command
>    cmdclass = {"py2exe": build_installer},
>    #data_files = [("prog\data", [])],
>    )
>
>
>
>
>
>
> --- Keith Nemitz <musenik@xxxxxxxxx> wrote:
>
>>
>> I've started with fresh XP Sp2 installs on both VMWare and Parallels. Installed only what was
>> necessary:
>>
>> Python, pygame, numeric, py2exe.
>>
>> As per earlier suggestion, I uninstalled py2exe 0.6.6 and installed 0.6.5.
>>
>> I don't think it's an install issue.
>>
>>
>>
>>
>> --- René Dudfield <renesd@xxxxxxxxx> wrote:
>>
>> > ah,
>> >
>> > Have you tried uninstalling (maybe manually deleting) pygame, py2exe
>> > etc then installing again?
>> >
>> > Maybe there's some problem with that...
>> >
>> >
>> >
>> > On Wed, May 21, 2008 at 9:31 AM, Keith Nemitz <musenik@xxxxxxxxx> wrote:
>> > > Yep,
>> > >
>> > > It's in Program Files/(AppFolder)/lib.
>> > >
>> > >
>> > >
>> > >
>> > > --- René Dudfield <renesd@xxxxxxxxx> wrote:
>> > >
>> > >> hi,
>> > >>
>> > >> Do you have the smpeg dll copied in there?
>> > >>
>> > >> cu,
>> > >>
>> > >>
>> > >> On Wed, May 21, 2008 at 7:58 AM, Keith Nemitz <musenik@xxxxxxxxx> wrote:
>> > >> > I get the following:
>> > >> >
>> > >> > AttributeError: 'module' object has no attribute 'mixer_music'
>> > >> >
>> > >> >
>> > >> >
>> > >> >
>> > >> > --- Brian Fisher <brian@xxxxxxxxxxxxxxxxxxx> wrote:
>> > >> >
>> > >> >> I guess that means it imports correctly, but somehow fails to get bound?
>> > >> >>
>> > >> >> I don't suppose you can access the functionality you need through
>> > >> >> mixer_music, can you?
>> > >> >>
>> > >> >> In other words, what happens if you change the first failing
>> > >> >> pygame.mixer.music.whatever line to pygame.mixer_music.whatever? (after the
>> > >> >> import, of course)
>> > >> >>
>> > >> >> On Tue, May 20, 2008 at 11:17 AM, Keith Nemitz <musenik@xxxxxxxxx> wrote:
>> > >> >>
>> > >> >> > I put your import line right above the failing line, but got exactly the
>> > >> >> > same results. I even
>> > >> >> > removed the try/exception block.
>> > >> >> >
>> > >> >> >
>> > >> >>
>> > >> >
>> > >> >
>> > >>
>> > >
>> > >
>> >
>>
>>
>
>