AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte BassPlayerEx mit erweiterten Soundeffekten...
Thema durchsuchen
Ansicht
Themen-Optionen

BassPlayerEx mit erweiterten Soundeffekten...

Ein Thema von omata · begonnen am 15. Mär 2006 · letzter Beitrag vom 24. Jul 2008
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
omata
Registriert seit: 26. Aug 2004
Nachdem wir hier mal gestartet sind und der Thread nun doch langsam unübersichtlich wird, mache ich hier mal was neues auf.
Unübersichtlich deshalb, weil es mittlerweile zwei Varianten gibt. Beide haben ihre Vor- und Nachteile. Und leider habe ich keine Möglichkeit gefunden, alles in einem Projekt zu vereinen.

Dieser Thread beschäftigt sich mit dem Einsatz der Bass.dll und ihrer Erweiterungs-Dlls. Dies alles funktioniert allerdings nur auf einer Soundkarte (pro Anwendung). Wer mehr Soundkarten aus einer Anwendung heraus ansteueren möchte (z.B. für einen Monitor) sollte hier mal schauen.

Die Visualisierungen können jetzt auch als Plugin nachgeladen werden. Die Pluginstruktur ist die von Winamp.
Die Plugins findet ihr hier.


Viele Grüsse
Thorsten
Miniaturansicht angehängter Grafiken
screen_201.jpg  
Angehängte Dateien
Dateityp: exe bassplayer_170.exe (384,5 KB, 340x aufgerufen)
Dateityp: zip bassplayerex__b_3_3__808.zip (309,7 KB, 449x aufgerufen)
Dateityp: zip bassplayerex__b_3_3__143.zip (791,7 KB, 443x aufgerufen)
 
Der_Ventilator

 
Delphi 2010 Professional
 
#2
  Alt 17. Mär 2006, 20:39
Irgendwie passen Titel und Text deiner beiden Threads nicht zusammen...
Welcher referenziert denn nun welches Thema (eine oder mehrere Soundkaten)?
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#3
  Alt 17. Mär 2006, 23:53
Hallo Der_Ventilator,

danke für deinen Hinweis.
Da habe ich wirklich was durcheinandergebracht, habs jetzt korrigiert.
Sorry für die Verwirrung.

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#4
  Alt 18. Mär 2006, 09:21
hallo omata,

bei diesem Beitrag hast du die links vertauscht.
ich klickte auf diesen link:
Zitat:
Nur eine Soundkarte aus einer Anwendung ansteuern (mit Erweiterungs-Dlls) - hier.
und landete auf dieser seite

sollte man vielleicht noch ändern, nicht dass jemand die falsche komponente herunterlädt...

gruss
urbanbruhin
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#5
  Alt 18. Mär 2006, 12:44
Meine Güte, da war ja wohl alles irgendwie durcheinander.

Danke für den Hinweis.

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#6
  Alt 18. Mär 2006, 19:00
hallo omata,

ich hätte da noch 2 fragen...

1.
Könnte man vielleicht machen, dass alle visualisierungen in der TBassPlayerExU.pas sozusagen "inbegriffen" sind, d.h. dass man die visualisierung über den TBassPlayerEx gewählt werden kann? klingt kompliziert, darum habe ich hier mal ein bisschen code, wie ich mir das ungefähr vorgestellt habe:
Delphi-Quellcode:
  Player := TBassPlayerEx.Create(1, self);
  Vis := TFrameVisTurboPascal.create(self);
  ChannelA:=Player.addChannel(100);
  Player.VisImage := Image321; // TImage32 für die visualisierung
  Player.VisChannel := ChannelA; // So wird das Vis von ChannelA in Image321 angezeigt
  Player.Vis := vis; // Hier kann eingestellt werden, welche Visualisierung man will. Kann z.B. auch eine Integer-Zahl sein, z.B. 1 = TFrameVisTurboPascal, 2 = TFrameVisDizzy, 3 = TFrameVisCappellozza usw.
verstehst du was ich meine?
wäre das so möglich oder ist das viel zu kompliziert?

jetzt die 2.Frage:
man kann ja mit Channel.LoadFromLied eine Abspielliste laden (wenn ich das so richtig verstanden habe). Ich habe in meinem programm eine Listview als abspielliste. diese kann sich aber jederzeit verändern, es können tracks hinzugefügt, verschoben oder gelöscht werden. kann ich so trotzdem irgendwie dem Channel diese abspielliste übergeben, die er dann der reihe nach abspielt, oder muss ich das "von hand" programmieren, dass nach dem ende eines tracks der nächste track abgespielt wird? mit dem FadeIn und FadeOut ist das irgendwie ziemlich kompliziert.

thx schon im voraus

gruss
urbanbruhin
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#7
  Alt 18. Mär 2006, 22:33
Hallo urbanbruhin,

zu 1:
sicher ist das möglich. Aber wäre das sinnvoll?
Zur zeit gibt es einfach noch eine Indirektstufe mehr als das was du da vorschlägst. Dein Vorschlag ist sehr starr und würde alle die es anders haben wollen zu sehr einschräncken.
Außerdem stellt das Basssystem die erforderlichen Informationen für eine Visualisierung nur pro Channel bereit. Das bedeutet wenn es in der BassPlayerEx-Klasse einen Zugriff auf diese Informationen geben soll, müsste das eine Addition aller aktiv spielenden Channels sein. Diese Addition würde aber sicherlich sehr viel Resourcen fressen.

