rendered paste body#!/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