hi
ich bin neu hier und hab mich gefragt ob es vieleicht möglich wäre mit tkinter und winsound einen synthesizer zu schreiben
ich stelle mir das so vor:
-maussteuerung
-ein fenster
-x-position der maus im fenster=tonhöhe
-y-position der maus im fenster=tonlänge
-ton wird nur ausgegeben wen man die maustaste drückt und gedrückt hält
ich hoffe das ist nicht zu kompliziert und mir kann jemand helfen
danke im vorraus
tkinter+winsound=synthesizer?
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
Hallo, willkommen im Forum!
Ja, ich denke mittels Beep() sollte das funktionieren. Testen kann ich es mangels Windows-System allerdings nicht.
Und: Für Tonhöhe und -länge würde ich x und y vertauschen.
Evtl. wird der Aspekt "gedrückt hält" problematisch.
Warum nicht einfach nur einmal kurz klicken, um den Ton anzustoßen?
Ja, ich denke mittels Beep() sollte das funktionieren. Testen kann ich es mangels Windows-System allerdings nicht.
Und: Für Tonhöhe und -länge würde ich x und y vertauschen.
Evtl. wird der Aspekt "gedrückt hält" problematisch.
Warum nicht einfach nur einmal kurz klicken, um den Ton anzustoßen?
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
ich würde es eher nach dem schema:
machen
P.S:ich hab noch nicht wirklich mit tkinter gearbeitet also brauche ich evtl. etwas hilfe bei mausposition erfassen und in variablen übergeben
Code: Alles auswählen
while maustaste_ist_gedrückt=1 AND maus_ist_in_fenster=1 do:
Beep(ypos,xpos)
P.S:ich hab noch nicht wirklich mit tkinter gearbeitet also brauche ich evtl. etwas hilfe bei mausposition erfassen und in variablen übergeben
Und viel mit Python auch nicht ...
- while .. do gibt es in Python nicht
- = ist ein Zuweisungsoperator, kein Vergleichsoperator
Wenn du den Ton so lange hören willst, wie die Maus gedrückt ist, wofür brauchst du dann eine eingestellte Tonlänge?
Genau da sehe ich das Problem: Du musst beim Aufruf von Beep() eine Tonlänge übergeben und kannst den Ton nicht einfach so lange halten, bis ein bestimmtes Ereignis eingetreten ist. Was man probieren könnte wäre, Beep() immer wieder mit ganz kurzen Zeitintervallen aufzurufen.
Wenn ich mich an alte Pascal-Zeiten zurückerinnere (da gibt es eine sound()-Funktion in der Unit crt mit ähnlicher Funktionalität), dann führte das da aber im wesentlichen zu einer Abfolge von Knacklauten ...
- while .. do gibt es in Python nicht
- = ist ein Zuweisungsoperator, kein Vergleichsoperator
Wenn du den Ton so lange hören willst, wie die Maus gedrückt ist, wofür brauchst du dann eine eingestellte Tonlänge?
Genau da sehe ich das Problem: Du musst beim Aufruf von Beep() eine Tonlänge übergeben und kannst den Ton nicht einfach so lange halten, bis ein bestimmtes Ereignis eingetreten ist. Was man probieren könnte wäre, Beep() immer wieder mit ganz kurzen Zeitintervallen aufzurufen.
Wenn ich mich an alte Pascal-Zeiten zurückerinnere (da gibt es eine sound()-Funktion in der Unit crt mit ähnlicher Funktionalität), dann führte das da aber im wesentlichen zu einer Abfolge von Knacklauten ...
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
wofür könnte ich die xpos dann verwende?
irgendwie für effekte(modulation, schwebung)?
mein egentliches problem ist eigentlich die mausposition in einem vorgegebenen fenster abzufragen und in eine variable zu schreiben
irgendwie für effekte(modulation, schwebung)?
mein egentliches problem ist eigentlich die mausposition in einem vorgegebenen fenster abzufragen und in eine variable zu schreiben
So wie ich das sehe, gibt das winsound-Modul soviel gar nicht her. Mit Beep() wird das allenfalls ein bisschen Spielerei. Ein "Synthesizer" - wie in deinem ersten Post zu lesen - wird das damit sicher nicht.Earthnuker hat geschrieben:wofür könnte ich die xpos dann verwende?
irgendwie für effekte(modulation, schwebung)?
Wenn das dein eigentliches Problem ist - was an sich keins ist -, dann zeig doch mal den restlichen Code.Earthnuker hat geschrieben:mein egentliches problem ist eigentlich die mausposition in einem vorgegebenen fenster abzufragen und in eine variable zu schreiben
Als Lektüre für das Event-Handling empfehle ich
http://infohost.nmt.edu/tcc/help/pubs/t ... vents.html
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
ich hab noch keinen code, darum brauche ich ja hilfe(bin noch n python noob) und mit tkinter hab ich noch nix gemacht
Na, dann lies dich doch erstmal ein ...
Einstieg in Python:
http://docs.python.org/tut/tut.html
Einstieg in Tkinter:
http://www.ferg.org/thinking_in_tkinter ... grams.html
Einstieg in Python:
http://docs.python.org/tut/tut.html
Einstieg in Tkinter:
http://www.ferg.org/thinking_in_tkinter ... grams.html
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
mein eigentliches problem ist es
1.Das Fenster zu machen und
2.die Mausposition im Fenster zu erkennen und in eine Variable zu übertragen
P.S:ja, ich weiss da ich mich wiederhohle
1.Das Fenster zu machen und
2.die Mausposition im Fenster zu erkennen und in eine Variable zu übertragen
P.S:ja, ich weiss da ich mich wiederhohle
Hast du denn schon gelesen (s.o.)? - Vermutlich nicht. Sonst wäre zumindest Problem 1 schnell erledigt.Earthnuker hat geschrieben:mein eigentliches problem ist es
1.Das Fenster zu machen und
2.die Mausposition im Fenster zu erkennen und in eine Variable zu übertragen
Ich glaube nicht, dass dir irgendjemand den fertigen Code hier präsentieren wird. Lies dich doch mal ein, zeig uns deinen Code und dann sehen wir mal ...
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
eventuell könnte mir ja jemand mal n anhaltspunkt geben, da ich nicht weiss wie ich anfangen soll -.-
und des mit dem n fenster machen un mmausposition erfassen, da peil ich nich wie ich des hinkrieg
:K
und des mit dem n fenster machen un mmausposition erfassen, da peil ich nich wie ich des hinkrieg
:K
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
Hier mein Script,
Jetz muss ich nurnoch irgendwie die Mausposition erfassen
und ob die maus innerhalb des fensters ist
damit wäre problem 1 gelöst
Code: Alles auswählen
from Tkinter import *
from winsound import *
master = Tk()
w = Canvas(master, width=500, height=500)
w.pack()
mainloop()
Jetz muss ich nurnoch irgendwie die Mausposition erfassen
und ob die maus innerhalb des fensters ist
damit wäre problem 1 gelöst
Import per * ist meistens nicht gut. Hier zum Beispiel.
Dadurch verlierst du den Überblick im Namensraum, überschreibst ggf. unabsichtlich bestimmte Funktionen o.ä.
Besser:
"w" ist sicher kein guter Bezeichner für ein Canvas-Widget: Es enthält keinerlei Informationen darüber, was sich dahinter verbirgt.
Und zur Erfassung der Mausposition habe ich dir weiter oben schon einen Link zum Lesen angeben. Es geht ja hier um "Events" und wie die in Tkinter behandelt werden, musst du erstmal verstehen.
Dadurch verlierst du den Überblick im Namensraum, überschreibst ggf. unabsichtlich bestimmte Funktionen o.ä.
Besser:
Code: Alles auswählen
import Tkinter as tk
import winsound
Und zur Erfassung der Mausposition habe ich dir weiter oben schon einen Link zum Lesen angeben. Es geht ja hier um "Events" und wie die in Tkinter behandelt werden, musst du erstmal verstehen.
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
Code: Alles auswählen
from Tkinter import *
import winsound
master = Tk()
Synth = Canvas(master, width=500, height=500)
Synth.pack()
mainloop()
p.S: in dem tkinte tutorial steht nich wie man die mausposition erfasst
gibt's da irgendwie vordefinierte variablen?
PP.S:notfalls kann die tonhöhe und tonlänge auch über zwei schieberegler geändert werden(falls da einfacher ist)
Nicht viel besser.Earthnuker hat geschrieben:Besser?
p.S: in dem tkinte tutorial steht nich wie man die mausposition erfasst
gibt's da irgendwie vordefinierte variablen?
- Immer noch mit Sternchen importiert.
- In Python werden nur Klassenbezeichner per Konvention groß geschrieben
- synth ist besser als w, aber geht noch besser
Sicher steht's im Tutorial. Die Einstiegsseite zur Ereignisbehandlung ist doch oben verlinkt. Da musst du dann mal ein paar Seiten weiter blättern und lesen, lesen, lesen ...
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
hab mich jetzt entschieden das ganze mit Pygame zu machen:
so, fertig hab das ganze einfach auf nem fertigem scripr aufgebaut
mein einziges problem ist jetz das mit dem geklickt halten
Code: Alles auswählen
import pygame
from winsound import *
from pygame.locals import *
def main():
pygame.init()
pygame.display.set_mode((800,600))
pygame.display.set_caption('Testing')
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
if event.type == KEYDOWN and event.key == K_ESCAPE:
running = False
if 1:
x, y=pygame.mouse.get_pos()
if y>37:
Beep(y,x)
pygame.display.quit()
if __name__ == '__main__':
main()
mein einziges problem ist jetz das mit dem geklickt halten
-
- User
- Beiträge: 12
- Registriert: Dienstag 19. August 2008, 17:09
- Kontaktdaten:
übrigens danke für die hilfe
p.s:des mit dem das der ton nur ausgegeben wird wenn die maustaste gedrückt gehalten wird krieg ich irgendwie nicht hin
zeile 17 ist das problem
mit while gehts nicht
p.s:des mit dem das der ton nur ausgegeben wird wenn die maustaste gedrückt gehalten wird krieg ich irgendwie nicht hin
Code: Alles auswählen
import pygame
from winsound import *
from pygame.locals import *
xwin=raw_input("x size of the window: ")
ywin=raw_input("y size of the window: ")
def main():
pygame.init()
pygame.display.set_mode((int(xwin),int(ywin)))
pygame.display.set_caption('Testing')
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
if event.type == KEYDOWN and event.key == K_ESCAPE:
running = False
if event.type == MOUSEBUTTONDOWN:
x, y=pygame.mouse.get_pos()
if y>37:
Beep(y,x)
pygame.display.quit()
if __name__ == '__main__':
main()
mit while gehts nicht