#!/usr/bin/python import pygame import time import math pygame.mixer.pre_init(22050,-16,1) pygame.init() pygame.font.init() pygame.mixer.init() size = 640,480 snd = pygame.mixer.Sound('KDE_Water_Drop.ogg') arr = pygame.sndarray.array(snd) show = [0,len(arr)-1] pygame.display.set_mode(size,0,24) sur = pygame.display.get_surface() wavesur = pygame.Surface(size) sonosur = pygame.Surface(size) def draw_wave(): wavesur.fill((0,0,0)) lasty = -1 for x in xrange(wavesur.get_width()): val = arr[show[0] + int(float(x) / wavesur.get_width() * (show[1]-show[0]))] sign = cmp(val,0) try: val = math.log(abs(val)+1) * sign except: val = 0 y = int(val/math.log(32768) * size[1]/4 + size[1]/4) if lasty == -1: lasty = y #wavesur.set_at((x,y), [255,255,255]) pygame.draw.line(wavesur,[255,255,255],(x-1,lasty),(x,y)) lasty = y sur.blit(wavesur, (0,0)) pygame.display.flip() draw_wave() while True: event = pygame.event.wait() print event print event.type if event.type == pygame.QUIT: break elif event.type == pygame.KEYDOWN: step = (show[1] - show[0]) / 10 if event.key == pygame.K_UP: if show[1]-show[0] > size[0]/2: show = [show[0]+step, show[1]-step] elif event.key == pygame.K_DOWN: left = max(0, show[0]-step) right = min(len(arr)-1,show[1]+step) show = [left,right] elif event.key == pygame.K_LEFT: left = max(0, show[0] - step) show[1] -= show[0] - left show[0] = left elif event.key == pygame.K_RIGHT: right = min(len(arr)-1, show[1]+step) show[0] += right - show[1] show[1] = right elif event.key == pygame.K_ESCAPE or event.key == pygame.K_q: break draw_wave() print show