zu 2:
dafür hatte ich das TGetLiedEvent eingebaut. Dieses Ereignis wird ausgelöst, wenn ein Channel ein neues Lied haben möchte. Als Übergabeparameter wird dort ein TLied erwartet. Wenn du also mit diesem Objekt TLied arbeiten würdest (so wie im Demo die Playlist) hättest du es ganz einfach.
Falls du das nicht willst, habe ich die Version gerade dahingehend erweitert, dass es auch ein Event TGetFileEvent gibt. Diesem Event kann man dann einen Dateinamen übergeben.

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#8
  Alt 19. Mär 2006, 12:29
Hallo omata,

danke für deine antwort

du hast recht, das mit den visualisierungen war nicht so eine gute idee...

das TGetFileEvent wäre genau das, was ich brauche, denke ich.
ich habs mal so versucht:

im onCreate-Ereignis der Form1 habe ich (nachdem der channelA erzeugt wurde) folgende zeile ergänzt:
ChannelA.getFileEvent := GetFileEvent; die function GetFileEvent sieht im moment so aus:
Delphi-Quellcode:
function TForm1.GetFileEvent(var Dateiname: string): boolean;
begin
  showmessage('GetFileEvent');
end;
so wollte ich schauen, wann und ob diese funktion ausgelöst wird.
mit ChannelA.loadfromFile() und ChannelA.Play spiele ich ein Track ab. wenn dieser zu ende ist, kommt aber keine Showmessage. was muss ich machen, dass diese funktion ausgeführt wird?

und wenn ich einen übergang (FadeIn, FadeOut) zwischen zwei tracks haben will, muss ich da nur FadeAuto und FadeTime einstellen, und dass sollte funktionieren, wenn ich bei GetFileEvent einen dateinamen übergebe? wird dann diese funktion auch rechtzeitig ausgeführt, also bevor der track zu ende ist?

ich hoffe ich gehe dir nicht auf die nerven mit den vielen fragen

gruss
urbanbruhin
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#9
  Alt 19. Mär 2006, 15:24
Hallo urbanbruhin,

deine Vorgehenweise ist im Prinzip richtig. Aber du kannst das Event auch an die BassPlayerEx-Klasse übergeben. Dann wird jedem Channel in dieser Klasse die Ereignisroutine automatisch zugewiesen (beim Aufruf von addChannel).

Das Ereignis wird ausgelöst wenn du LoadNextLied eines Channels aufrufst. Es wird auch ausgelöst wenn AutoFade eingeschaltet ist und das Lied am Ende ist bzw. ausgeblendet wurde. Wenn ein Channel noch kein Lied geladen hat und man doFadingIn aufruft, wird das Event ebenfalls ausgelöst.

Das Überblenden musst du schon selber verarbeiten. Dies ist erforderlich weil die einzelnen Channels ja nicht wissen können zu welchem Channel du faden möchtest. Die Channels können dich nur unterstützen. Dafür gibt es isFadeOutPosition wenn das true wird, ist die errechnete Endposition im Channel erreicht. Dann kannst du doFadingOut aufrufen. Den Channel den du dann einblenden möchtest kannst du dann mit Channel.doFadingIn einblenden.

Hoffe das hilft dir weiter...
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#10
  Alt 19. Mär 2006, 19:51
Hallo omata,

ich denke, das habe ich soweit mal verstanden.
nun wollte ich mal doFadingOut bei einem channel anwenden.

meine OnUpdateTimeEvent sieht so aus:
Delphi-Quellcode:
procedure TForm1.OnUpdateTimeEvent(Basschannel: TBasschannel);
var TimeUp, TimeLength: String;
begin
  channela.FadeTime := 5;
  channela.FadeAuto := true;
  channela.FadeStop := true;
  label5.Caption := booltostr(channela.isComplete, true); // Hier sehe ich immer, ob true oder false
  label6.Caption := booltostr(channela.isFadingOK, true); // und hier auch
  label7.Caption := booltostr(channela.isFadeOutPosition, true); // und hier
  if (channela.isFadingOK) and (channela.isFadeOutPosition) then
    channela.doFadingOut;

  if channela.Status in [sndplaying, sndpaused] then
  begin
    TimeUp := ChannelA.SongTimeInfo[SongTimeUp].asSecString;
    TimeLength := ChannelA.SongTimeInfo[SongTimeLength].asSecString;
    if TimeUp = '--:--then TimeUp := '00:00';
    if TimeLength = '--:--then TimeLength := '00:00';
    label3.caption := TimeUp +' von '+ TimeLength;
    JvXPProgressBar1.Position := ChannelA.SongTimeInfo[SongTimeUp].asmillisecinteger;
  end;
end;
also isComplete ist immer true wenn ein track abgespielt wird. is fadingOk auch. aber isFadeOutPosition wird immer erst true, wenn der Track zu ende ist, also findet nie ein FadingOut statt. warum ist das so? FadeTime ist ja gesetzt.

EDIT: ICh habe grad noch etwas gemerkt:
Delphi-Quellcode:
channela.FadeTime := 5;
channela.FadeStop := true;
Channela.doFadingOut;
wenn ich diesen code aufrufe, wird die lautstärke immer leiser bis man nichts mehr hört, doch der track läuft fröhlich weiter, obwohl die volume auf null ist. beim onUpdateTimeEvent wird ja die Position der JvXPProgressBar1 immer aktualisiert (das ist die position des tracks). daran sehe ich auch, dass der track auch nach dem doFadingOut noch weiterläuft. wenn ich dann die volume von ChannelA hochdrehe, höre ich den track wieder. aber FadeStop ist ja auf true, da sollte doch nach dem doFadingOut sofort ChannelA.Stop aufgerufen werden, oder?

gruss
urbanbruhin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 16:35 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