Notationsprogramm

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.
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Dienstag 15. Februar 2011, 16:31

Hallo.
Ich bin gerade in der 11. Klasse (Q11 in Bayern) und wir müssen in unsrem W-Seminar eine Seminararbeit schreiben. Ich habe im W-Seminar Informatik und in unsrer Seminararbeit müssen wir ein Prgramm mit Python schreiben. Ich bin sehr musikbegeistert und hab mich ohne Nachzudenken :wink: für ein Notationsprogramm entschieden (wie sibelius, Guitar pro usw..) . Mein Lehrer fand die Idee gut aber ich hab jetzt keine Ahnung wie ich es umsetzen soll.. Wir arbeiten mit python 3.1 und eclipse. ich wollt mich auf sehr wenig erstmal beschränken aber der Anfang fällt mir schon soo schwer. Ich suche im Internet immer stundenlang und finde nichts für Notationsprogramme. Ich wollt anfangen mit einem fenster (das hab ich schon mit Tkinter gemacht , 3 Zeilen :DD) in dem Notenzeilen sind und ich mit der tastatur die noten eingeben kann.( c für die Note C usw.) Aber wie soll ich das umsetzten? pygame, tkinter canvas?? Es wäre gut wenn ich die noten später auch noch "auslesen" könnte, weil ich es irgendwann eigentlich auch noch abspielen wollte. (Mal schauen wie weit ich komm). Ich wär sehr froh um Hilfe. :)

Liebe Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 15. Februar 2011, 16:43

Klingt für mich schon recht aufwendig. Da es wohl für kaum ein Toolkit fertige UI-Elemente für die Noten und diese Striche (wie heißt das doch gleich? :-D ) geben dürfte, musst Du da ja schon am Anfang viel Arbeit investieren, um da eine saubere API zu entwickeln. Prinzipiell ist das natürlich möglich, imho aber recht aufwendig.

Wie steht es denn mit Deinen Vorkenntnissen? Hast Du schon Erfahrung mit GUI-Programmierung?

Als Alternative könntest Du auch ein UI für Setzprogramme wie "abc" schreiben. Damit erstellst Du dann ein PS oder ggf. PDF und bindest das wieder in die Oberfläche ein. Da steckt dann ja auch schon ein wenig Know-How drin, vor allem viel Kommunikation via Subprocess usw. Habe mit "abc" auch nur einmal gearbeitet, aber evtl. reicht das für kleinere Sachen auch aus, das in Echtzeit zu generieren.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 15. Februar 2011, 16:54

Ich stimme zu, dass das Ganze sehr schnell sehr aufwendig wird; insbesondere wenn du die Musik auch noch abspielen willst, d.h. das Programm die Noten verstehen muss anstatt einfach nur Grafikobjekte irgendwo hinzumalen. Fuer lezteres wuerde ja eine Art von speziellem Zeichenprogramm "ausreichen". Falls du an bestehende Setzprogramme anbauen willst, werfe ich auch nochmal Lilypond in den Raum. Leider ist es nicht in Python geschrieben, aber vielleicht kannst du ja was drumrum basteln?

Einfacher waere es vielleicht, ein Programm zu schreiben, das Musiktexte und Akkorde huebsch anordnet und die Akkorde dann abspielt?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
problembär

Dienstag 15. Februar 2011, 17:29

Ich denke auch, Du hast Dir da viel zu viel vorgenommen (und Dein Lehrer scheint auch nicht richtig einschätzen zu können, was für euch machbar wäre und was nicht).

Du kannst Dich ja mal hier

http://wiki.python.org/moin/PythonInMusic

umsehen, was es prinzipiell so gibt und wie umfangreich das jeweils ist.

Gruß
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Dienstag 15. Februar 2011, 17:40

Also ich habe python erst in diesem jahr eben im w-seminar kennengelernt und mit Referaten wurden kurz wichtige Sachen wie Klassen, Tkinter, pygame kurz vorgestellt. Ich hab zum Beispiel eins über Modularisierung gehalten. :wink: Seit der 10. Klasse habe ich in Informatik mit Java (BlueJ) gearbeitet und nun kam eben im w-seminar Programmieren mit python dran.
Besser kann ichs nicht beschreiben wie viel Grundkenntnisse ich habe. :wink:

