Tastatursignal auslesen ohne raw_input

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bierfreund
User
Beiträge: 8
Registriert: Mittwoch 15. November 2006, 19:15

Mittwoch 15. November 2006, 19:24

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()
    

Schildi
User
Beiträge: 30
Registriert: Freitag 19. Mai 2006, 22:23
Kontaktdaten:

Mittwoch 15. November 2006, 21:09

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
by: Schildi
BlackJack

Mittwoch 15. November 2006, 21:53

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.
rolgal_reloaded
User
Beiträge: 312
Registriert: Dienstag 24. Oktober 2006, 19:31

Mittwoch 15. November 2006, 22:01

...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
bierfreund
User
Beiträge: 8
Registriert: Mittwoch 15. November 2006, 19:15

Mittwoch 15. November 2006, 22:14

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
Schildi
User
Beiträge: 30
Registriert: Freitag 19. Mai 2006, 22:23
Kontaktdaten:

Mittwoch 15. November 2006, 23:12

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
by: Schildi
BlackJack

Mittwoch 15. November 2006, 23:43

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()
bierfreund
User
Beiträge: 8
Registriert: Mittwoch 15. November 2006, 19:15

Donnerstag 16. November 2006, 22:44

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
Antworten