Möglichkeiten der ODF Programmierung

    • Offizieller Beitrag
    Zitat

    Original geschrieben von martin

    Da mein erstes Versuchs-ODF noch nicht veröffentlicht werden soll, habe ich ein weiteres ODF (Krzeszow) für andere als Muster Beispiel umgebaut.

    Aus dieser PHP kann aber kaum eine Demo-Version herauskommen ?! :L

    Interessant sind ja auch die Unregelmäßigkeiten bei den Trakturgeräuschen der Manuale, wo urplötzlich etliche Sampledateien ganz anders benannt sind, als man es nach regelmäßigen Gesichtspunkten erwarten würde. Hier muss man dann doch schon wieder von Hand eingreifen, weil die programmierte Routine nicht greift. Die Groß- und Kleinschreibung, die wir damit automatisch hätten korrigieren können war in dem Fall gar nicht das Problem gewesen.

    Zitat

    Original geschrieben von martin
    Merwürdigerweise werden bei einigen Ranks die Note 34 geladen (und 35 frei gelassen):...

    ...Auf den ersten Blick scheint aber 034 nirgends mit einen Manual verbunden zu werden, ist also unnützer Balast im Speicher und macht die ODF Struktur etwas komplizierter. Andererseits ist es ein schönes Beispiel, wie man mit Unregelmäßigkeiten umgeht :D


    Das ist aber höchstens auf den ersten Blick so !! :D

    Diese "Unregelmäßigkeit" hat mich durchaus Gehirnschmalz gekostet. Es handelt sich nämlich um eine zusätzliche Pfeife in etlichen Registern, die nur benötigt wird wenn die Transponierung zum "Kammerton" eingeschaltet wird. Hierbei wird nämlich bei der Originalorgel die Traktur des Positiv um 2 Halbtöne nach unten verschoben - das Manual spielt jetzt also plötzlich einen ganzen Ton tiefer - also plötzlich Ton 034 statt Ton 036. Dieser Ton (034) muss ja auch durch die Pfeife zur Verfügung stehen. Den Ton 035 (Sub C#) hat sich Walcker dann gespart, da er für den vorgesehenen Zweck nicht nötig gewesen wäre und eben den Aufwand einer zusätzlichen Pfeife pro Register erfordert hätte.

    Ton 035 habe ich deswegen mit einem "Dummy-Sample" aufgefüllt, da GrandOrgue leider keine Ranks mit "fehlenden" Pfeifen unterstützt - wie man sieht, gibt es in der Praxis sowas eben doch :-teacher:

    • Offizieller Beitrag
    Zitat

    Original geschrieben von martin

    Zur Untersdrückung von Texten auf den Labels wäre eigentlich das vorgesehen:
    TextBreakWidth=0


    Das hatte ich auch herausgefunden - mich wundert nur die seltsame Bezeichnung dafür - aus diesem Namen kann man diese Funktion eigentlich kaum erahnen.

    Ich habe aber trotzdem stattdessen den leeren DispLabelText= verwendet, weil ich ja in der Demoversion tatsächlich Text über die grafischen Registerknöpfe schreibe um deren Funktionsfähigkeit mit dem Wort "DEMO" zu kennzeichnen. So muss ich in der Demoversion eben nur noch diesen Textinhalt pro Register hinzufügen.

  • Zitat


    Das hatte ich auch herausgefunden - mich wundert nur die seltsame Bezeichnung dafür - aus diesem Namen kann man diese Funktion eigentlich kaum erahnen.


    Das steht auch so in der ODF Reference.

    Die Frage, warum etwas im ODF so ist, sollte man besser nicht stellen :-O :-X
    Es wurde einmal ein Feature hinzugefügt und dann hat man es für immer so am Hals, weil man die Kompatibilität zu bestehenden Sets nicht verlieren will.

    PS: Seit gestern gibt es neue Linux Build.

  • Bei den Stops kann man auch noch etwas Schreibarbeit einsparen.

    Mittlerweile verstehe ich die Logik für den Zusatzton. Ich frage mich nur, ob nicht einer von Switch59/60 besser ein Not vom anderen wäre?

    • Offizieller Beitrag

    Ja prima :-B

    Wer es schafft die ODF auf weniger als 10 Zeilen a 80 Zeichen zu verkürzen, der bekommt ein Jahr Mitgliedschaft auf der Orgelseite GRATIS :-wow:


    Die Funktion zur Erzeugung der Switches ist schon mal toll - noch den Parameter "Displayed=J/N" mit integriert wäre sie meines Erachtens ziemlich universell.

    Die Funktion zur Erzeugung der Stops ist auch ein guter Ansatz - aber m.E. könnte die noch vollständiger und universeller werden und vielleicht noch etwas übersichtlicher in der Anwendung.
    FirstAccessiblePipeLogicalKeyNumber=999 sollte da als Parameter mit drin sein, denn es könnten auch mal einzelne Register z.B. in Bass und Diskant getrennt sein, auch wenn sie auf der selben Windlade sitzen. Dementsprechend im Diskant dann mit einer höheren Nummer starten müssen.

    Die Loops zur Erzeugung der Stops für die stop noises könnte man doch vielleicht auch innerhalb einer universellen "stop function" mit erschlagen ?!

    Könnte man die Stops nicht in einem großen Array definieren, in dem man dann Zeile für Zeile tabellarisch nur sämtliche relevanten Parameter jedes Stops einträgt? Das wäre doch auch schön übersichtlich!

    Also z,B in etwa in der Form:

    (stopnr),(stopname),(displname),(function),(switches),,,,,
    (stopnr),(stopname),(displname),(function),(switches),,,,,
    (stopnr),(stopname),(displname),(function),(switches),,,,,
    (stopnr),(stopname),(displname),(function),(switches),,,,,

    Und dazu dann eine Funktion, die ein komplettes Werk mit Manual, Windlade und Stops dieses Werkes (Pedal, Manual1...) für die jeweilige Tabelle (s.o.) erzeugt? in etwa so:

    function werk(manualname, manualparam...., windchest, anzahl stops, stoparray....

  • Ich habe noch etwas die Rank-Generierung zusammengefasst.

    Das eigentliche Highlight ist das Handling von Rank/Switch-ID. Statt der Nummer erwarten sich die Funktionen jetzt nur einen Bezeichner [aus Faulheit sind das immer noch die Rank-Nummern vom Michael - man könnte statt 64 auch Strings wie "Hauptwerk Prinzipal 8' " (unter doppelten Anführungszeichen) verwenden].
    Das PHP sorgt dann für eine Nummernzuteilung.

    • Offizieller Beitrag

    Was es nicht alles für Befehle gibt ?! 8-)

    Ihr Entwickler habt aber auch an alle Eventualitäten gedacht - ist schon erstaunlich was mit GO doch alles realisierbar ist.

    Die PHP-Funktionen sind für mich übrigens wirklich ein guter Lösungsweg! Damit hat man die nötigen Erleichterungen verfügbar wo es Sinn macht, und hat aber trotzdem noch zu 100 % die Möglichkeit auch alle Spezialfälle bestmöglich behandeln zu können. Mit einem vorgegebenen Generator würden mit Sicherheit die entscheidenden letzten 10% nie umsetzbar sein.

    Manchmal hab ich nur etwas Sorge mein eigenes Programm irgendwann nicht mehr zu verstehen ;) Aber so nach und nach fühle ich mich auch immer mehr im PHP zuhause.