2017-12-06 4 views
0

Ich habe einen Code, wo das Drücken einer Taste einen vom Computer erzeugten Ton reproduziert, meine Sorge ist, wie kann ich die Schlüssel in der Reihenfolge, in der sie gedrückt wurden, in einer Liste speichern und ausdrucken? HierKann ich die Tastatureingabe in einer Liste speichern?

ist der Code:

from array import array 
import pygame 
from pygame.mixer import Sound, get_init, pre_init 

class Note(pygame.mixer.Sound): 

def __init__(self, frequency, volume=.1): 
    self.frequency = frequency 
    Sound.__init__(self, self.build_samples()) 
    self.set_volume(volume) 

def build_samples(self): 
    period = int(round(get_init()[0]/self.frequency)) 
    samples = array("h", [0] * period) 
    amplitude = 2 ** (abs(get_init()[1]) - 1) - 1 
    for time in range(period): 
     if time < period/2: 
      samples[time] = amplitude 
     else: 
      samples[time] = -amplitude 
    return samples 
pre_init(44100, -16, 1, 1024) 
pygame.init() 
screen = pygame.display.set_mode([640, 480], 0) 

sounds = {} 
keymap = {pygame.K_p: 880, pygame.K_r: 440} 

while True: 
    key_pressed=[] 
    evt = pygame.event.wait() 
    if evt.type == pygame.QUIT: 
     break 
    elif evt.type == pygame.KEYDOWN: 
     if evt.key in keymap: 
      note = Note(keymap[evt.key]) 
      note.play(-1) 
      sounds[evt.key] = note 
      key_pressed.append(note) 
    elif evt.type == pygame.KEYUP: 
     if evt.key in sounds: 
      sounds.pop(evt.key).stop() 
+2

Es ist wie Sie es fast habe aussieht, außer dass Sie an der Spitze der Schleife auf eine leere Liste zurückzusetzen 'key_pressed' zurück. Versuchen Sie, diese Anweisung außerhalb der Schleife zu verschieben. –

Antwort

0

Hier ist das Problem !!!

while True: 
    key_pressed=[] 

und hier ist die Lösung:

key_pressed_list = key_pressed 
print(key_pressed_list) 
Verwandte Themen