Seite 1 von 1

Tastatursignal auslesen ohne raw_input

Verfasst: Mittwoch 15. November 2006, 19:24
von bierfreund
Guten Tag,

ich bin nicht mehr ganz so der Anfänger bei python, doch ich brauche immer noch äußere Unterstützungen.

Mein Problem bzw. meine Frage ist Folgende:

Kann ich das Tastatursignal auslesen? also meine nicht mit raw_input(), da man dies mit ENTER bestätigen muss. Ich will aber z.B dass ich die Taste "a" anklicke und ein Song abgespielt wird, ohne, dass ich Enter drücken muss.

Zudem bricht die sounddatei immer wieder ab, wenn 1 1 1 1 drücke, klar, weil sie immer wieder von vorne abgespielt wird. kann man das irgendwie verhindern, sodass sich der sound überlappt?






mein Programm sieht momentan so aus:

Code: Alles auswählen

from pygame import mixer 

mixer.init(44100)
d1 = mixer.Sound("d1.wav")
d2 = mixer.Sound("d2.wav")
while 1:
    print "Hallo, bitte Song auswählen"
    text= raw_input()
    if(text == "1"):
        d1.play() 
    if(text == "2"):
        d2.play()
    


Verfasst: Mittwoch 15. November 2006, 21:09
von Schildi
hi! ich würd's so machen:

Code: Alles auswählen

from pygame import mixer 

mixer.init(44100)
d1 = mixer.Sound("d1.wav")
d2 = mixer.Sound("d2.wav")
while 1:
    for event in pygame.event.get():
       if event.type == pygame.QUIT:
           sys.exit()
       if event.type == KEYDOWN:
           if event.key == K_a:
               d1.play()
           if event.key == K_b:
               d2.play()
mfg schildi

Verfasst: Mittwoch 15. November 2006, 21:53
von BlackJack
Wenn's portabel sein soll, brauchst Du noch ein Fenster damit die Tastendrücke auch irgendwo "eingegeben" werden können.

Und eigentlich sollten per Voreinstellung bis zu 8 Sounds parallel abgespielt werden können. Wenn das nicht reicht, kann man mehr Kanäle hinzufügen.

Verfasst: Mittwoch 15. November 2006, 22:01
von rolgal_reloaded
...ist pygame ne gute Sache, um mit Sounds zu hantieren?

Auch manipulieren, erzeugen usw.?

Oder gibts da noch andere interessante Teile?

Die Thematik interessiert mich immer mehr.

LG

rolgal_reloaded

Verfasst: Mittwoch 15. November 2006, 22:14
von bierfreund
danke mal für die antworten, aber bei mir tritt ein Fehler auf:
Traceback (most recent call last):
File "C:/WINDOWS/Desktop/nnn2.py", line 7, in ?
for event in pygame.event.get():
error: video system not initialized
>>>
und mit deinem quelltext ist der Fehler, dass die Tondatei unterbrochen wird und neuabgespielt wird immer noch nicht behoben, oder. Will, dass Die Tondateien sich überlappen und nicht die vorrige Tondatei abgebrochen wird

Verfasst: Mittwoch 15. November 2006, 23:12
von Schildi
hm...also wegen dem fehler...versuch mal ganz oben

Code: Alles auswählen

from pygame.locals import *
und auch noch

Code: Alles auswählen

import sys, pygame
hinzuschreiben. bin mir net sicher, aber es müssten dann eigentlich funktionieren.

wegen dem problem mit dem unterbrechen...sry, aber da hätte ich so jetz auf anhieb auch keine lösung parat... :wink: kann aber bestimmt jemand anders lösen?

mfg schildi

Verfasst: Mittwoch 15. November 2006, 23:43
von BlackJack
Wie ich schon sagte: Du musst auch ein Grafikfenster öffnen das den Fokus bekommen kann, damit die Tastatureingaben an die Anwendung geschickt werden können. Wenn man das ohne Fenster startet dann ist das Terminal oder die Python-Shell das Programm, welches weiterhin die Tastendrücke verarbeitet.

Code: Alles auswählen

import sys
import pygame


def main():
    pygame.display.init()
    pygame.mixer.init(44100)
    pygame.display.set_mode((10, 10))
    
    sound = pygame.mixer.Sound('test.wav')

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_1:
                    sound.play()
                elif event.key == pygame.K_ESCAPE:
                    sys.exit()

Verfasst: Donnerstag 16. November 2006, 22:44
von bierfreund
also mit Grafikfenster meine ne Grafikoberfläche. hmm, hab da nicht so die ahnung mit Grafikob erflächen, aber werde mich mal durchs Forum suchen, thx