Ich habe bis November zeit aber es sollte auf jeden Fall nicht zu aufwändig werden ;/
ich hab mir schon gedacht dass ich die noten und die notenzeilen erzeuge (z.B in Photoshop oder indesign) ud dann versuche an der richtigen Stelle einfüge. Ich müsst halt iwie eine 2d grafik erstellen und die im programm verändern können. Mit Tastatureingaben oder buttons von Tkinter. Und das Programm soll halt verstehen was es gemacht hat. (z.B dass es jetzt eine halbe note eingefügt hat und 2 viertelnoten und dann der Takt aus ist.)
Ich wollte jetzt eben wissen wie ich am besten so eine Darstellung erzeugen kann.

Das Abspielen ist nicht so wichtigste. Wenns nicht möglich ist, dann ist es auch nicht so schlimm. Wär halt nur schön :wink: . Ich dachte mir dass ich die Töne aufnimm und dann mit dem Modul "time" je nach länge der note (halbe note, viertel noten) den aufgenommenen Ton eine bestimmte lange Zeit abspiele.

Ich habe aber noch nicht viel Ahnung und weis nicht ob das überhaupt so möglich ist wie ich mir das vorstelle :wink:

http://wiki.python.org/moin/PythonInMusic hab ich mir schon mal angeschaut. Bin aber nicht sehr viel weiter gekommen.

Ich hab mir auch die demo von capella angeschaut, ein sehr aufwändiges programm (160€) welches in Python programmiert wurde, aber der gesammte Quelltext ist so groß, dass ich da garnichts finden konnte :wink: .
Auch auf LilyPond bin ich schon gestoßen. Aber auch da hab ich noch nichts gefunden. und LilyPond geht eher in eine andere Richtung. Da muss man die noten "programmieren" und dann gibt LilyPond ein Pdf mit den noten aus. ich wollte dass man direkt an den Notenzeilen arbeiten kann. Also ein Fenster mit einer graphischen Oberfläche.

Aber vielen Dank auf jeden Fall schonmal an alle :wink:
questlove
User
Beiträge: 65
Registriert: Dienstag 15. Februar 2011, 16:11

Dienstag 15. Februar 2011, 17:44

mein lehrer hat auch gesagt ich könnte von anderen programmen was kopieren oder selbst mir die strategie überlegen. Zweiteres muss aber überhaupt nicht professionell sein. Ein anderer schüler letztes jahr hat zum Beispiel einen Musikplayer geschrieben und da auch einen "unprofessionellen" aber eigenen Lautstärkeregler eingebaut. Und ich hätte mich eher für das eigene entschieden, weil ich immer nie das bei den anderen Programmen das finde, was ich brauche. :)
BlackJack

Dienstag 15. Februar 2011, 18:48

@questlove: Du fängst im Grunde am falschen Ende an wenn Du mit einem Fenster mit Notenlinien beginnst und dann erst am Ende es auch noch schön fändest, wenn man die Noten da nicht nur reinmalen sondern auch irgendwie wieder auslesen könnte. Das ist ja alles nur die grafische Ebene und Du scheinst da auch die Programmlogik mit hinein packen zu wollen!?

Was die Bedenken über den Umfang angeht, die hier geäussert wurden: Das Thema kann man sicher beliebig kompliziert machen. Daher solltest Du gut planen was Du umsetzen möchtest und dass dann in Meilensteine aufteilen die Du implementierst. Also erst einmal wirklich nur die totalen Grundlagen -- nur eine Notenart, Notenlinien ohne Takte, nur eine Note gleichzeitig, und so weiter. So dass Du möglichst schnell etwas funktionierendes hast, was dann nach und nach um weitere Eigenschaften und Möglichkeiten erweitert werden kann.

An LilyPond oder ABC, oder auch ein wenig umfangreicher/komplexer MusicXML, kannst Du an den "programmierten" Noten ganz gut sehen, was für Daten und Datenstrukturen Du benötigst, um so ein Notenblatt zu modellieren.

Damit solltest Du auch Anfangen -- mit der Modellierung der Datenstrukturen und den Operationen darauf -- ohne GUI! Die GUI und spezielle GUI-Elemente für die Bearbeitung von den Noten kann man dann da drauf setzen.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Dienstag 15. Februar 2011, 19:18

@questlove: Falls Du (aus verstaendlichen Gruenden) bei so einem Projekt den Wald vor lauter Baeumen nicht mehr siehst, wuerde ich eher eine Nummer kleiner anfangen, z.B. mit einem Stepsequenzer wie in
http://www.crackajack.de/2009/09/16/hob ... sequencer/

Das koennte man ganz gut mit Pygame und/oder Tkinter realisieren. Ich glaube nicht, dass das eine Unterforderung fuer eine Seminararbeit darstellt.

:wink:
yipyip
problembär

Dienstag 15. Februar 2011, 19:41

Hallo nochmal,

der Link, den ich oben genannt hatte, zeigt leider (wenn man root-Window und .mainloop()) hinzufügt) "nur" Gitarrengriffe, keine Noten.

Mir gefiel dieser Ansatz noch besser:

http://wiki.tcl.tk/1248

Leider ist es in Tcl/Tk geschrieben.
Ich hab' mal versucht, das nach Python zu übersetzen, aber Tcl ist neu für mich. Also erstmal (nur) soweit:

http://paste.pocoo.org/show/340241/

Für Python 3.x mußt Du statt oben

Code: Alles auswählen

import tkinter as tk
schreiben (also "tkinter" klein).

Gruß

Edit: Code ausgelagert.
Zuletzt geändert von problembär am Donnerstag 17. Februar 2011, 16:10, insgesamt 1-mal geändert.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Mittwoch 16. Februar 2011, 16:07

Ich habe Spaßeshalber auch mal ein Notenblatt erstellt :mrgreen:
Ist aber, wenn ich mir http://www.foerdernet.de/Musik/Notenlehre.htm ansehe, noch nichtmal Ansatztweise fertig, sieht aber dennoch schon witzig aus:
http://www.python-forum.de/pastebin.php?mode=view&s=155
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Donnerstag 17. Februar 2011, 15:07

Also gescheiter Notensatz, den man auch gut lesen kann, erstellt man mit LilyPond. Sätze, die aus den meisten anderen Programmen kommen, sind Mist. Es lassen sich durchaus komplexe Sätze damit erstellen, die man bequem Stimme für Stimme zusammensetzen kann. So kann ich z.B. die Bläser in C notieren und so im Klavierauszug einbauen und für das jeweilige Instrument einzeln in der richtigen Stimmlage ausgeben.
Eine primitive Vorschau ist natürlich nicht so aufwendig, man darf es aber halt nicht mit einem Notensatz verwechseln.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Donnerstag 17. Februar 2011, 15:25

Sehr Nett, Open Source
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
problembär

Donnerstag 17. Februar 2011, 16:08

Klar, LilyPond ist bestimmt ein sehr gutes Programm.

Nur hat questlove die Schulaufgabe, in wesentlich bescheidenerem Rahmen sowas ähnliches nochmal in Python zu schreiben. Wenn man da z.B. einen Text-Editor schreiben soll, kann man ja auch nicht einfach den Emacs abgeben.

Insofern finde ich das Code-Beispiel von Xynon1 schon ziemlich klasse! :P

Sie will ja auch einzelne Noten setzen und diese zugleich unmittelbar abspielen lassen. Kann sein, daß man auch das über die LilyPond-API realisieren könnte, aber vielleicht braucht man doch mehr Flexibilität, also ein eigenes (kleines) Programm.

Gruß
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Donnerstag 17. Februar 2011, 16:33

Danke, natürlich werde ich so das Niveau von LilyPond nie erreichen. :roll:
bei dem Ton rätsle ich noch wie ich es am besten mache, winsound ist ganz witzig, gibt es da auch was pythonisches für linux-Systeme ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten