![]() |
Re: MP3 in Cache "zwischenspeichern"
Hast du vielleicht irgendwo einen Beispiel -Player in dem du direkt mit der bass.dll arbeitest?
|
Re: MP3 in Cache "zwischenspeichern"
Ja diese Komponente.
Du schaust dir den Sourcecode an und baust deine Sachen da ein und soweit sie Sinnvoll sind veröffentlicht du sie wieder. Was du willst heisst übrigens crossfade. Ich hab das selber übrigens schon integriet muss mir aber erstmal überlegen ob ich das veröffentliche. |
Re: MP3 in Cache "zwischenspeichern"
Moin,
habe mich nochmal mit dieser Komponente beschäftigt. Und das darf ja wohl nicht war sein! Jeder, der ein Programm mit dieser Komponente fehlerfrei starten kann, hat seine Bereichs- und Überlaufs-Fehlerprüfung nicht eingeschaltet! Das heisst alle die so programmieren, programmieren unsicher. Ich bin zur zeit dabei diese Komponente und alles was damit zusammenhängt zu überarbeiten. Böse Befehle wie Exit und Halt werden entfernt. Fehlermeldungen, die einfach durch eine MessageBox ausgegeben werden werden in Exceptions gewandelt. Leider enthält der DLL-Loader auch noch ein Speicherleck. Die Komponente schränkt die Benutzung das BASS-System unnötig ein, dies möchte ich eingentlich beheben. Also ich arbeite noch dran... MfG Thorsten |
Re: MP3 in Cache "zwischenspeichern"
Ich habe schon mit dem User "turboPASCAL", der die Bass Komponente zu der oben der Link steht, gecodet hat gesprochen (wegen dem Crossfaden):
Er sagt dazu: "1. Im constructor TBassdllPlayer.Create wird schon ein Recording Device inizialisiert... Quellcode: markieren if not BASS_RecordInit(0) then begin BASS_RecordFree; BASS_Free(); MessageDlg('Cannot start default recording device!', mtError, [mbOk], 0); halt; end; ...und zweimal das gleiche Gerät öffnen geht einfach nicht. Also kann man nicht 2 oder mehr BassdllPlayer in einem Prg. verwenden. 2. Es darf nur eine BASS.DLL in den Speicher geladen werden sonst gibt das eventuell einen Konflikt. Man müsste das gesamte Ding fast komplett umschreiben auf "Mehrfachbenutzung". Wenn Du mehrere Sounds gleichzeitig abspielen möchtest ist die BassdllPlayer-Kompo. (leider) nicht geeignet. " |
Re: MP3 in Cache "zwischenspeichern"
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir das Ganze noch mal durch den Kopf gehen lassen, das einfachste um ein Crossfade zu realisieren ist wohl ein simples "Channelblending".
dazu im Demo verwendet:
Delphi-Quellcode:
BASS_ChannelSlideAttributes eignet sich nur zum Ausblenden.
BASS_ChannelSetAttributes(DWORD handle, int freq, int volume, int pan);
Im Anhang ist dazu eine einfache Demo (Source) es benötigt die Bass.pas und Bass.Dll. Man kann dies auch umgehen und von der TBassDLLPlayer Komponente die Dateien Bass_Dynamic.pas und DLLLoader.pas in das Verzeichnis kopieren, und in der uMain.pas die Unit Bass(.pas) in der Uses-Klausel durch die Bass_Dynamic(.pas) zu ersetzen damit die Bass.Dll in das Programm mit eingebunden wird. Die MP3-Dateinamen müssen im Code angepasst werden (kein OpenDialog...) und sie sollten ungefähr gleichlang sein, weiterhin ist das Crossfade nur manuell. Will man nun Song1 automatisch zu Song2 blenden gibt es eine einfache Lösung im Forum von ![]() ![]() Leider konnte ich wegen Zeitmangel momentan kein besseres Demo schreiben, Sorry. |
Re: MP3 in Cache "zwischenspeichern"
Das Beispiel ist 1A!!
Und wenn man dies jetzt noch "benutzer/anfängerfreundlich" machen könnte, sprich in die Komponente integrieren, dass man 2 Tonspuren gleichzeitig spielen kann, dann wäre das absolut TOP! |
Re: MP3 in Cache "zwischenspeichern"
Ich weiß nicht, ob du inzwischen zu einem Ergebnis gekommen bist, jedoch habe ich vor kurzem mal eine Komponente erstellt, die Crossfading betreiben kann.
Ein Beispielproggi, das sämtliche Funktionen beschreibt, liegt bei... ![]() Die Komponente ist noch nicht komplett fertig. Zum Beispiel fehlt die Lautstärkeregelung. Diese Features dürften aber nicht allzu schwer zu implementieren sein. Falls verständnisschwierigkeiten aufkommen sollten, helfe ich natürlich gerne :) ![]() Zur weiteren Erklärung der Funktionsweise: Ich erstelle zwei Streams die parallel Laufen (hiervon kann man im Prinzip beliebig viele erstellen, wenn man "zuviel" Speicher hat :wink: ). Mit BASS_ChannelSetSync erstelle ich dann eine Callback Prozedur, die automatisch aufgerufen wird, sobald eine bestimmte Stelle im vorangegangenen Track erreicht wurde. Dann wird mit BASS_ChannelSlideAttributes das Fading initialisiert. Eigentlich ganz simpel :) |
Re: MP3 in Cache "zwischenspeichern"
Liste der Anhänge anzeigen (Anzahl: 1)
So,
hat einen Moment gedauert... ich habe jetzt alles überarbeitet und die Begrenzungen, die einem die BassDllPlayer-Komponente auferlegt hat beseitigt. Das Speicherleck der DllLoader-Unit konnte ich leider noch nicht stopfen! (aber das habt ihr ja bei der alten Komponente auch nicht gemerkt) Trotzdem, vielleicht findet ja irgendwer den Fehler bzw. kann ihn beheben. Das Problem ist das die vier erstellen Sections.Base-Elemente durch VirtualFree nicht freigegeben werden. Die Unit ist richtig programmiert (so weit ich das sehen konnte). Der Speicher wird freigegeben aber MemProof sagt mir, dass bei dieser Freigabe ein Fehler passiert ist. Ich habe keine Ahnung, was da los ist (eventuell liegt es an SP2) Naja, egal kommen wir jetzt zur Komponente... Jetzt kann man endlich die Bereichs- und Überlauf- Fehlerprüfungen eingeschaltet lassen. hurra! Es können jetzt unendlich viele Komponenten (BassDllPlayerEx) in einem Programm verwendet werden. Jeder Komponente wird dabei eine Soundkarte zugewiesen. Bei neueren Soundsystemen kann man auch einfach mehrere Komponenten der gleichen Soundkarte zuordnen. Dies ist aber nicht erforderlich, da in jeder Komponente jetzt unendlich viele Kanäle definiert werden können. (Um Probleme mit älteren Soundsystemen zu vermeiden sollte man nur eine Komponente pro Soundkarte einsetzen - das geht dann immer!) Ich habe mal ein kleines Beispiel angehängt. Es existiert keine Playlist mehr, sorry hatte ich jetzt keine Lust mehr drauf. Die Komponente muss nicht installiert werden, einfach entpacken, kompilieren und wohlfühlen... Das Programm testet fünf Soundkarten und legt für jede in einem PageControl eine Seite an. Wenn man nur eine Soundkarte hat, werden (in der IDE) vier Exceptions ausgelöst (also einfach weiterausführen). Wenn die Exe läuft bekommt man natürlich nichts davon mit. Ich breche die Schleife der Soundkarten nicht mit EXIT ab (weil: ich hasse exit, halt, break, goto). Auf jeder Soundkartenseite im PageControl können dann über die rechte Maustaste Kanäle hinzugefügt bzw. entfernt werden. Auf die Aufnahmemöglichkeiten der BassDllPlayer-Komponente bin ich nicht weiter eingegangen. Ich habe einfach die Vorgaben von der BassDllPlayer-Komponente übernommen. Ob das alles so funktioniert weiss ich nicht, mich interresierte nur das Abspielen - vielleicht kann das ja mal einer testen. Ich möchte mich hier ausdrücklich bei meinen Vorgängern (Gandalfus & turboPascal) bedanken. Eure Vorarbeit (im Besonderen das Einbetten der DLL in die EXE) hat mir sehr gefallen. Ich hoffe euch beiden (und natürlich jeden den es interessiert) gefallen meine Erweiterungen. Ich bin einfach konsequent den Weg weitergegangen, den Ihr beiden angefangen seit zugehen. Also nochmal danke für die Möglichkeit. MfG Thorsten |
Re: MP3 in Cache "zwischenspeichern"
@omata
Ich finde es nicht so glücklch, die Bass dll mehrfach zu laden. Dafür gibt es doch die Möglichkeit innerhalb von Bass weitere Streams zu erzeugen. |
Re: MP3 in Cache "zwischenspeichern"
ja, schade dass du es nicht verstanden hast.
Man kann mit der Bass.dll nur eine Soundkarte ansprechen und auf dieser dann mehrere Channel miteinander mischen. Wenn man aber mehr als eine Soundkarte hat, dann braucht man für jede Soundkarte eine eigene Dll. Und dann muss man eben die Dll mehrfach (so oft wie Soundkarten vorhanden sind) laden. MfG Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz