Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   erweiterte Demo für BASSMIDI.DLL (https://www.delphipraxis.net/206010-erweiterte-demo-fuer-bassmidi-dll.html)

Delfiano 9. Nov 2020 23:32


erweiterte Demo für BASSMIDI.DLL
 
Liste der Anhänge anzeigen (Anzahl: 7)
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.

Delphi.Narium 10. Nov 2020 11:07

AW: erweiterte Demo für BASSMIDI.DLL
 
Midi-Dateien gibt es u. a. hier:

Doug McKenzie - Jazz Piano
Free MIDI Backing Tracks Downloads
Free Midis - http://www.midis101.com/
FreeMidi.org
Listen to your favorite MIDI files on BitMidi
MIDIMI.ORG
MIDIWORLD.COM
MidiSpace.com - Free MIDI Music
PSR Performer Songs (Midi)
TeleWerkstatt Leutschach

Die Auswahl sollte für jeden Geschmack etwas enthalten ;-)

SoundFounts gibt es u. a. hier:

Musical Artifacts (ca. 1200 SoundFonts)
Soundfonts 4U

Verweise auf weitere SoundFont-Quellen: Ultimate List of FREE Soundfonts

Delfiano 10. Nov 2020 16:39

AW: erweiterte Demo für BASSMIDI.DLL
 
Danke, Delphi.Narium, dass Du mir das abgenommen hast.

Im Nachhineien bekam ich nämlich ein schlechtes Gewissesn, wenn ich dafür nichts hochladen konnte, hätte ich wenigstens Quellen nennen können. :oops:

Delfiano 13. Nov 2020 08:57

AW: erweiterte Demo für BASSMIDI.DLL
 
Die ZIP-Datei "Source_3.ZIP" (im Startbeitrag) enthält nur die nochmal geänderte Basisunit.

Ausser Fehlerkorrekturen kam der Ansatz hinzu, vorhandene Lyrics nicht mehr als Label auszugeben, sondern als Memo und von dort aus dann in einem weiteren Memo zu sammeln, und als Textdatei zu speichern.

Dabei wird aber jeweils die letze Zeile eines Absatzes verschluckt. Das hat damit zu tun, dass die Zeilen immer erst zusammengesetzt werden und ich keine unfertigen Zeilen übernehmen will, weil sich dann nur deren Teilfragmente in jeweils neuen Zeilen sammeln.

Ursächlich liesse sich das sicher durch Änderungen der Vorgabeprozeduren "EndSync", "LyricSync" und "TextSync" sowie der Funktion "ProcessMarkText" abfangen. Aber dafür reicht mein abstraktes Denkvermögen leider nicht aus.

Vielleicht weiss jemand anderes mehr und kann an dieser Stelle weiter helfen.

Delfiano 15. Nov 2020 04:27

AW: erweiterte Demo für BASSMIDI.DLL
 
Version 0.6 ( Version 0.5 habe ich weg gelassen, weil Version 0.6 erheblich weiter entwickelt ist )

Während Version 0.4 "SF2_WORK.exe" noch extern auruft, wird die (geänderte) Unit nun direkt eingebunden. Dazu war u.a. nötig, den Namen des Forms zu ändern und eine Kontrolle einzubauen, ob die Unit als eigenständiges Programm gestartet wurde oder in ein anderen integriert wurde. Um Verwechslungen mit der alten Unitversion zu vermeiden, habe ich die Unit von "U_SF2" zu "U_SF2a" umbenannt.

Ausserdem wurde die Funktionalität dahingehend erweitert, dass der Aufruf des externen Programms "SF2Comp.exe" nun als LOG-Datei gespeichert werden kann.

noch immer vorhandene (bekannte) Fehler:
Wenn Verzeichnisse gewechselt werden, gelten manchmal plötzlich auch gültige Soundfiles als defekt.
Vorhandene Lyrics werden noch immer nicht korrekt ausgewertet, sondern unvollkommen gespeichert.
Die (nicht von mir stammende) Notenberechnungsbasis "60 - drums * 24"

Die integrierten Optionen zum Stimmen von Gitarre bzw. Bass sind unfertig. Für Bass fehlen Berechnungen je nach Saitenzahl und Stimmung. Wenn SoundFonts weniger als 128 Instrumente enthalten oder nicht standardmässig belegt sind, kann keine wirkliche Prüfung auf Korrektheit der Instrumente erfolgen. Ausserdem fehlt die automatische Wiederholung des gewünschten Tons, wie es zum Stimmen von Saitenistrumenten nötig ist. Momentan habe ich keinen Schimmer, wie das per Timer gelöst werden kann.

Bass-midiTest_06.ZIP( 683.063 Bytes ) enthält alle Dateien des Projektes. Die ZIP-Datei befindet sich im Startbeitrag.
34.869 BaseUnit.dfm
62.375 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
369 BassMidiTest.dpr
617.984 BassMidiTest.exe
876 BassMidiTest.res
32.557 basswv.dll // un4seen.com
34.073 help.txt
38.912 SF2Comp.exe //
141.824 SFEDT32.DLL //
11.315 U_SF2a.dfm
22.423 U_SF2a.PAS

Weil ich aktuell mit meinen Weisheiten bzgl. bass.dll, bassmidi.dll usw. am Ende bin, wird es vorerst meinerseits keine neuen Versionen geben, es sei denn, andere helfen mir mit Tipps auf die Sprünge.

Delfiano 21. Nov 2020 01:51

AW: erweiterte Demo für BASSMIDI.DLL
 
Mittlerweile habe ich zwar eine brauchbare Version 0.8a erzeugt, weiss aber nicht, ob sich überhaupt noch wer dafür interessiert. Trotz mancher Ergänzungen habe ich nämlich einige für mich bedeutende Fehler noch immer nicht beseitigen können. Das sind

- die falsche Startbasis der Tonlage, wobei ich mich am ursprünglichen Beispiel orientieren musste.
- der missglückte Versuch, Lyrics sauber (also komplett) aus Midis zu extrahieren, falls vorhanden
- das Halten von Tönen (autorepeat durch timer) bei der Option zum Instrumenten-Stimmen

Ausserdem habe ich festgestellt, dass sich bei der Midi-Wiedergabe das Instrument eines Kanals ändert, wenn man eins für die Tests auswählt. Anfangs dachte ich, das wäre unabhängig voneinander. Leider fand ich auch in den sehr komplexen Beschreibungen bass.chm und bassmidi.chm nichts dazu, wie man auf einzelne Midi-Kanäle zugreifen kann.

Delphi.Narium 21. Nov 2020 10:50

AW: erweiterte Demo für BASSMIDI.DLL
 
Zitat:

Zitat von Delfiano
- der missglückte Versuch, Lyrics sauber (also komplett) aus Midis zu extrahieren, falls vorhanden

ProcessMarkText sieht bei mir so aus:
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;
      #13     : Result := CaptionText + #13#10;
    else
      Result := CaptionText + MarkText;
    end;
  end else begin
    Result := CaptionText;
  end;
end;
Sofern bei Deinem Delphi bei Lyrics_Memo WordWrap auf true stehen sollte, ändere das bitte auf false, sonst stimmen die Zeilenumbrüche in der erstellten Datei nicht, dito. bei lbLyrics.

Edit:

Durch die unterschiedliche Breite der beiden Memos und eingeschaltetem WordWrap passt der Vergleich in der Routine lbLyricsChange
Delphi-Quellcode:
    IF  Lyrics_Memo.Lines[Lyrics_Memo.Lines.count-1]<>lbLyrics.Lines[lbLyrics.Lines.count-2]
    THEN BEGIN
nicht zwingend, da durch unterschiedliche Zeilenbreiten andere Zeilenumbrüche erfolgen.

Delfiano 21. Nov 2020 21:35

AW: erweiterte Demo für BASSMIDI.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Antwort, aber das Probem besteht leider weiter.

Ich hab das jetzt noch paar mal durchgetestet, mal mit wordwrap, mal ohne, mal mit dem ursprünglichen ProcessMarkText und mal mit Deiner übersichtlicheren Version.

Die Ergebnisse sind identisch, ausser dass beider Deiner Version von ProcessMarkText am Dateiende noch eine zusätzliche Leerzeile drangehängt wird. Daraufhin werde ich mir das noch mal genauer ansehen.

Das Problem ist nach wie vor, dass immer die letzte Zeile eines Absatzes geschluckt wird, weil ich doch die vorletzte Zeile auswerte, damit nur vollständige Zeilen geschrieben werden. Ich weiss nicht, wie ich an die letzte (vollständige) Zeile komme, bevor neuer Text eingelesen wird.

Als ich es mal anders machte und wirklich jede Änderung in die Datei schrieb, waren diese letzten Zeilen der Asbätze zwar enthalten, aber dafür jede Menge unbrauchbaren Zeilen.

Mal hier die so erzeugten letzten Zeilen des ersten Absatzes von "achy-breaky-heart" (Midi-Datei im Anhang zur Kontrolle)

But Mr. DJ, please
I'm beggin' on my knees
I just can't take no
But Mr. DJ, please
I'm beggin' on my knees
I just can't take no more
But Mr. DJ, please
I'm beggin' on my knees
I just can't take no more of
But Mr. DJ, please
I'm beggin' on my knees
I just can't take no more of Bil
But Mr. DJ, please
I'm beggin' on my knees
I just can't take no more of Billy
But Mr. DJ, please
I'm beggin' on my knees
I just can't take no more of Billy Ray

Bei der von mir im Prog benutzten Methode, nur vollständige Zeilen zu schreiben, fehlt die letzte, also "I just can't take no more of Billy Ray" und das ist bei allen Absätzen so.

Auch hab ich probiert, erst alles intern (wie oben gezeigt) zwischenzuspeichern und dann auszuwerten, aber auch das ist mißglückt.

Das Problem ist ganz einfach, dass die Texte bruchstückweise erscheinen, damit sie zur jeweiligen Stelle der Musik passen und ich einfach nicht weiss, wie ich sie sauber und vollständig zu einer ganzen Zeile zusammenfassen und speichern kann, bevor die nächste beginnt und alles vorherige löscht.

Ergänzung

Wie weitere Tests ergaben, sind Lyrics in Midi-Dateien absolut nie einheitlich integriert. Mit der ProcessMarkText-Version von Delphi.Narium werden bei einigen saubere Zeilenumbrüche erzeugt, die es bei der Original-Version von un4seen.com nicht gibt. Da klebt manches direkt aneinander.

Aber leider gibt es (je nach Midi-Datei) auch mit der Version von Delphi.Narium Probleme.

Ich häng hier mal noch einen Link zu einer Website mit Karaoke-Midi-Dateien an. Interessanterweise sind da auch die Texte nochmal komplett angegeben, was den Vergleich mit dem erlaubt, was durch das Prog angezeigt bzw. gespeichert wird.

http://www.karaokeden.com/karaoke

Delfiano 22. Nov 2020 09:41

AW: erweiterte Demo für BASSMIDI.DLL
 
Gerade habe ich meine wahrscheinlich letzte Version 0.8b vom 21.11.2020 in den Startbeitrag hochgeladen. Der Vorschlag von Delphi.Narium ist dabei aber noch nicht enthalten. Die ZIP-Datei enthält nur die EXE-Datei und die geänderte Hauptunit.

Leider bin ich nicht so gut im Beschreiben. Weil es mir gesundheitlich nicht gut geht, ist das wahrscheinlich auch meine letzte Version überhaupt.

Gedanklich bin ich auch so unkonzentriert, dass mir nicht mal geglückt ist, dem Programm Parameter zu übergeben, weil es dann gleich Fehler wegen einem Listenindex von -1 gibt. Wahrscheinlich war es von Anfang an falsch, auf fremden Vorgaben aufzubauen, statt erst ein stabiles Grundgerüst zu erstellen und erst danach die anderen Sachen zu integrieren.

Wer möchte, kann, darf und sollte meine paar nützlichen Features gerne jederzeit ungefragt in eigene Projekt übernehmen oder dieses hier nach eigenen Vorstellungen weiterentwickeln oder völlig umbauen.

Was mir noch auffiel, obwohl es keine unmittelbare Auswirkungen hat:

Weil ich statt einem TLabel für die Lyrics ein TMemo nahm, wären vielleicht diese Korrekturen sinnvoll:

LyricSync:
//TLabel(user).Caption := ProcessMarkText(TLabel(user).Caption, Mark.text);
TMemo(user).Text := ProcessMarkText(TMemo(user).Text, Mark.text);

TextSync:
//TLabel(user).Caption := ProcessMarkText(TLabel(user).Caption, Mark.text);
TMemo(user).Text := ProcessMarkText(TMemo(user).Text, Mark.text);

EndSync:
//TLabel(user).Caption := '';
TMemo(user).Text := '';

Delphi.Narium 22. Nov 2020 10:12

AW: erweiterte Demo für BASSMIDI.DLL
 
Ausgehend vom textlichen Inhalt bei Midi-Dateien herrscht da wohl eher ein absolutes Chaos vor.

Hast Du eine Midi, bei der nix klapp und Du passt Deine Routine an, bis es klapp, dann klappt es für diese Midi. Nimmst Du nun eine andere und Du passt die Routine an ..., wird es bei der ersten Midi meist nicht mehr klappen.

Du brauchst "nur" eine Lösung, die meist in Ordnung ist.

Letzte Zeile:

Der Text wird immer im OnChange des lbLyrics (lbLyricsChange) übernommen. Dort wird immer der bisher vorhandene Text in den Gesamttext übernommen. Beim letzten (bisherigen) OnChange wird also alles bis zur vorletzten Zeile übernommen. Um die letzte Zeile zu bekommen, musst Du (höchstwahrscheinlich) das OnChange noch einmal "händisch" aufrufen, z. B. beim Beenden der Wiedergabe.

In EndSync setzt Du Caption auf ''. Dies dürfte das lbLyrics leeren, hier müsstest Du aber noch die letzte Zeile übernehmen die zwar schon in lbLyrics enthalten ist, deren Übernahme in die Ausgabe aber noch fehlt.

Ändere das bitte mal um z. B. so:
Delphi-Quellcode:
procedure EndSync(Handle : HSYNC; Stream : HSTREAM; data : DWORD; user : Pointer); stdcall;
begin
  // Hierdurch müsste das Ereignis lbLyricsChange zweimal ausgelöst werden.
  // Beim ersten mal kann dort die letzte Zeile übernommen werden.
  // Beim zweiten Mal wird lbLyrics gelehrt.
  // Da bei der bisherigen Logik immer die letzte Zeile fehlt, wäre die nun
  // fehlende letzte Zeile halt '--- Ende ---', das können wir verschmerzen ;-)
  TLabel(user).Caption := ProcessMarkText(TLabel(user).Caption, '\--- Ende ---');
  TLabel(user).Caption := '';
  // bzw.
  TMemo(user).Text := ProcessMarkText(TMemo(user).Text, '\--- Ende ---');
  TMemo(user).Text := '';
end; {EndSync}
Ist halt 'nen Versuch wert, habe es aber nicht getestet.

Bzgl. TLabel(user).Caption und TMemo(user).Text hat mich gewundert, dass die erste Variante überhaupt funktioniert hat ;-)

Delfiano 23. Nov 2020 00:31

AW: erweiterte Demo für BASSMIDI.DLL
 
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.

venice2 23. Nov 2020 00:35

AW: erweiterte Demo für BASSMIDI.DLL
 
Versuch es mal mit meiner MidiLyricsClass
Oder versuch mal das hier weil in der Pas noch Abhängigkeiten fehlen.

