AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte erweiterte Demo für BASSMIDI.DLL
Thema durchsuchen
Ansicht
Themen-Optionen

erweiterte Demo für BASSMIDI.DLL

Ein Thema von Delfiano · begonnen am 9. Nov 2020 · letzter Beitrag vom 22. Feb 2021
Antwort Antwort
Seite 2 von 3     12 3      
Delfiano
Registriert seit: 13. Jul 2020
Das Projekt "BassMidiTest" ist eine erweitere Zusammenfassung der beiden Beispielsprogramme, die
un4seen.com zur Verfügung stellt. Damit lassen sich Midi-Dateien unter Verwendung von SoundFonts
abspielen und prüfen, welcher SoundFont wie klingt und was er enthält. Um die ZIP-Datei nicht zu
groß werden zu lassen, habe ich nur wenige Midi-Dateien und wenige SoundFonts beigefügt.

Es gibt Probleme beim Wechsel von Laufwerksbuchstaben und Pfaden. Wahrscheinlich müssen dann
vorher alle laufenden Prozesse abgebrochen werden. Ich habe mir erlaubt, zum compilierten
Beispiel die Verzeichnisse "MID" und "SF2" mit jeweils einigen MIDI-Dateien und Soundfonts
hinzuzupacken.

Das Ende der Trackbar ist unzuverlässig. Das Ende der Datei muss anders berechnet werden.
Leider habe ich keine Ahnung wie. Mir ging es vor allem darum, die Beispiele von un4seen.com
wenigstens halbwegs nützlich abzuändern. Sorry, dass es mir nicht vollständig geglückt ist,
was die Funktionalitäten betrifft, die ich nicht überblicken kann.

Sinnvoll wäre natürlich der weitere Ausbau, z.B. mit Lautstärkereglern etc.

Weil ich nicht so der Funktionalitätenbeschreiber bin, möge sich bitte jeder die Quelltexte
selbst durchsehen. Die Originalunits bass.pas und bassmidi.pas musste ich leicht abändern, um
sie mit Delphi 5 compilieren zu können.

Inhalt der ersten ZIP-Datei ( SOURCE.ZIP )
23.556 BaseUnit.dfm
43.696 BaseUnit.pas
128.181 bass.dll // un4seen.com
52.805 bass.pas // un4seen.com, leicht modifiziert
25.356 bassflac.dll // un4seen.com
58.818 bassmidi.dll // un4seen.com
17.758 bassmidi.pas // un4seen.com, leicht modifiziert
266 BassMidiTest.dpr
876 BassMidiTest.res
32.557 basswv.dll // un4seen.com

Inhalt der zweiten ZIP-Datei ( BIN.ZIP )
455.168 BassMidiTest.exe // compiliertes Programm

Sorry, die ZIP-Datei mit den SoundFonts und Midi-Dateien ist leider zum Hochladen zu gross.

Anpassung:
Die ZIP-Datei "Source_2.ZIP" enthält nur die geänderte Basisunit.

Eine neue EXE-Datei habe ich nicht hochgeladen, weil die grundsätzliche Funktionalität auch schon aus der ersten ersichtlch ist.

Der Quelltext wurde teilweise vereinfacht und es kam eine Option für zufällige Klangerzeugung dazu.

