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()
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()
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
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
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
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()
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()
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
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