Delphi.Narium 23. Nov 2020 09:41

AW: erweiterte Demo für BASSMIDI.DLL
 
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.

Delfiano 23. Nov 2020 09:54

AW: erweiterte Demo für BASSMIDI.DLL
 
@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.

juerg5524 23. Nov 2020 13:55

AW: erweiterte Demo für BASSMIDI.DLL
 
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!

Delphi.Narium 23. Nov 2020 14:07

AW: erweiterte Demo für BASSMIDI.DLL
 
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.

juerg5524 23. Nov 2020 14:28

AW: erweiterte Demo für BASSMIDI.DLL
 
Danke. Es funktioniert mit "archy-breaky-heart". Beim Debuggen stellte sich heraus, dass kein Soundfont gefunden wurde. Mit Soundfont ist alles ok.

Delfiano 23. Nov 2020 23:11

AW: erweiterte Demo für BASSMIDI.DLL
 
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.

venice2 24. Nov 2020 09:32

AW: erweiterte Demo für BASSMIDI.DLL
 
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?

Delfiano 24. Nov 2020 17:45

AW: erweiterte Demo für BASSMIDI.DLL
 
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.

Delfiano 24. Nov 2020 19:26

AW: erweiterte Demo für BASSMIDI.DLL
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe keine Lust mehr. Hiermit präsentiere ich die letzte noch immer unfertige Version meines Mülls.

Falls jemand was mit dem einen oder anderen durch mich integrierten Feature anfangen kann, das ich abweichend oder ergänzend zu den Beispielen von un4seen.com (auf denen ich aufgebaut habe) anfangen kann, dann nutzt es, denn allein zu dem einen Zweck habe ich dieses Projekt hier vorgestellt: Damit andere sehen, was man mit Delphi und Soundfonts bzgl. Midi machen kann.

Ich habe diesmal mit Delphi 5 compiliert. Enthalten sind alle benötigten Dateien inkl. fertiger EXE.

Was fehlt sind Midi-Dateien und Soundfonts.

Wenn jemand was mit dem Kram anfangen kann, würde es mich freuen.

08b2: (nicht veröffentlicht)

Ab Version 08b2 habe ich geschafft, fürs Tuning von Bass und Gitarre jetzt endlich den Timer einzusetzen. Dafür gibt es Buttons und es ist möglich, beides gleichzeitig zu aktivieren. Bei aktivierter Option ist die Schrift der Buttons fett, ansonsten normal.

Neu ist ausserdem die Option, MIDI-Autoplay (über die INI-Datei) zu setzen bzw. zu verhindern. Voreinstellung ist ansonsten nach wie vor das automatische Abspielen bei Programmstart.

Zur besseren Erkennbarkeit habe ich die Hintergründe nicht direkt erkennbarer Felder auf eine andere Farbe gesetzt, die aber nur im im Delphi-Editor zu sehen ist, nicht mehr im laufenden Programm.

Ausserdem habe ich die Zuweisungen für die Lycrics von TLabel auf TMemo geändert, obwohl das bedeutungslos war, weil beides TEXT ist.

08c: (hier im Anhang)

Ab Version 0.8c habe ich die Zuweisungen von bisher "MidiStream" auf "MidiStreams[1]" geändert, nachdem ich "MidiStream" auf ein Array "MidiStreams : ARRAY[1..4] OF HSTREAM;" geändert habe. Davon erhoffe ich mir, später auf mehrere unterschiedliche Soundfonts gleichzeitig zugreifen zu können, um so ggf. z.B. den Midiplayer, den Testbereich zum Aufruf einzelner Töne und die Option zum Stimmen von Instrumenten mit unterschiedlichen Soundfonts ansprechen zu können. Ob das was wird und wie es sich umsetzen lässt, ist dabei noch ohne Bedeutung.

Die Option "play 3 tones" wurde geändert zu "play chords" und um einen vierten Ton erweitert und gilt nun nicht mehr nur für "randomtest", sondern auch für das Einzelklicken eines Tons mit der Maus in "ListBox_Drums" und für playone / playall sowie für das Drücken einer Tastaturtaste, aber nicht für das Drücken mit Maus oder Tastatur im Bereich "Keyboard input" ...

Beim Drücken einer Tastaturtaste habe ich die "sleep"-Zeit verkürzt, damit es flüssiger läuft. Für den Bereich "Keyboard input" hätte es allenfalls für das Anklicken mit der Maus Bedeutung, weil sich per Tastatur mehrere Tasten gleichzeitig drücken lassen.

Sinnvoll wäre vielleicht noch die Wahlmöglichkeit zwischen Dur-, Moll- und Septim- Akkorden. Ich habe es erstmal bei Dur belassen.

venice2 25. Nov 2020 06:58

AW: erweiterte Demo für BASSMIDI.DLL
 
Zitat:

Es ist nicht gerade freundlich, auf meine rein sachliche Kritik mit gegen mich persönlich gerichteten Frust-Angriffen zu reagieren.
Video gesehen?
Mehr gibt es nicht zu sagen was nicht schon gesagt wurde.

Aber danke. Habe noch 2 kleine Fehler gefunden die ich dadurch beheben konnte.
Ein paar Bedienelemente Re-positionieren, List-Box korrekt in den Hintergrund zu setzen.

Delphi.Narium 25. Nov 2020 10:22

AW: erweiterte Demo für BASSMIDI.DLL
 
Zitat:

Zitat von Delfiano (Beitrag 1477891)
Ich habe keine Lust mehr. Hiermit präsentiere ich die letzte noch immer unfertige Version meines Mülls.

Für mich ist das absolut kein Müll, Du hast halt 'nen anderen Ansatz als Emil (venice2). Ja und?

Hab' halt aus dem Beispiel von un4seen meine eigene Variante eines Midiplayers gebaut. Ist auch was absolut anderes geworden, als die hier vorgestellten. Ja und?

In Deinem Quelltext kann ích mich auf Anhieb problemlos zurechtfinden. Das findet man nicht so unbedingt bei allen Programmierern.

Von Müll kann ich da nix erkennen.

TiGü 25. Nov 2020 10:57

AW: erweiterte Demo für BASSMIDI.DLL
 
Auch wenn ich Eulen nach Athen trage, aber hast du/habt ihr bei spezifischen Detailproblemen auch das Forum von un4seen konsultiert bzw. eure Fragen da gestellt?

http://www.un4seen.com/forum/

juerg5524 26. Nov 2020 10:12

AW: erweiterte Demo für BASSMIDI.DLL
 
Hallo Delphiano

Ist es möglich, dass das Programm "SF2Comp.exe" nicht mehr benötigt wird? Wenn ich es Umbenenne, "Button_SF2_WORK.visible:=FALSE;" in der "BaseUnit.pas" auskommentiere und
bei "IF NOT (FileExists(DLL)) OR NOT (FileExists(EXE))" in "U_SF2.pas" vor "OR" auskommentiere, dann startet dein Programm ganz normal. Ich kann keinen Unterschied erkennen. Kannst du mir helfen, übersehe ich da was?

Danke und Gruss
Jürg

Delfiano 26. Nov 2020 14:48

AW: erweiterte Demo für BASSMIDI.DLL
 
SF2Comp.exe etc.
Hallo juerg5524.

Sorry, wenn darauf ich nur kurz antworte, weil es mir gesundheitlich sehr schlecht geht.

SF2Comp.exe, SFEDT32.DLL und U_SF2a dienen dazu, SoundFonts zu extrahieren etc.

U_SF2a ist lediglich ein Wrapper (also eine Benutzeroberfläche) für SF2Comp.exe und SFEDT32.DLL.

Wer das nicht braucht, kann natürlich alle entsprechenden Teile entfernen. Ich bin selbst nicht mehr davon überzeugt, dass es sinnvoll war, mein Beispielprog damit zu überfrachten. In einem anderen Thema hatte ich den Wrapper als separates Projekt vorgestellt, bevor ich auf den Gedanken kam, man könne ihn auch integrieren.

Forum von un4seen.com
Hallo TiGü.

Natürlich habe ich mir das Forum angesehen. Aber die Leute dort sind "C" orientiert und der Midibereich ist bei denen anscheinened eher ein Randthema. Die paar diesbzgl. Sachen für Delphi funktionieren nicht, sonst hätte ich längst einen Equalizer integriert. Auch wüsste ich jetzt nicht, was ich da fragen sollte. Zum "mitsingen" reicht doch deren Integration der Lyrics. Auch ist mein englisch nicht gut genug für Spezialbegriffe.

Warum Müll ?
Hallo Delphi.Narium.
Ich bin Perfektionist und darum völlig unzufrieden. Falls ich mich nochmal damit beschäftigen sollte, fremde Sachen irgendwo zu integrieren, werde ich vorher ü erlegen, was man draus machen könnte und erst ein Konzept dafür entwickeln, statt auf Bestehendem aufzubauen und das so stümperhaft zu erweitern, wie ich es gemacht habe.

Stell doch bitte auch mal Dein Programm vor.

Video gesehen?
Hallo, venice2.

Warum sollte ich mir irgendein Video ansehen, das mit Deinem Projekt zu tun hat, obwohl Du völlig andere Vorstellungen und Ziele hast? Stelle doch bitte Dein Projekt an anderer Stelle vor, statt dadurch Verwirrung zu stiften, irgendeinen Zusammenhang zum Thema Soundfonts herstellen zu wollen, den es nicht gibt.

venice2 26. Nov 2020 15:11

AW: erweiterte Demo für BASSMIDI.DLL
 
Zitat:

Video gesehen?
Hallo, venice2.

Warum sollte ich mir irgendein Video ansehen, das mit Deinem Projekt zu tun hat, obwohl Du völlig andere Vorstellungen und Ziele hast? Stelle doch bitte Dein Projekt an anderer Stelle vor, statt dadurch Verwirrung zu stiften, irgendeinen Zusammenhang zum Thema Soundfonts herstellen zu wollen, den es nicht gibt.
Tut mir leid das es dir so schlecht geht desto trotz lese doch einfach mal warum ich mein Projekt hochgeladen habe und um was es in diesen Beitrag ging die Verwirrung kommt also von deiner Seite.
Um Lyrics! Genau und nicht um Soundfonts. Mein Video widerspricht einfach all deinen Behauptungen.
Du hattest aufgegeben und ich wollte dich mit den Lyrics Kram unterstützen.

Egal bin eh aus dem Thema hier raus. Viel Spaß noch damit.

Delfiano 22. Feb 2021 02:39

AW: erweiterte Demo für BASSMIDI.DLL
 
Am 24. Nov 2020, 20:26 hatte ich Version 0.8c hochgeladen.

Mittlerweile habe ich mich noch an einigen weiteren Sub-Versionen versucht und dabei einen wohl ziemlich gravierenden Fehler entdeckt, den ich nicht verschweigen will, weil es dadurch immer mal wieder passieren kann, dass das Programm schon kurz nach dem Start hängen bleibt.

Anscheinend wird die Variable "BufLen" nicht oder nicht richtig initialisiert. Falls beim Start des Programms nicht zufällig ein brauchbarer Wert erzeugt wird, kommt es zu genanntem Problem.

Die Positionierung in "BufferTrack" ist insofern auch fehlerhaft.

Das Problem ist allerdings bereits im durch mich integrierten Beispielprogramm "Synth" des Anbieters von BASS.DLL und BASSMIDI.DLL enthalten.

Ich bitte um Verständnis, hier lediglich auf den Fehler hingewiesen zu haben, weil die aktuellen Weiterentwicklungen teils erheblich umstrukturiert wurden. Wann ich mal dazu komme diese (nur bei allgemeinem Interesse) zu veröffentlichen, steht noch in den Sternen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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