Noten System
-
- Beiträge: 81
- Registriert: Sa 1. Mai 2021, 15:39
Noten System
Ein Notensystem wo man die Noten eingeben kann mit Mausklicks.
Wie würde man so etwas umsetzen?
Da ich leider keine Ahnung habe wie man an das herangehen würde. Was auch der Grund ist, weshalb ich ein StringGrid benutze für das Akkorddiagramm anstelle von einem TImage ( da ich auch per klick was rein zeichnen möchte und auch wieder löschen und danach abfragen will was da drinnen ist und wo vor allem usw.)
Weiß vielleicht einer von euch wie man sowas umsetzen würde.
Wie würde man so etwas umsetzen?
Da ich leider keine Ahnung habe wie man an das herangehen würde. Was auch der Grund ist, weshalb ich ein StringGrid benutze für das Akkorddiagramm anstelle von einem TImage ( da ich auch per klick was rein zeichnen möchte und auch wieder löschen und danach abfragen will was da drinnen ist und wo vor allem usw.)
Weiß vielleicht einer von euch wie man sowas umsetzen würde.
Re: Noten System
Ich verstehe nichts von der musikalischen Seite, aber ich kann dir sagen, dass du dir das nicht zu einfach vorstellen solltest.
Wenn du " keine Ahnung hast, wie man an das herangehen würde",. rate ich dir, es bleiben zu lassen und ggf. auf eine fertige Software zurückzugreifen.
Falls du es doch versuchen willst: Es gibt in Unicode "Musical Symbols" die du wie Buchstaben benutzen könntest. https://en.wikipedia.org/wiki/Musical_S ... ode_block)
Das setzt natürlich einen entsprechenden Font voraus. Bei mir auf OpenSUSE wäre das z.B. "gdouros-musica-fonts".
Das löst aber nur einen Bruchteil deiner anstehenden Probleme.
Wenn du " keine Ahnung hast, wie man an das herangehen würde",. rate ich dir, es bleiben zu lassen und ggf. auf eine fertige Software zurückzugreifen.
Falls du es doch versuchen willst: Es gibt in Unicode "Musical Symbols" die du wie Buchstaben benutzen könntest. https://en.wikipedia.org/wiki/Musical_S ... ode_block)
Das setzt natürlich einen entsprechenden Font voraus. Bei mir auf OpenSUSE wäre das z.B. "gdouros-musica-fonts".
Das löst aber nur einen Bruchteil deiner anstehenden Probleme.
-
- Beiträge: 81
- Registriert: Sa 1. Mai 2021, 15:39
Re: Noten System
ich frage mal anders... Was für Komponenten würdest du nutzen, um 5 Linien darzustellen auf denen man Symbole hoch und runter mit einem bestimmten Abstand verschieben kann ???
Re: Noten System
Mir ist keine solche Komponente bekannt (was nicht ausschliesst, dass es sie gibt).nevermore2k hat geschrieben: ↑Di 25. Mai 2021, 17:10ich frage mal anders... Was für Komponenten würdest du nutzen, um 5 Linien darzustellen auf denen man Symbole hoch und runter mit einem bestimmten Abstand verschieben kann ???
Ich würde so etwas direkt auf einen Canvas zeichnen, vllt. eine Ableitung von TCustomControl.
-
- Beiträge: 81
- Registriert: Sa 1. Mai 2021, 15:39
Re: Noten System
ok also d.h. man zeichnet alles, speichert dies, und zeichnet es anhand der mauscoordinaten wieder neu an die stelle wo man es hinverschiebt, ändert den cursor vielleicht zu dem objekt das man verschieben wollte usw. richtig ?
Re: Noten System
Ich wurde jedes Element (Note) in ein Objekt oder Record packen, welches die Koordinaten/Dimension und andere Informationen hält.
-
- Beiträge: 81
- Registriert: Sa 1. Mai 2021, 15:39
Re: Noten System
ok, ich gehe mal davon aus das ein record ein struct ist oder ?
- Niesi
- Lazarusforum e. V.
- Beiträge: 331
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1
Re: Noten System
Ich bin jetzt kein Experte für Noten, aber wenn es meine Aufgabe wäre, dann objektorientiert. Jede Notenlinie ist ein Objekt mit x, y - Koordinaten und einer Weite.nevermore2k hat geschrieben: ↑Di 25. Mai 2021, 13:43Ein Notensystem wo man die Noten eingeben kann mit Mausklicks.
Wie würde man so etwas umsetzen?
Da ich leider keine Ahnung habe wie man an das herangehen würde. Was auch der Grund ist, weshalb ich ein StringGrid benutze für das Akkorddiagramm anstelle von einem TImage ( da ich auch per klick was rein zeichnen möchte und auch wieder löschen und danach abfragen will was da drinnen ist und wo vor allem usw.)
Weiß vielleicht einer von euch wie man sowas umsetzen würde.
Jede Note ist ein Objekt mit x, y - Koordinate und dem Aussehen (ein Zeichensymbol oder eine Zeichnung).
Alle Objekte werden in einer Objektliste gepackt und die Objektliste kann dann bei jedem Neuzeichnen einmal durchlaufen werden.
Zum Positionieren der Noten müssen die Nutzenden die gewünschte Note auswählen und mit der Maus auf den Notenlinien positionieren.
Die Objekte können auch mehr Eigenschaften bekommen: Farbe, linienstärke, einen Klang ... usw. ...
Das wäre meine erste Rangehensweise ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
-
- Beiträge: 13
- Registriert: Mi 26. Dez 2007, 17:49
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Noten System
Ich muss mich hier als "Spezialist" in Sachen Notation outen. Habe das Programm midi-connections.com programmiert. Das ist ein ausgewachsenes Notationsprogramm geschrieben mit Delphi. Eigentlich will ich das Teil auf Lazarus portieren, aber leider ist das nicht auf die Schnelle zu machen.
Nun zur Frage: Ganz klar braucht es im Hintergrund eine Objektorientierte-Datenstruktur (wird schnell sehr komplex). Das Eine sind ja die Notenhöhe/Notenlänge, das Andere sind dann die Abstände von einer Note (oder Notationselement wie Pause) zur nächsten.
Die errechnete Datenstruktur wird dann auf einen Canvas (TCustomControl) gezeichnet. Die Notensymbole werden zum Teil mit TTF Buchstaben und mit Canvas-Grafik (Linien, Rect, PolyBezier..) zusammengestellt.
PS: das Projekt hat eine Grösse von über 350´000 Zeilen Code.
Nun zur Frage: Ganz klar braucht es im Hintergrund eine Objektorientierte-Datenstruktur (wird schnell sehr komplex). Das Eine sind ja die Notenhöhe/Notenlänge, das Andere sind dann die Abstände von einer Note (oder Notationselement wie Pause) zur nächsten.
Die errechnete Datenstruktur wird dann auf einen Canvas (TCustomControl) gezeichnet. Die Notensymbole werden zum Teil mit TTF Buchstaben und mit Canvas-Grafik (Linien, Rect, PolyBezier..) zusammengestellt.
PS: das Projekt hat eine Grösse von über 350´000 Zeilen Code.
-
- Beiträge: 81
- Registriert: Sa 1. Mai 2021, 15:39
Re: Noten System
Danke Niesl da weiss ich schonmal was ich mir anschauen sollte
xos, deine Software hat ja einen Wahnsinns-Funktionsumfang!
Okay, dann werde ich mir erstmal noch genauer oop bei Pascal reinziehen müssen, da es sonst keinen Sinn macht, wie es scheint da weiterzumachen
aber im Endeffekt layerst du dann die generierten Grafiken, oder?
xos, deine Software hat ja einen Wahnsinns-Funktionsumfang!
Okay, dann werde ich mir erstmal noch genauer oop bei Pascal reinziehen müssen, da es sonst keinen Sinn macht, wie es scheint da weiterzumachen
aber im Endeffekt layerst du dann die generierten Grafiken, oder?
-
- Beiträge: 13
- Registriert: Mi 26. Dez 2007, 17:49
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Schweiz
Re: Noten System
Bei der Datenstruktur geht es ja um Listen (TList) und Objekte (class) die dann eigene Funktionen/Proceduren haben. Dabei gibt es zuest einen reine MIDI-Liste/Objekte (Position in x=Zeit, y=Tonhöhe, Velocity=Anschlagdynamik, Dauer...) aus der dann die Darstellungdaten (auch Listen und Objekte) berechnet werden. Diese Darstellungsdaten werden dann auf den Canvas gezeichnet. Dabei muss auch noch die Scallierung oder das Scrollen der Ansicht miteinberechnet werden. Die Berechnungsauflösung der Darstellung ist ja nicht die Screen oder Printauflösung, sondern eine interne Auflösung von der dann Screen und Printgrösse abgeleitet werden.
-
- Beiträge: 623
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Noten System
Das Ding ist sehr leicht zu machen, du erstellst eine neue Komponente, als Basis kannst du TCustomControl oder TWinControl nehmen. Dann brauchst du für die Noten ein Recordtyp und natürlich ein Array-Kontainer für alle Noten, wohin du einzelne Noten packen kannst, am Besten TList. Das ganze ist, stark vereinfacht, an einem Wochenende zu Programmieren. Du brauchst auch keine x-y-Koordinaten für jede Note zu speichern. Jede Note ist doch gleich lang und sie wird auf einer Notenzeile platziert, dann kann man doch die Position sehr leicht rechnen.
Du brauchst keine Objekt-Struktur für einzelne Note, das macht das ganze unnötig kompliziert.
Du brauchst keine Objekt-Struktur für einzelne Note, das macht das ganze unnötig kompliziert.
Re: Noten System
Ales erstes: Ich habe Null Ahnung von Noten
...aber Soner, das nehme ich dir nicht ab, das jede Note gleich lang ist und das ein WE Projekt ist!
Da glaube ich viel eher an xos Ausführungen.
...oder war das Ironie?
...aber Soner, das nehme ich dir nicht ab, das jede Note gleich lang ist und das ein WE Projekt ist!
Da glaube ich viel eher an xos Ausführungen.
...oder war das Ironie?
Gruß, Michael
-
- Beiträge: 623
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Noten System
Mein letzter Musikunttericht vor 30 Jahren. Ich habe auch keine Ahnung mehr von Noten, aber ich erinnere mich noch, dass enige Noten "breiter" und mit Strichen verbunden waren, aber die waren immer noch immer vielfach größer von Basisnote und das ist kein Hindernis für automatische Positionsberechnung.
Nach dem ich gerade bei Wikipedia nachgeschaut habe, scheint mir auch Koordinaten-Speichern bessere Lösung.
Machen wir dann aus einem Wochende zwei Wochenenden.