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 2 von 5     12 34     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)
 
omata

 
Delphi 7 Enterprise
 
#11
  Alt 20. Mär 2006, 00:14
Hallo urbanbruhin,

das was du da geschrieben hast sollte soweit stimmen. Der Channel spielt um die FadeTime weiter und sollte dann auf Stop bzw. Pause gehen. Ich kann nicht so ganz nachvollziehen warum das bei dir nicht geht. Wie du sieht, geht es im Demo wunderbar. Vielleicht kannst du da nochmal reinschauen und dir ein paar Hilfestellungen holen (dafür ist das Demo ja da).

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#12
  Alt 24. Mär 2006, 22:24
Hallo omata,

Ich habe mal ein neues Projekt angefangen, um das FadeStop zu testen. hier der ganze code dazu:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, BassPlayerExU, basschannelu, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Player : TBassPlayerEx;
  ChannelA : Tbasschannel;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Player:=TBassPlayerEx.Create(1, self);
  ChannelA:=Player.addChannel(100);
end;

procedure TForm1.Button1Click(Sender: TObject); // Play-Button
begin
  if not opendialog1.Execute then exit;
  channela.LoadFromFile(opendialog1.filename);
  channela.Play;
end;

procedure TForm1.Button2Click(Sender: TObject); // Stop-Button
begin
  channela.FadeTime := 2;
  channela.FadeStop := true;
  channela.doFadingOut;
end;

procedure TForm1.Button3Click(Sender: TObject); // Volume-Button
begin
  channela.Volume := 100;
end;

end.
wenn man auf play und dann auf stop klickt, "fadet" die musik aus, bis man sie nicht mehr hört. wenn man aber mit dem Button3 die volume auf 100 stellt, hört man sie wieder, d.h. die musik läuft weiter

im anhang die EXE vom obigen (deutsch??) code. Komisch ist nur, dass das bei deiner Demo nicht so ist...

EDIT:
ich glaube, ich habe den fehler jetzt gefunden. ich habe in der Unit "BassCHannelU" ein bisschen abgeändert, jetzt sieht sie so aus:
Delphi-Quellcode:
procedure TBassChannel.UpdateTime;
var vol, freq: cardinal; // das ist neu
    pan: integer; // das auch
begin
  _BassDll.BASS_ChannelGetAttributes(_Channel, freq, vol, pan); // und das...
 if _FadeAuto then
    if _BassDll.BASS_ChannelGetPosition(_Channel) < _Start then
      _BassDll.BASS_ChannelSetPosition(_Channel, _Start);

  if _FadeOut and ((vol <= 1) or (Status <> sndPlaying)) then begin // hier habe ich _volume durch vol ersetzt
    if _FadeStop then
      Stop
    else
      Pause;

    _Volume:=_FadeStartVolume;
    _FadeOut:=false;
    if _FadeAuto then
      LoadNextLied;
  end;
  if assigned(_OnUpdateTimeTimer) then
    _OnUpdateTimeTimer(Self);
end;
warum es mit vol funktioniert und mit _volume nicht:
die eigenschaft _volume verändert sich ja nicht während dem fading, und auch nach dem fading nicht. wenn man aber die volume mit BASS_ChannelGetAttributes ermittelt, ist es die volume genau in diesem moment, wenn die prozedur ausgeführt wird.
ich hoffe du verstehst was ich meine...

es wäre gut, wenn du das mal anschauen würdest, und dann auch eine neue version hochladen würdest.

Gruss
urbanbruhin
Angehängte Dateien
Dateityp: exe project1_618.exe (569,0 KB, 71x aufgerufen)
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#13
  Alt 26. Mär 2006, 17:56
Hallo urbanbruhin,

habe deine Erweiterungen eingebaut und hochgeladen. In meiner Demo ist mir das nicht aufgefallen weil sich dort _Volume auch ändert. Dies wird dort allerdings von aussen gesteuert. Da man das nicht vorraussetzen kann oder sollte, ist dein Tipp sehr sinnvoll.
Vielen Dank für deinen Hinweis und deine Mühe.

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#14
  Alt 27. Mär 2006, 20:06
Hallo omata,

also irgendwas stimmt da nicht

hast du noch mehr am code verändert?
jetzt funktionierts nämlich nicht mehr...
wenn man nach dem fadeout die volume auf 100 stellt, läuft die musik weiter.

ich habe mal den code angeschaut, doch ich habe den fehler nicht gefunden.
im anhang ein beispielprojekt (delphi 2005), vielleicht findest du den fehler ja.

gruss
urbanbruhin
Angehängte Dateien
Dateityp: rar project1_184.rar (306,5 KB, 90x aufgerufen)
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#15
  Alt 27. Mär 2006, 20:54
Hallo urbanbruhin,

du musst auch das TimerUpdate aktivieren...

  Player.TimeUpdateEnable:=true; dann geht auch dein Beispiel.

MfG
Thorsten
  Mit Zitat antworten Zitat
kurtm1
 
#16
  Alt 28. Mär 2006, 17:24
Wollte mir das neue Beispiel mal ansehen, um mein Programm eventuell auf diese Version umzustellen, komme aber irgendwie mit dem überhaupt nicht zusammen.

Habs normal entpackt und kompliliert, sowie gestartet.
Das Song laden, etc. klappt ohne Probleme, aber wenn ich das Lied abspielen möchte, beginnt es im Lied sehr zu knistern, so dass es nach nichts mehr klingt. Weiters geht die CPU Auslastung (gemessen mit TaskManager) auf über 30%, RAM-verbrauch fast 20Mb..

Angezeigt (daher direkt vom BassPlayer verbraucht) werden aber nur die 2-2,5% die ja normal sind, also liegts wohl nicht am PlayerModul..

Hab mir jetzt noch die schon kompilierte Datei runtergeladen, selbes Verhalten
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#17
  Alt 29. Mär 2006, 19:55
Hallo kurtm1,
Zitat von kurtm1:
Das Song laden, etc. klappt ohne Probleme, aber wenn ich das Lied abspielen möchte, beginnt es im Lied sehr zu knistern, so dass es nach nichts mehr klingt. Weiters geht die CPU Auslastung (gemessen mit TaskManager) auf über 30%, RAM-verbrauch fast 20Mb..
danke für deine Rückmeldung.
Bei mir bleibt die CPU-Belastung bei 3-4%, deshalb habe ich da nicht weiter drüber nachgedacht. Ich denke mal das dieses Knistern zustande kommt, weil dein Rechner das einfach nicht mehr schafft.
Ich konnte den Code noch etwas optimieren. Bitte probier das jetzt nochmal aus.

Die 20MB kommen durch die Visualisierungen zustande - ich arbeite dran.

MfG
Thorsten
  Mit Zitat antworten Zitat
100nF
 
#18
  Alt 29. Mär 2006, 20:26
hallo omata,

mit Player.TimeUpdateEnable:=true; funktionierts jetzt wunderbar!!

thx

gruss
urbanbruhin
  Mit Zitat antworten Zitat
kurtm1
 
#19
  Alt 30. Mär 2006, 08:10
@omata: Der Rechner (Laptop) sollte es locker packen, ich kann mir nur vorstellen, dass die SharedMemory Grafikkarte die Probleme macht, bzw. für die neue grüne Visualisierung einfach zu schwach ist..
  Mit Zitat antworten Zitat
100nF
 
#20
  Alt 2. Apr 2006, 21:22
hallo omata,

ich habe da noch 2 kleine sachen:

also bei doFadingOut würde ich das mit dem FadeTime*1.5 weglassen, das kann man ja auch selber einstellen über Channel.FadeTime.
gleichzeitig würde ich beim doFadingIn die Volume nicht auf 25, sondern auf 0 stellen. wenn channel.volume grösser als 25 ist, wird aus dem FadeIn ein FadeOut_To_25

oder hast du das aus einem bestimmten grund so gemacht?

Gruss
urbanbruhin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     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 21:46 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