Parcourir la source

Stabilized GUI in client

Grissess il y a 9 ans
Parent
commit
49a979f28b
1 fichiers modifiés avec 37 ajouts et 7 suppressions
  1. 37 7
      client.py

+ 37 - 7
client.py

@@ -12,6 +12,7 @@ import optparse
 import array
 import random
 import threading
+import thread
 
 from packet import Packet, CMD, stoi
 
@@ -24,6 +25,10 @@ parser.add_option('-p', '--port', dest='port', type='int', default=13676, help='
 parser.add_option('-r', '--rate', dest='rate', type='int', default=44100, help='Set the sample rate of the audio device')
 parser.add_option('-V', '--volume', dest='volume', type='float', default=1.0, help='Set the volume factor (>1 distorts, <1 attenuates)')
 parser.add_option('-G', '--gui', dest='gui', default='', help='set a GUI to use')
+parser.add_option('--pg-fullscreen', dest='fullscreen', action='store_true', help='Use a full-screen video mode')
+parser.add_option('--pg-samp-width', dest='samp_width', type='int', help='Set the width of the sample pane (by default display width / 2)')
+parser.add_option('--pg-bgr-width', dest='bgr_width', type='int', help='Set the width of the bargraph pane (by default display width / 2)')
+parser.add_option('--pg-height', dest='height', type='int', help='Set the height of the window or full-screen video mode')
 
 options, args = parser.parse_args()
 
@@ -61,11 +66,28 @@ def pygame_notes():
     import pygame.gfxdraw
     pygame.init()
 
-    SAMP_WIDTH = 512
-    BGR_WIDTH = 512
-    HEIGHT = 1024
-
-    disp = pygame.display.set_mode((SAMP_WIDTH + BGR_WIDTH, HEIGHT))
+    dispinfo = pygame.display.Info()
+    DISP_WIDTH = 640
+    DISP_HEIGHT = 480
+    if dispinfo.current_h > 0 and dispinfo.current_w > 0:
+        DISP_WIDTH = dispinfo.current_w
+        DISP_HEIGHT = dispinfo.current_h
+
+    SAMP_WIDTH = DISP_WIDTH / 2
+    if options.samp_width > 0:
+        SAMP_WIDTH = options.samp_width
+    BGR_WIDTH = DISP_WIDTH / 2
+    if options.bgr_width > 0:
+        NGR_WIDTH = options.bgr_width
+    HEIGHT = DISP_HEIGHT
+    if options.height > 0:
+        HEIGHT = options.height
+
+    flags = 0
+    if options.fullscreen:
+        flags |= pygame.FULLSCREEN
+
+    disp = pygame.display.set_mode((SAMP_WIDTH + BGR_WIDTH, HEIGHT), flags)
 
     WIDTH, HEIGHT = disp.get_size()
     SAMP_WIDTH = WIDTH / 2
@@ -113,8 +135,12 @@ def pygame_notes():
         disp.blit(sampwin, (BGR_WIDTH, 0))
         pygame.display.flip()
 
-        for i in pygame.event.get():
-            pass  # Todo
+        for ev in pygame.event.get():
+            if ev.type == pygame.KEYDOWN:
+                if ev.key == pygame.K_ESCAPE:
+                    thread.interrupt_main()
+                    pygame.quit()
+                    exit()
 
         clock.tick(60)
 
@@ -257,8 +283,12 @@ def gen_data(data, frames, time, status):
     if FREQ == 0:
         PHASE = 0
         if LAST_SAMP == 0:
+            if options.gui:
+                LAST_SAMPLES.extend([0]*frames)
             return (Z_SAMP*frames, pyaudio.paContinue)
         fdata = lin_seq(LAST_SAMP, 0, frames)
+        if options.gui:
+            LAST_SAMPLES.extend(fdata)
         LAST_SAMP = fdata[-1]
         return (to_data(fdata), pyaudio.paContinue)
     fdata, PHASE = samps(FREQ, PHASE, frames)