Ejemplo n.º 1
0
    def on_start(self, event):
        # can't start twice so disable this button
        self.start.Disable()
        self.cancel.Disable()
        self.help_text.SetLabel("Downloading %d bytes." % (self.byte_count, ))

        if (USE_WINSOUND):
            self.gauge.SetLabel("...DOWNLOADING...")
        else:
            self.gauge.SetValue(0)
            self.gauge.Update()

        self.Update()

        time.sleep(1)
        WAV_FILE = os.path.join(paths.get_store_dir(), "program.wav")

        if USE_WAVER:
            startupinfo = subprocess.STARTUPINFO()
            startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
            logfile_path = os.path.join(tempfile.gettempdir(), "waver.log")
            logfile = open(logfile_path, "a+")
            logfile.seek(0, os.SEEK_END)
            waver_path = os.path.join(paths.get_run_dir(), "waver",
                                      "waver.exe")
            process = subprocess.Popen([waver_path, WAV_FILE],
                                       startupinfo=startupinfo,
                                       stdout=logfile)
            process.wait()
            logfile.close()

        elif USE_PORTAUDIO:
            wf = wave.open(WAV_FILE, 'rb')
            p = pyaudio.PyAudio()

            totalFrames = wf.getnframes()
            framesRead = 0
            self.gauge.SetRange(totalFrames)
            self.gauge.SetValue(0)
            stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                            channels=wf.getnchannels(),
                            rate=wf.getframerate(),
                            output=True)
            data = wf.readframes(47)
            framesRead += 47
            # print framesRead
            if (framesRead > totalFrames):
                framesRead = totalFrames
            stream.write(data)

            while data != '':
                stream.write(data)
                self.gauge.SetValue(framesRead)
                self.Update()

                data = wf.readframes(AUDIO_CHUNK)
                framesRead += AUDIO_CHUNK
                if (framesRead > totalFrames):
                    framesRead = totalFrames
                #print framesRead

            self.gauge.SetValue(totalFrames)
            self.Update()
            correction = float(stream.get_write_available() -
                               32) / WAVE_SAMPLE_RATE_HZ
            #print correction
            time.sleep(stream.get_output_latency() - correction)
            stream.stop_stream()
            stream.close()
            p.terminate()

        elif USE_PYGAME:
            if (pygame.mixer.get_init() == None):
                pygame.mixer.init(frequency=WAVE_SAMPLE_RATE_HZ,
                                  size=8,
                                  channels=2,
                                  buffer=4096)
                pygame.mixer.init()

            s = pygame.mixer.Sound(WAV_FILE)
            seconds = s.get_length()
            #print "Sounds seconds:", seconds
            if (seconds < 1):
                seconds = 1
            self.gauge.SetRange(seconds * 5)
            self.gauge.SetValue(0)
            elapsed = 0
            s.play()
            while ((elapsed < seconds) and pygame.mixer.get_busy()):
                time.sleep(0.2)
                elapsed += 0.2
                if (elapsed < seconds):
                    self.gauge.SetValue(elapsed * 5)
                    self.Update()

            self.gauge.SetValue(seconds * 5)
            self.Update()

        elif USE_WINSOUND:
            s1 = wx.Sound(WAV_FILE)
            s1.Play(wx.SOUND_SYNC)

            self.gauge.SetLabel("")

        self.help_text.SetLabel("Finished downloading")
        self.start.Enable()
        self.cancel.Enable()

        self.Refresh()
Ejemplo n.º 2
0
    def on_start(self, event):
        filename = self.file_browse.GetValue()
        if (not os.path.exists(filename)):
            self.help_text.SetLabel("Error - couldn't read file: %s" %
                                    (filename, ))
            return

        # Assuming that the file is the binary firmware file with all header bytes
        # already added. Just have to convert to audio and play.

        file_handle = file(filename, 'rb')
        firmware_string = file_handle.read()
        file_handle.close()
        self.download_bytes = bytearray(firmware_string)
        self.byte_count = len(self.download_bytes)

        if (USE_WINSOUND):
            self.gauge.SetLabel("")
        else:
            self.gauge.SetRange(self.byte_count)
            self.gauge.SetValue(0)

        self.help_text.SetLabel("Creating audio file.")
        self.Update()

        # convert to wav file
        convertWithPause(self.download_bytes, FIRMWARE_WAV,
                         DOWNLOAD_PAUSE_MSECS, DOWNLOAD_BYTES_BETWEEN_PAUSES)

        # can't start twice so disable this button
        self.start.Disable()
        self.cancel.Disable()
        self.help_text.SetLabel("Downloading %d bytes." % (self.byte_count, ))

        if (USE_WINSOUND):
            self.gauge.SetLabel("...DOWNLOADING...")
        else:
            self.gauge.SetValue(0)
            self.gauge.Update()

        self.Update()

        time.sleep(1)

        if USE_PORTAUDIO:
            wf = wave.open("firmware.wav", 'rb')
        elif USE_WAVER:
            startupinfo = subprocess.STARTUPINFO()
            startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
            logfile_path = os.path.join(tempfile.gettempdir(), "waver.log")
            logfile = open(logfile_path, "a+")
            logfile.seek(0, os.SEEK_END)
            waver_path = os.path.join(paths.get_run_dir(), "waver",
                                      "waver.exe")
            process = subprocess.Popen([waver_path, FIRMWARE_WAV],
                                       startupinfo=startupinfo,
                                       stdout=logfile)
            process.wait()
            logfile.close()

        elif USE_PORTAUDIO:
            wf = wave.open(FIRMWARE_WAV, 'rb')
            p = pyaudio.PyAudio()

            totalFrames = wf.getnframes()
            framesRead = 0
            self.gauge.SetRange(totalFrames)
            self.gauge.SetValue(0)
            stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                            channels=wf.getnchannels(),
                            rate=wf.getframerate(),
                            output=True)
            data = wf.readframes(47)
            framesRead += 47
            if (framesRead > totalFrames):
                framesRead = totalFrames
            stream.write(data)

            while data != '':
                stream.write(data)
                self.gauge.SetValue(framesRead)
                self.Update()

                data = wf.readframes(AUDIO_CHUNK)
                framesRead += AUDIO_CHUNK
                if (framesRead > totalFrames):
                    framesRead = totalFrames

            self.gauge.SetValue(totalFrames)
            self.Update()
            correction = float(stream.get_write_available() -
                               32) / WAVE_SAMPLE_RATE_HZ
            time.sleep(stream.get_output_latency() - correction)
            stream.stop_stream()
            stream.close()

            p.terminate()

        elif USE_PYGAME:
            if (pygame.mixer.get_init() == None):
                pygame.mixer.init(frequency=WAVE_SAMPLE_RATE_HZ,
                                  size=8,
                                  channels=2,
                                  buffer=4096)
                pygame.mixer.init()

            s = pygame.mixer.Sound(FIRMWARE_WAV)
            seconds = s.get_length()
            # print "Sounds seconds:", seconds
            if (seconds < 1):
                seconds = 1
            self.gauge.SetRange(seconds * 5)
            self.gauge.SetValue(0)
            elapsed = 0
            s.play()
            while ((elapsed < seconds) and pygame.mixer.get_busy()):
                time.sleep(0.2)
                elapsed += 0.2
                if (elapsed < seconds):
                    self.gauge.SetValue(elapsed * 5)
                    self.Update()

            self.gauge.SetValue(seconds * 5)
            self.Update()

        elif USE_WINSOUND:
            s1 = wx.Sound(FIRMWARE_WAVE)
            s1.Play(wx.SOUND_SYNC)

            self.gauge.SetLabel("")

        self.help_text.SetLabel("Finished downloading")
        self.start.Enable()
        self.cancel.Enable()

        self.Refresh()
Ejemplo n.º 3
0
def set_audio_output(choice):
    global USE_PORTAUDIO
    global USE_PYGAME
    global USE_WINSOUND
    global USE_WAVER
    global AUDIO_STRING

    choice = choice.lower()
    installed = "unknown"
    using = "unknown"

    waver_path = os.path.join(paths.get_run_dir(), "waver", "waver.exe")
    if os.path.isfile(waver_path):
        WAVER_PRESENT = True
    else:
        WAVER_PRESENT = False

    if (PORTAUDIO_PRESENT and PYGAME_PRESENT and WAVER_PRESENT):
        installed = "portaudio, pygame, waver"
    elif WAVER_PRESENT:
        installed = "waver"
    elif (PORTAUDIO_PRESENT):
        installed = "portaudio"
    elif (PYGAME_PRESENT):
        installed = "pygame"
    else:
        installed = "no extra audio backends"

    AUDIO_STRING = "(Audio installed: %s" % (installed)

    if (choice == "any"):
        if WAVER_PRESENT:
            USE_WAVER = True
            using = "waver"
        elif (PORTAUDIO_PRESENT):
            USE_PORTAUDIO = True
            using = "portaudio"
        elif (PYGAME_PRESENT):
            USE_PYGAME = True
            using = "pygame"
        else:
            USE_WINSOUND = True
            # must be windows built-in
            using = "built-in winsound"

    elif (choice == "waver"):
        if (not WAVER_PRESENT):
            print "\nERROR - selected audio 'waver' is not installed!"
            sys.exit(1)
        else:
            USE_WAVER = True
            using = choice

    elif (choice == "portaudio"):
        if (not PORTAUDIO_PRESENT):
            print "\nERROR - selected audio 'portaudio' is not installed!"
            sys.exit(1)
        else:
            USE_PORTAUDIO = True
            using = choice

    elif (choice == "pygame"):
        if (not PYGAME_PRESENT):
            print "\nERROR - selected audio 'pygame' is not installed!"
            sys.exit(1)
        else:
            USE_PYGAME = True
            using = choice

    elif (choice == "winsound"):
        if (paths.get_platform() != "win"):
            print "\nERROR - selected audio 'winsound' is not available on non-window systems"
            sys.exit(1)
        else:
            USE_WINSOUND = True
            using = "built-in winsound"

    else:
        print "\nERROR - selected audio '%s' is unknown!" % (choice)
        sys.exit(2)

    AUDIO_STRING += " -  Audio to be used: %s)" % (using)

    #print AUDIO_STRING
    return AUDIO_STRING
Ejemplo n.º 4
0
import os.path
import ConfigParser

import wx
import wx.lib.imageutils

import win_data
import paths

BRIC_NORMAL = 0
BRIC_SELECTED = 1
BRIC_DISABLED = 2

# ----------------------

BRICS = os.path.join(paths.get_run_dir(), "gui/brics")
BRIC_CONTROL = BRICS + "/control.ini"
BRICS_BIG = BRICS + "/big"
BRICS_SMALL = BRICS + "/small"


class Detail_parser(object):
    def __init__(self):
        pass


class Bric(Detail_parser):
    def __init__(self, cp_name, config_parser, basic=True):
        Detail_parser.__init__(self)
        self.cached_controls = False
Ejemplo n.º 5
0
class Data(object):
    def __init__(self):
        self.mb_bmap = None
        self.mb_overlay = None
        self.overlays = []

        self.groups = []
        self.devices = []
        self.device_dict = {}
        self.fullsize_dict = {}

data = Data()


DEVICES = os.path.join(paths.get_run_dir(), "gui/devices")
DEVICE_CONTROL = DEVICES + "/control.ini"
DEVICES_BIG = DEVICES + "/big"
DEVICES_SMALL = DEVICES + "/small"

# ---------------------------------------------------------
# Device data

# two sizes - big and not-big (small)
def load_devices(big = True):
    global data
    if (big):
        base = DEVICES_BIG
    else:
        base = DEVICES_SMALL
    base = DEVICES
Ejemplo n.º 6
0
    def on_start(self, event):
        filename = self.file_browse.GetValue()
        if (not os.path.exists(filename)):
            self.help_text.SetLabel("Error - couldn't read file: %s" % (filename,))
            return

        # Assuming that the file is the binary firmware file with all header bytes
        # already added. Just have to convert to audio and play.

        file_handle = file(filename, 'rb')
        firmware_string = file_handle.read()
        file_handle.close()
        self.download_bytes = bytearray(firmware_string)
        self.byte_count = len(self.download_bytes)

        if (USE_WINSOUND):
            self.gauge.SetLabel("")
        else:
            self.gauge.SetRange(self.byte_count)
            self.gauge.SetValue(0)

        self.help_text.SetLabel("Creating audio file.")
        self.Update()

        # convert to wav file
        convertWithPause(self.download_bytes, FIRMWARE_WAV,
                         DOWNLOAD_PAUSE_MSECS, DOWNLOAD_BYTES_BETWEEN_PAUSES);

        # can't start twice so disable this button
        self.start.Disable()
        self.cancel.Disable()
        self.help_text.SetLabel("Downloading %d bytes." % (self.byte_count,))

        if (USE_WINSOUND):
            self.gauge.SetLabel("...DOWNLOADING...")
        else:
            self.gauge.SetValue(0)
            self.gauge.Update()

        self.Update()

        time.sleep(1)

        if USE_PORTAUDIO:
            wf = wave.open("firmware.wav", 'rb')
        elif USE_WAVER:
            startupinfo = subprocess.STARTUPINFO()
            startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
            logfile_path = os.path.join(tempfile.gettempdir(), "waver.log")
            logfile = open(logfile_path, "a+")
            logfile.seek(0, os.SEEK_END)
            waver_path = os.path.join(paths.get_run_dir(), "waver", "waver.exe")
            process = subprocess.Popen([waver_path, FIRMWARE_WAV], startupinfo=startupinfo, stdout=logfile)
            process.wait()
            logfile.close()

        elif USE_PORTAUDIO:
            wf = wave.open(FIRMWARE_WAV, 'rb')
            p = pyaudio.PyAudio()

            totalFrames = wf.getnframes()
            framesRead = 0
            self.gauge.SetRange(totalFrames)
            self.gauge.SetValue(0)
            stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                            channels=wf.getnchannels(),
                            rate=wf.getframerate(),
                            output=True)
            data = wf.readframes(47)
            framesRead += 47
            if (framesRead > totalFrames):
                framesRead = totalFrames
            stream.write(data)

            while data != '':
                stream.write(data)
                self.gauge.SetValue(framesRead)
                self.Update()

                data = wf.readframes(AUDIO_CHUNK)
                framesRead += AUDIO_CHUNK
                if (framesRead > totalFrames):
                    framesRead = totalFrames

            self.gauge.SetValue(totalFrames)
            self.Update()
            correction = float(stream.get_write_available() - 32) / WAVE_SAMPLE_RATE_HZ
            time.sleep(stream.get_output_latency() - correction)
            stream.stop_stream()
            stream.close()

            p.terminate()

        elif USE_PYGAME:
            if (pygame.mixer.get_init() == None):
                pygame.mixer.init(frequency=WAVE_SAMPLE_RATE_HZ, size=8, channels=2, buffer=4096)
                pygame.mixer.init()

            s = pygame.mixer.Sound(FIRMWARE_WAV)
            seconds = s.get_length()
            # print "Sounds seconds:", seconds
            if (seconds < 1):
                seconds = 1
            self.gauge.SetRange(seconds * 5)
            self.gauge.SetValue(0)
            elapsed = 0
            s.play()
            while ((elapsed < seconds) and pygame.mixer.get_busy()):
                time.sleep(0.2)
                elapsed += 0.2
                if (elapsed < seconds):
                    self.gauge.SetValue(elapsed * 5)
                    self.Update()

            self.gauge.SetValue(seconds * 5)
            self.Update()

        elif USE_WINSOUND:
            s1 = wx.Sound(FIRMWARE_WAVE)
            s1.Play(wx.SOUND_SYNC)

            self.gauge.SetLabel("")

        self.help_text.SetLabel("Finished downloading")
        self.start.Enable()
        self.cancel.Enable()

        self.Refresh()
Ejemplo n.º 7
0
    def on_start(self, event):
        # can't start twice so disable this button
        self.start.Disable()
        self.cancel.Disable()
        self.help_text.SetLabel("Downloading %d bytes." % (self.byte_count,))

        if (USE_WINSOUND):
            self.gauge.SetLabel("...DOWNLOADING...")
        else:
            self.gauge.SetValue(0)
            self.gauge.Update()

        self.Update()

        time.sleep(1)
        WAV_FILE = os.path.join(paths.get_store_dir(), "program.wav")

        if USE_WAVER:
            startupinfo = subprocess.STARTUPINFO()
            startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
            logfile_path = os.path.join(tempfile.gettempdir(), "waver.log")
            logfile = open(logfile_path, "a+")
            logfile.seek(0, os.SEEK_END)
            waver_path = os.path.join(paths.get_run_dir(), "waver", "waver.exe")
            process = subprocess.Popen([waver_path, WAV_FILE], startupinfo=startupinfo, stdout=logfile)
            process.wait()
            logfile.close()

        elif USE_PORTAUDIO:
            wf = wave.open(WAV_FILE, 'rb')
            p = pyaudio.PyAudio()

            totalFrames = wf.getnframes()
            framesRead = 0
            self.gauge.SetRange(totalFrames)
            self.gauge.SetValue(0)
            stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                            channels=wf.getnchannels(),
                            rate=wf.getframerate(),
                            output=True)
            data = wf.readframes(47)
            framesRead += 47
            # print framesRead
            if (framesRead > totalFrames):
                framesRead = totalFrames
            stream.write(data)

            while data != '':
                stream.write(data)
                self.gauge.SetValue(framesRead)
                self.Update()

                data = wf.readframes(AUDIO_CHUNK)
                framesRead += AUDIO_CHUNK
                if (framesRead > totalFrames):
                    framesRead = totalFrames
                #print framesRead

            self.gauge.SetValue(totalFrames)
            self.Update()
            correction = float(stream.get_write_available() - 32)/WAVE_SAMPLE_RATE_HZ
            #print correction
            time.sleep(stream.get_output_latency() - correction)
            stream.stop_stream()
            stream.close()
            p.terminate()


        elif USE_PYGAME:
            if (pygame.mixer.get_init() == None):
                pygame.mixer.init(frequency=WAVE_SAMPLE_RATE_HZ, size=8, channels=2, buffer=4096)
                pygame.mixer.init()

            s = pygame.mixer.Sound(WAV_FILE)
            seconds = s.get_length()
            #print "Sounds seconds:", seconds
            if (seconds < 1):
                seconds = 1
            self.gauge.SetRange(seconds * 5)
            self.gauge.SetValue(0)
            elapsed = 0
            s.play()
            while ((elapsed < seconds) and pygame.mixer.get_busy()):
                time.sleep(0.2)
                elapsed += 0.2
                if (elapsed < seconds):
                    self.gauge.SetValue(elapsed * 5)
                    self.Update()

            self.gauge.SetValue(seconds * 5)
            self.Update()

        elif USE_WINSOUND:
            s1 = wx.Sound(WAV_FILE)
            s1.Play(wx.SOUND_SYNC)

            self.gauge.SetLabel("")


        self.help_text.SetLabel("Finished downloading")
        self.start.Enable()
        self.cancel.Enable()

        self.Refresh()
Ejemplo n.º 8
0
def set_audio_output(choice):
    global USE_PORTAUDIO
    global USE_PYGAME
    global USE_WINSOUND
    global USE_WAVER
    global AUDIO_STRING
    
    choice = choice.lower()
    installed = "unknown"
    using = "unknown"

    waver_path = os.path.join(paths.get_run_dir(), "waver", "waver.exe")
    if os.path.isfile(waver_path):
        WAVER_PRESENT = True
    else:
        WAVER_PRESENT = False

    if (PORTAUDIO_PRESENT and PYGAME_PRESENT and WAVER_PRESENT):
        installed = "portaudio, pygame, waver"
    elif WAVER_PRESENT:
        installed = "waver"
    elif (PORTAUDIO_PRESENT):
        installed = "portaudio"
    elif (PYGAME_PRESENT):
        installed = "pygame"
    else:
        installed = "no extra audio backends"

    AUDIO_STRING = "(Audio installed: %s" % (installed)
    
    if (choice == "any"):
        if WAVER_PRESENT:
            USE_WAVER = True
            using = "waver"
        elif (PORTAUDIO_PRESENT):
            USE_PORTAUDIO = True
            using = "portaudio"
        elif (PYGAME_PRESENT):
            USE_PYGAME = True
            using = "pygame"
        else:
            USE_WINSOUND = True
            # must be windows built-in
            using = "built-in winsound"

    elif (choice == "waver"):
        if (not WAVER_PRESENT):
            print "\nERROR - selected audio 'waver' is not installed!"
            sys.exit(1)
        else:
            USE_WAVER = True
            using = choice

    elif (choice == "portaudio"):
        if (not PORTAUDIO_PRESENT):
            print "\nERROR - selected audio 'portaudio' is not installed!"
            sys.exit(1)
        else:
            USE_PORTAUDIO = True
            using = choice

    elif (choice == "pygame"):
        if (not PYGAME_PRESENT):
            print "\nERROR - selected audio 'pygame' is not installed!"
            sys.exit(1)
        else:
            USE_PYGAME = True
            using = choice

    elif (choice == "winsound"):
        if (paths.get_platform() != "win"):
            print "\nERROR - selected audio 'winsound' is not available on non-window systems"
            sys.exit(1)
        else:
            USE_WINSOUND = True
            using = "built-in winsound"
            
    else:
        print "\nERROR - selected audio '%s' is unknown!" % (choice)
        sys.exit(2)

    AUDIO_STRING +=" -  Audio to be used: %s)" % (using)

    #print AUDIO_STRING
    return AUDIO_STRING
Ejemplo n.º 9
0
import os.path
import ConfigParser

import wx
import wx.lib.imageutils

import win_data
import paths

BRIC_NORMAL = 0
BRIC_SELECTED = 1
BRIC_DISABLED = 2

# ----------------------

BRICS = os.path.join(paths.get_run_dir(), "gui/brics")
BRIC_CONTROL = BRICS + "/control.ini"
BRICS_BIG = BRICS + "/big"
BRICS_SMALL = BRICS + "/small"


class Detail_parser(object):
    def __init__(self):
        pass

class Bric(Detail_parser):
    def __init__(self, cp_name, config_parser, basic=True):
        Detail_parser.__init__(self)
        self.cached_controls = False

        self.valid = False