Ausserdem kann "SF2_WORK" (https://www.delphipraxis.net/205992-...m-sf2comp.html) direkt aufgerufen werden, wenn die Dateien "SF2_WORK.exe", "SF2Comp.exe" und "SFEDT32.DLL" im selben Verzeichnis sind. Um keine Fehlermeldung zu erhalten, muss dafür ausserdem ein Verzeichnis "SF2" im Programmpfad vorhanden sein.

zweite Änderung der Basisunit
Der Inhalt der Datei "Source_3.ZIP" ersetzt alle früheren Versionen von "BaseUnit".

Version 0.4 ( Source_04.ZIP enthält wieder nur die Basisunit. )

Bei Auswahl eines Soundfonts werden die Menge enthaltener Drumsets und Instrumente in der Statuszeile angezeigt.

Auf defekte Soundfonts wird nicht mehr mit ShowMessage hingewiesen, sondern in der Statuszeile.

Im Statuspanel werden Datum und Uhrzeit angezeigt, ansatzweise auch wenige Hints.

Beim Start wird ActiveControl auf Midi_FileListBox gesetzt.

Version 0.5 lasse ich aus, weil sich Version 0.6 bereits in Vorbereitung befindet und als wesentlichste Änderung die Integration der in "SF2_WORK.exe" enthaltenen Unit bringt, die zu diesem Zweck geändert und verbessert wurde. Die neue Version von "SF2_WORK.exe" befindet sich bereits unter https://www.delphipraxis.net/205992-...m-sf2comp.html

Version 0.6 ist die vorerst letzte Version
Bass-midiTest_06.ZIP erfordert keine der vorherigen ZIP-Dateien.
Wer allerdings die Hilfedateien für BASS.DLL und BASSMIDI.DLL etc. möchte, findet alles dazu vollständig auf https://www.un4seen.com/ ...

SF2Comp ist komplett auf http://www.hammersound.net/mirrors/last_night/sf.htm zu finden.
Angehängte Dateien
Dateityp: zip SOURCE.ZIP (261,1 KB, 35x aufgerufen)
Dateityp: zip BIN.ZIP (209,6 KB, 23x aufgerufen)
Dateityp: zip Source_2.ZIP (13,0 KB, 20x aufgerufen)
Dateityp: zip Source_3.ZIP (14,7 KB, 21x aufgerufen)
Dateityp: zip Source_04.ZIP (15,4 KB, 20x aufgerufen)
Dateityp: zip Bass-midiTest_06.ZIP (667,1 KB, 23x aufgerufen)
Dateityp: zip 0.8b.zip (312,0 KB, 16x aufgerufen)

Geändert von Delfiano (22. Nov 2020 um 09:25 Uhr) Grund: Erweiterungen/Änderungen/Erläuterungen
 
Delfiano
 
#11
  Alt 23. Nov 2020, 00:31
Danke, Delphi.Narium für die aufmunternden Worte.

Aber ich hab's mittlerweile aufgegeben. Leider funktioniert Dein Vorschlag bzgl. EndSync auch nicht.

Ansonsten: Ja, es stimmt. Bei den Methoden, wie Texte in Midi-Dateien eingebunden sind, herrscht absolutes Chaos. Bei einigen Midi-Dateien meiner Sammlung erscheinen diese zwar innerhalb von lbLyrics ( egal ob ich es beim ursprüngichen Label belassen habe oder das Memo draus gemacht habe ) aber werden nicht übernommen. Bei Deiner Variante von ProcessMarkText wird immerhin bei einigen wenigstes etwas zurück geliefert, aber bei anderen fehlt dafür jede erste Zeile.

Die Art und Weise wie ich lbLyricsChange konstruiert habe, ist einfach falsch. Korrekt wäre, jede Zeile solange aktiv zu halten, bis sich deren Inhalt nicht mehr ändert und sie dann zu übernehmen. Aber dafür fehlt mir einfach das Verständnis, wie man da vorgehen muss.

Ich hatte das bisher noch nie, dass Zeilen nach und nach gefüllt werden. Im Grunde müsste man immer den Text einer Zeile einlesen, in eine andere kopieren, beide miteinander vergleichen und erst wenn es keine Unterschiede mehr gibt, in Lyrics_Memo.Lines übernehmen. Das kommt einem zwar einfach vor, aber ich kann's einfach nicht.
  Mit Zitat antworten Zitat
venice2
 
#12
  Alt 23. Nov 2020, 00:35
Versuch es mal mit meiner MidiLyricsClass
Oder versuch mal das hier weil in der Pas noch Abhängigkeiten fehlen.

Geändert von venice2 ( 1. Dez 2020 um 15:05 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

 
Delphi 7 Professional
 
#13
  Alt 23. Nov 2020, 09:41
Habe mir mal etliche Midis im Hexeditor angeschaut. Als Zeilenumbruch kommt auch noch #10 in Frage (was eigentlich naheliegend ist - für die Unixwelt). Daher hab' ich meine Routine mal ein bisserl angepasst:
Delphi-Quellcode:
function ProcessMarkText(CaptionText, MarkText : string) : string;
begin
  if Length(MarkText) > 0 then begin
    case MarkText[1] of
      '@'     : Result := CaptionText;
      '\'     : Result := #13#10 + Copy(MarkText, 2, pred(Length(MarkText)));
      '/','<' : Result := CaptionText + #13#10 + Copy(MarkText, 2, Length(MarkText));
      '*'     : Result := CaptionText + #13#10 + MarkText + #13#10;
      #10 : Result := CaptionText + #13#10;
      #13 : Result := CaptionText + #13#10;
    else
      Result := CaptionText + MarkText;
    end;
  end else begin
    Result := CaptionText;
  end;
end;
Ob's damit besser wird, weiß ich nicht, hatte noch keine Zeit im Zusammenhang mit Deinem Programm zu testen. Bei meinem scheint es das Ergebnis aber etwas zu verbessern. Blöd wird es nur, wenn in 'ner Midi nun #13#10 als Zeilenvorschub geliefert wird, dann haben wir ggfls. 'ne Leerzeile zuviel.
Delphi-Quellcode:
function ProcessMarkText(CaptionText, MarkText : string) : string;
begin
  if Length(MarkText) > 0 then begin
    case MarkText[1] of
      '@'     : Result := CaptionText;
      '\'     : Result := #13#10 + Copy(MarkText, 2, pred(Length(MarkText)));
      '/','<' : Result := CaptionText + #13#10 + Copy(MarkText, 2, Length(MarkText));
      '*'     : Result := CaptionText + #13#10 + MarkText + #13#10;
      #10 : Result := CaptionText + #13#10;
      #13 : case MarkText[2] of
                  #10 : Copy(MarkText, 3, Length(MarkText) - 2);
                else
                  Result := CaptionText + #13#10;
                end;
    else
      Result := CaptionText + MarkText;
    end;
  end else begin
    Result := CaptionText;
  end;
end;
Keine Ahnung, ob's so noch besser wird (oder das Ergebnis eher kontraproduktiv ist).

Der Quelltext von venice2 hat einen anderen (dafür aber funktionierenden) Ansatz: Die Mdiddatei wird auf Texte / Lyrics geparst und diese werden dann ausgegeben. Will man "nur" an die Texte kommen, um sie zu speichern und benötigt keine zur Wiedergabe synchrone Anzeige der Texte, erscheint mir das die bessere Lösung zu sein.
  Mit Zitat antworten Zitat
Delfiano
 
#14
  Alt 23. Nov 2020, 09:54
@Venice2: Vielen Dank, aber ich habe damit grosse Probleme.

Es ist mir leider unmöglich, Deine Unit einzubinden, weil sie auf einem ganz anderen Konzept beruht, als das von un4seen.com, auf dessen Beispielen ich aufgebaut habe.

Mir geht es vor allem drum, mit Soundfonts zu arbeiten. Die Lyrics sind nur ein Nebenaspekt.

Eigentlich würde ich sogar gerne störende Texte (keine Lyrics) entfernen, die von diversen Konvertierungsprogrammen ungefragt in meine eigenen Kompositionen reingeknallt werden.

Dein sehr aufwändiges, vollständig fertiges - aber auf einer anderen Basis aufbauendes - Programm kann ich leider mit meinem Delphi 7 nicht mal ansatzweise compilieren.

Ich hab die fertige Exe-Datei paar mal ausprobiert. Es sieht zwar auf den ersten Blick optisch reizvoll aus, aber dann merkt man schnell, dass es mit für Midi völlig unerheblichen Elementen regelrecht überladen ist. Mal von der absolut unübersichtlichen Bedienbarkeit und diversen seltsamen, nicht näher beschreibbaren Fehlern abgesehen, sind die Lyrics nicht synchron zur Musik und der Aufbau von unten nach oben störend.

Ausserdem werden die Texte auch nicht (wie es mein Ziel ist) letztlich als Ganzes zusammengefasst. Das ist also auch nicht besser als die ursprüngliche Darstellung von un4seen.com, bei der Textteile (wenigstens synchron zur Musik) in einem Label erscheinen.

@Delphi.Narium:
Wie gehabt. Wie das jeweile Zeilenende aussieht, ist anscheinend unerheblich und die Vorgabe-Prozedur EndSync ist meiner Meinung nach völlig unnötig. Ich hab das mal getestet, indem ich gleich nach dem "begin" ein "exit" gesetzt habe. Der Text wird trotzdem gelöscht, auch ohne das man dazu extra eine Anweisung gibt.

Ich bleibe dabei: Mein Versuch, die einzelnen Absätze in "lbLyricsChange" zusammenzufassen, ist schon vom grundsätzlichen Denkansatz her falsch. Eigentlich würde sogar reichen, wenn man es hinbekäme, dass der Inhalt von lbLyrics nicht gelöscht wird, sondern neue Absätze angefügt werden. Aber auch dafür bin ich zu dumm.

Wahrscheinlich werde ich den Lyricsteil ganz weglasse, wenn sich dafür keine überall funktionierende Lösung findet. Mir geht es vor allem um die Nutzbarkeit der Soundfonts. Wenn's nur um das Abspielen von Mididateien ginge, gibt's erhebliche einfachere Sachen - auch mit Lyrics zeilenweise gekleckert und danach verschwindend.

Geändert von Delfiano (23. Nov 2020 um 11:50 Uhr)
  Mit Zitat antworten Zitat
juerg5524
 
#15
  Alt 23. Nov 2020, 13:55
Hallo zusammen

Tolle Arbeit! Aber leider konnte ich mit der Version 6 "archy-breaky-heart.mid" nicht abspielen. Fehlermeldung: "maybe damaged. Please choose another one". Kann mir jemand ein weiteres Beispiel mit "Lyrics" geben. Danke!
Jürg Müller
  Mit Zitat antworten Zitat
Delphi.Narium

 
Delphi 7 Professional
 
#16
  Alt 23. Nov 2020, 14:07
Auf der oben verlinkten Seite http://www.karaokeden.com/karaoke gibt es ca. 16500 Stück in unterschiedlichen Sprachen davon ca. 90 deutschsprachig. Englischsprachig sind es ein paar tausend.
  Mit Zitat antworten Zitat
juerg5524
 
#17
  Alt 23. Nov 2020, 14:28
Danke. Es funktioniert mit "archy-breaky-heart". Beim Debuggen stellte sich heraus, dass kein Soundfont gefunden wurde. Mit Soundfont ist alles ok.
Jürg Müller
  Mit Zitat antworten Zitat
Delfiano
 
#18
  Alt 23. Nov 2020, 23:11
Ich glaube, bei der Version 6 war noch ein Fehler bei der Erkennung von SoundFonts, sobald man entweder das Verzeichnis mit Soundfonts oder das mit Midi-Dateien gewechselt hat. Dann wurde der Pfad nicht korrigiert.

Wenn man bei meiner letzten Version 0.8b unter "Settings" die Option "save Inifile when program ends" anklickt, werden die aktuellen Einstellungen in einer INI-Datei gespeichert und solange bei jedem neuen Programmstart wieder übernommen, wie diese Option gesetzt bleibt.

Geändert von Delfiano (23. Nov 2020 um 23:18 Uhr) Grund: Hinweis auf mögliche INI-Datei hinzugefügt
  Mit Zitat antworten Zitat
venice2
 
#19
  Alt 24. Nov 2020, 09:32
Da muss ich noch drauf antworten.
Zitat:
unerheblichen Elementen
Welche unerheblichen Elementen?
Zitat:
Mal von der absolut unübersichtlichen Bedienbarkeit und diversen seltsamen, nicht näher beschreibbaren Fehlern abgesehen.
Keine Fehler! (Abgesehen davon das einige Controls nicht die richtige Top Position haben, but is fixed) wenn du so eine Behauptung aufstellst teile sie bitte mit damit ich sie beheben kann.

Zitat:
sind die Lyrics nicht synchron zur Musik
Diese sind 100% synchron siehe der lade Balken oben der sagt dir genau wenn du mit singen anfangen musst.
Dementsprechend ändert sich dann die Farbe des Textes.
Zitat:
und der Aufbau von unten nach oben störend
Das ist einstellbar. (von wegen unübersichtlichen Bedienbarkeit)

Fazit!
Bitte mache es besser nur ansatzweise so wie ich hier lese kommst du damit aber scheinbar nicht zurecht.
Habe keine Probleme mit Kritik wenn sie denn berechtigt ist.
Nein ich habe dein Projekt nicht getestet möchte ich auch nicht.

Zudem ReadMe gelesen?
Ich denke du hast nur Frust das du meine Herangehensweise in deinem Projekt nicht umsetzen kannst.
PS: Es gibt auch ein Menu wenn man oben auf das Caption klickt.
but, i have remove the link..

EDIT:
Um sich nicht von seiner Meinung beeinflussen zu lassen hier ein Link zur Demonstration

Frage?
Wo sind Fehler.?
Was geht nicht von Bottom to Top?
Was ist nicht synchron?
Was ist unnötig?

Geändert von venice2 (24. Nov 2020 um 11:59 Uhr)
  Mit Zitat antworten Zitat
Delfiano
 
#20
  Alt 24. Nov 2020, 17:45
Wenn ein Programm schlecht bedienbar ist, funktionelle Fehler aufweist, die sich nicht nachvollziehen lassen, weil man die Sourcen nicht compilieren kann und die Hauptfunktion eines Programms offensichtlich nicht darin besteht, seinen eigentlichen Zweck (das Abspielen von Mididateien) zu erfüllen, sondern viel mehr Wert auf möglichst viele grafische Effekte legt (die mir für funktionelle Fehler verantwortich scheinen) kann ich aus logischen Gründen keine Lobhudelei darüber von mir geben.

Wenn jemand zudem erst so tut, als hätte er die Lösung für eins der Probleme meines Projektes, ohne sich überhaupt mal vorher damit befasst zu haben, worum es sich dabei handelt und dass schon darum verkehrt war, sein eigenes Produkt anzupreisen, fehlt mir auch rein menschlich dafür das Verständis.

Warum sollte ich versuchen, die Fehler eines Programms konkret zu suchen, das mich erstens gar nicht interessiert, weil es mit viel zu viel grafischem Schnickschnack überladen ist, den ich absolut nicht brauche, und das sich bei mir ohnehin nicht compilieren lässt, weil es offensihtlich mit einer Delphi-Version erstellt wurde, die ich nicht habe?

Es ist nicht gerade freundlich, auf meine rein sachliche Kritik mit gegen mich persönlich gerichteten Frust-Angriffen zu reagieren. Ich möchte keinen Kontakt und keine weitere Auseinandersetzung mit dieser Person. Seine Produkt hat absolut nichts mit meinen Zielen zu tun und es gibt keinerlei Schnittmengen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 14:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz