Noten System

Für Fragen von Einsteigern und Programmieranfängern...
nevermore2k
Beiträge: 81
Registriert: Sa 1. Mai 2021, 15:39

Noten System

Beitrag von nevermore2k »

Ein Notensystem wo man die Noten eingeben kann mit Mausklicks.
Wie würde man so etwas umsetzen?
Bild

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.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Noten System

Beitrag von theo »

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.

nevermore2k
Beiträge: 81
Registriert: Sa 1. Mai 2021, 15:39

Re: Noten System

Beitrag von nevermore2k »

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 ???

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Noten System

Beitrag von theo »

nevermore2k hat geschrieben:
Di 25. Mai 2021, 17:10
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 ???
Mir ist keine solche Komponente bekannt (was nicht ausschliesst, dass es sie gibt).
Ich würde so etwas direkt auf einen Canvas zeichnen, vllt. eine Ableitung von TCustomControl.

nevermore2k
Beiträge: 81
Registriert: Sa 1. Mai 2021, 15:39

Re: Noten System

Beitrag von nevermore2k »

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 ?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Noten System

Beitrag von theo »

Ich wurde jedes Element (Note) in ein Objekt oder Record packen, welches die Koordinaten/Dimension und andere Informationen hält.

nevermore2k
Beiträge: 81
Registriert: Sa 1. Mai 2021, 15:39

Re: Noten System

Beitrag von nevermore2k »

ok, ich gehe mal davon aus das ein record ein struct ist oder ?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Noten System

Beitrag von theo »


Benutzeravatar
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

Beitrag von Niesi »

nevermore2k hat geschrieben:
Di 25. Mai 2021, 13:43
Ein Notensystem wo man die Noten eingeben kann mit Mausklicks.
Wie würde man so etwas umsetzen?
Bild

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.
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.
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 ...

xos
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

Beitrag von xos »

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.

nevermore2k
Beiträge: 81
Registriert: Sa 1. Mai 2021, 15:39

Re: Noten System

Beitrag von nevermore2k »

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
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

Beitrag von xos »

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.

Soner
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

Beitrag von Soner »

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.

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Noten System

Beitrag von six1 »

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?
Gruß, Michael

Soner
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

Beitrag von Soner »

six1 hat geschrieben:
Mi 26. Mai 2021, 13:02
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?
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. :)

Antworten