Einzelnen Beitrag anzeigen

100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#12

Re: BassPlayerEx mit erweiterten Soundeffekten (eine Soundka

  Alt 24. Mär 2006, 21: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