tkinter+winsound=synthesizer?

Fragen zu Tkinter.
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

tkinter+winsound=synthesizer?

Beitragvon Earthnuker » Dienstag 19. August 2008, 18:38

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 :)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 19. August 2008, 19:32

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?
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Dienstag 19. August 2008, 20:01

ich würde es eher nach dem schema:

Code: Alles auswählen

while maustaste_ist_gedrückt=1 AND maus_ist_in_fenster=1 do:
     Beep(ypos,xpos)

machen
P.S:ich hab noch nicht wirklich mit tkinter gearbeitet also brauche ich evtl. etwas hilfe bei mausposition erfassen und in variablen übergeben
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 19. August 2008, 20:08

Und viel mit Python auch nicht ... :wink:
- 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 ...
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Dienstag 19. August 2008, 20:17

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 19. August 2008, 20:38

Earthnuker hat geschrieben:wofür könnte ich die xpos dann verwende?
irgendwie für effekte(modulation, schwebung)?


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:mein egentliches problem ist eigentlich die mausposition in einem vorgegebenen fenster abzufragen und in eine variable zu schreiben


Wenn das dein eigentliches Problem ist - was an sich keins ist -, dann zeig doch mal den restlichen Code.

Als Lektüre für das Event-Handling empfehle ich
http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Dienstag 19. August 2008, 20:55

ich hab noch keinen code, darum brauche ich ja hilfe(bin noch n python noob) und mit tkinter hab ich noch nix gemacht
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Dienstag 19. August 2008, 21:34

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/all_programs.html
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Mittwoch 20. August 2008, 15:45

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 20. August 2008, 16:08

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


Hast du denn schon gelesen (s.o.)? - Vermutlich nicht. Sonst wäre zumindest Problem 1 schnell erledigt.

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 ...
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Mittwoch 20. August 2008, 18:37

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 20. August 2008, 18:44

Lies doch die Tkinter-Dokumentation oder nutze die Suchfunktion.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Donnerstag 21. August 2008, 19:00

Hier mein Script,

Code: Alles auswählen

from Tkinter import *
from winsound import *

master = Tk()

w = Canvas(master, width=500, height=500)
w.pack()

mainloop()

:roll:
Jetz muss ich nurnoch irgendwie die Mausposition erfassen
und ob die maus innerhalb des fensters ist
damit wäre problem 1 gelöst
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Donnerstag 21. August 2008, 19:38

Import per * ist meistens nicht gut. Hier zum Beispiel.
Dadurch verlierst du den Überblick im Namensraum, überschreibst ggf. unabsichtlich bestimmte Funktionen o.ä.

Besser:

Code: Alles auswählen

import Tkinter as tk
import winsound


"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.
Earthnuker
User
Beiträge: 12
Registriert: Dienstag 19. August 2008, 17:09
Kontaktdaten:

Beitragvon Earthnuker » Donnerstag 21. August 2008, 20:26

Code: Alles auswählen

from Tkinter import *
import winsound
master = Tk()
Synth = Canvas(master, width=500, height=500)
Synth.pack()
mainloop()

Besser?

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)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder