Hi Jagg,
Wenn du eine Art Noteneditor haben willst, also ein Programm, in das du die Noten eingeben willst, dann würde ich direkt beim Eingeben schon Umformen.
Du hast also deine fünf Linien. Wenn jetzt der Benutzer mit der Maus eine Note setzen will, wird intern sofort mit dem entsprechenden Buchstaben weitergemacht. Ein Beispiel:
___________________
___________________
__O________________
___________________
___________________
Der Benutzer hat also ein hohes C (C ' ) gesetzt. Intern wandelt das Programm sofort den Buchstaben als C ' um und arbeitet damit weiter.
Die "Buchstaben" können in einer Variablen gespeichert werden, in der die Buchstaben von-Links-nach-Rechts abgelegt sind. Diese Variable sieht also in etwa so aus:
"F;C ';C;D; usw."
Die Semikolons sind "Feldtrenner", damit du die Zeichen auch auseinanderhalten kanns, wenn der Benutzer ein doppelt-hohes F eingegeben hat (F ' '), denn da kann man ja nicht mehr einen Buchstaben für eine Note zählen. Alternativ kannst du es auch mit einem eindimensionalen Array versuchen. Das wäre sogar besser, denn dann kann man auch bei nicht-Short-Strings die einzelnen Noten anspringen, ohne den String zu splitten. Dadurch kann man auch nachträglich noch seine "Melodie" ändern.
Das Array schreibt man dann, nach passender Umformung, in eine Text-Datei, Note für Note.
Fertig.
Jetzt kann man im Programm das ganze grafisch darstellen, indem man feste Abstände zwischen den einzelnen Noten festlegt und erstmal Linien zeichnet. Dann werden die Noten in der Reihenfolge wie im Array/String gezeichnet, und zwar jeweils zwischen, oder auf, die entsprechenden Linien. Danach "zeichnet" man die Buchstaben immer unter die entsprechenden Noten, wie sie im Array/String stehen, und schon hat man sein Ziel erreicht.
Um die Länge der Noten (1/4, 1/2, ganze) darzustellen, kann man zusätzlich noch Zahlen vor die Buchstaben stellen (im Array; versteht sich). Vorher muss man natürlich festlegen, welches die kürzeste Einheit ist. Meines Wissens ist die achtel Note die kleinste. Also schreibt man vor den Buchstaben eine "8". Dann kommt die "4"tel, die "2"tel (halbe) und die Ganze ("1") Note. Für doppelte und vierfache Noten kann man weitere Zahlen nehmen, wie 20 (doppelte) und 40 (vierfache). Pausen lassen sich dann auch mit "1P" (ganze Pause) darstellen. Will man noch Takt-Striche, muss es ein Eingabefeld für den Takt geben (3/4, zum Beispiel). Dann rechnet das Programm alle Zahlen vor den Buchstaben zusammen, und macht immer nach 12 (3 mal eine viertel Note (3*4=12)) einen senkrechten Strich.
Mit einer Druckfunktion kann dann Beathoven seine Songs schreiben. Und mit einem eingebauten MIDI-Synthesizer kann er sie sich ohne Klavier gleich anhören.
Eine Möglichkeit, aus einer Grafik, die beispielsweise aus einem Song-Buch eingescannt wurde, gibt es keine Lösung. Man müsste ein OCR-Programm für Musiknoten schreiben. Und aus dem Pixelhaufen im Bild eine Note und dann auch noch die Position festzuhalten, ist selbst für mich zu schwierig...
Da könnte man aber beim Hersteller von OmniPage, oder ähnlichen Programmen, nachfragen, ob die dir die Engine überlassen. Dann kann man die ein bisschen umschreiben und bekommt mit viel Know-How nachher eine solche Noten-Erkennung raus. Aber ob die Firma dir die Engine kostenlos (oder überhaupt) überlässt, halte ich für unwahrscheinlich.
Tschüß
tommie-lie
_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk.
- Dilbert