Entwickler-Ecke
Sonstiges (Delphi) - Notenübersetzungsprogramm !
Jagg - Fr 09.08.02 14:37
Titel: Notenübersetzungsprogramm !
Hallo,Leute !
Ich möchte gern ein Programm in Delphi schreiben,das MusikNoten übersetzt !
Ich gebe euch ein Beispiel :
Es gibt ja diese Programme,wo man die MusikNoten in einem Notensystem eingeben und sehen kann,das sind sogenannte MIDI-Noten ! (wer im Musikunterricht aufgepasst hat,weiss wie sowas aussieht)
Aber bei diesen Programmen werden nur die MusikNoten angezeigt,aber NICHT die Beschreibung (also welchen Namen) sie hat z.B. "C,D oder E".
Ich will jetzt ein Programm schreiben,das diese MusikNoten übersetzt,also das man sehen kann welche NotenNamen diese "Note" hat !
Wie fange ich am besten an ???
Versteht ihr überhaupt was ich jetzt will ???
Jagg !
Klabautermann - Fr 09.08.02 14:46
Hallo,
in welchen Format hast du denn die Noten vorliegen? Das Grafik oder in einer beschreibungssprache? Oder sollen diese in deinem Programm eingegeben werden wie in dem von dir beschriebenen Programm.
Gruß
Klabautermann
Jagg - Fr 09.08.02 18:28
Die Noten haben ich in Grafik vor mir liegen,man kann es vergleichen mit einem Notenblatt wo die ganzen Noten drauf sind !
Jetzt ist mein Problem,wie ich mein Notenübersetzungsprogramm mit dem Programm wo die ganzen Grafiken drauf sind,verbinde ???
Jagg !
tommie-lie - Fr 09.08.02 18:41
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
Jagg - Mo 12.08.02 07:50
Hey ich verstehe nur Bahnhof,bin zuwar schon lange dabei mit delphi aber was du da gesagt hast vertsehe ich nicht !
Kannst du mir nicht ne kleine starthife geben mit so einem Code ???
Jagg !
Tino - Mo 12.08.02 07:53
Hallo Jagg,
ließ Dir doch noch mal (oder auch zwei mal) die Hinweise von Tommie durch und stelle dann mal etwas gezielter eine Frage!
Gruß
TINO
Klabautermann - Mo 12.08.02 08:29
Hi Jagg,
ich denke der wichtigste Teil ist das:
| tommie-lie hat folgendes geschrieben: |
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. |
Gruß
Klabautermann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!