AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Wrapper für für das Kommandozeilen-Programm SF2Comp

Wrapper für für das Kommandozeilen-Programm SF2Comp

Ein Thema von Delfiano · begonnen am 7. Nov 2020
Antwort Antwort
Delfiano
Registriert seit: 13. Jul 2020
SF2_WORK ist ein Wrapper (eine grafische Benutzeroberfläche) für das Kommandozeilen-Programm SF2Comp.

Eigentlich hätte ich gerne die fremden Quelltexte direkt integriert, aber das war mir momentan doch zu viel Aufwand.

SF2_WORK benötigt in seinem Programmverzeichnis die Dateien SF2Comp.exe und SFEDT32.DLL, ausserdem wäre die Datei help.txt (aus dem SF2COMP-Paket) sinnvoll, denn dann lässt die sich direkt ins Programm laden.

Über F1 lässt sich eine aufs wesentliche dezimierte Übersicht aufrufen, aber die Darstellung ist nicht besonders.

Das Programm lässt sich über ESC beenden.

Ich habe versucht, die Anwendung möglichst leicht bedienbar zu machen. Das geschieht beispielsweise durch gezieltes Ausblenden von für die jeweilige Funktion nicht erforderlicher Elemente. Die einzelnen Anweisungen sind zugegeben teils ewas ungeschickt bzw. umständlich gesetzt und mir fehlte ausserdem die Geduld, die bereits integrierte Funktion "RunCaptured" auch einzusetzen, mit der sich die Ausgaben des Kommandozeilenprogramms SF2Comp in eine Textdatei umlenken lassen.

Im Verzeichnis von SF2_WORK sollte sich (so wie es von mir konzipiert wurde) eine Unterverzeichnis "SF2" befinden, in dem dann SoundFonts untergebracht werden können. Prinzipiell müssten sich Soundfonts aus jedem beliebigen Verzeichnis laden lassen, aber ich habe das nicht weiter getestet. Jedem bleibt selbst überlassen, es eigenen Wünschen anzupassen.

Für die Funktionen decompilieren, compilieren und resamplen werden jeweils eigene Unterverzeichnisse erzeugt, falls sie noch nicht existieren. Ich habe sie SF_COMPILED, SF2_DECOMPILIED und SF2_RESAMPLED genannt.

Für die einzelnen Switchss benutze ich zur Vereinfachung Preselektionen. Sowas lässt sich natürlich auf in INI-Dateien schreiben und daraus lesen, ebenso die Festlegungen für die einzelnen Pfade. Aber das war mir momentan zuviel Aufwand.

Für ein TabbedNoteBook anstelle moderner Komponenten habe ich mich wegen der einfacheren Bedienbarkeit entschieden.

Hiermit gebe ich dieses noch etwas an ein Fragment erinnernde, aber funktionsfähige Beispiel zur Weiterentwicklung frei.

Die Datei SF2COMP.ZIP enthält die 3 originalen ZIP-Dateien (http://www.hammersound.net/mirrors/last_night/sf.htmhttps://www.swissdelphicenter.ch/de/showcode.php?id=990) und die Datei SF2_WORK.ZIP mein Beispielprogramm.

Vielen Dank an dieser Stelle an Delphi.Narium, der mich auf SF2Comp hingewiesen hat.

Fehlerkorrektur:
Wenn beim Programmstart noch kein Unterverzeichnis "SF2" existiert, gibt es eine Fehlermeldung. Um diese zu beheben, muss in Formcreate gleich hinter der Zeile "SF_source_path :='SF2';" die folgende Anweisung eingefügt werden, die dann das Verzeichnis erzeugt:
IF NOT DirectoryExists(MainPath+SF_source_path)
THEN CreateDir(MainPath+SF_source_path);


neue Version
Weil die Unit in künftige Versionen des Projekt "BassMidiTest" integriert wird, waren ein paar Anpassungen erforderlich.

Um unterscheiden zu können, ob die Unit in ein anderes Programm eingebunden ist oder in einem eigenständiges Programm Verwendung findet, habe ich in "FormCreate" zur Prüfung auf Vorhandensein der beiden nötigen externen Dateien diese Unterscheidung eingesetzt:
Delphi-Quellcode:
  IF NOT (FileExists(DLL)) OR NOT (FileExists(EXE))
  THEN BEGIN
    IF ExtractFileName(Application.ExeName)='SF2_WORK.exe'
    then begin
      ShowMessage('The files "'+DLL+'" and "'+EXE+
                  '" have to be in the path of this wrapper-program.');
      Application.Terminate;
    end else begin
      ShowMessage('The files "'+DLL+'" and "'+EXE+
                  '" have to be in the mainpath of this program.');
      exit;
    end
  END;
Wer also das Hauptprogramm anders benennen möchte, muß die entsprechende Auswertung ändern.
DLL meint die Datei "SFEDT32.DLL" und EXE entsprechend "SF2Comp.exe" ...

Bei der Gelegenheit der Unitanpassung wurde auch gleich die zwar bisher schon integrierte, aber noch ungenutzte Funktion "RunCaptured" (basiert auf https://www.swissdelphicenter.ch/de/showcode.php?id=990) an den erforderlichen Stellen eingesetzt.

Dadurch wird der Ablauf des externen Programms "SF2Comp.exe" protokolliert und kann als LOG-Datei (Voreinstellung) gespeichert werden.

Wenn das Programm nicht mehr zu reagieren scheint, handelt es sich um höchstwahrscheinlich um eine Windows-Falschmeldung aufgrund oft sehr langer Ausführungszeiten des externen Programms "SF2Comp.exe".

Wie auch schon bei "BassMidiTest" von mir bemerkt, gibt es fehlerhafte SF2-Soundfonts, die nicht nutzbar sind. Woran das liegt, weiß ich nicht. Meist kann sie auch das Programm "Polyphone" nicht laden.
Angehängte Dateien
Dateityp: zip SF2_WORK.ZIP (123,0 KB, 3x aufgerufen)
Dateityp: zip SF2COMP.ZIP (177,4 KB, 5x aufgerufen)
Dateityp: zip SF2_WORK_2.ZIP (381,8 KB, 2x aufgerufen)

Geändert von Delfiano (14. Nov 2020 um 07:40 Uhr) Grund: neue Version
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf