Hi Nils_13
Erstmal was stimmt mit meinem Code nicht?
2. warum Kreierst du den hFileStream 2 mall 1.mit dem Timer dann mit tblMousUp? sobald du tblMousUp betätigst setzt du Automatisch alle auf 0!
Und warum benutzt du einmall
Channel und einmall
hFileStream? Woher kommt
Channel?
Delphi-Quellcode:
hFileStream := BASS_StreamCreateFile(...........)
TrackPos := BASS_ChannelGetPosition(hFileStream);
BASS_ChannelSetPosition(channel, tb1.Position); <= // Woher kommt Channel?
BASS_StreamPlay(channel, false, 0); <= // Woher kommt Channel?
Versuche es mall mit
Delphi-Quellcode:
Private
hFileStream : HSTREAM; // HSTREAM = DWORD;
oder
hFileStream : DWORD;
oder
Channel : DWORD
danach rechne alles in
MilliSekunden um! Anschließend berechne die Aktuelle PlayPosition! Wen du das geschafft hast dann kannst du auch die Position ändern!
Feileicht bin ich blind oder total verblödet aber wo steht bei deinem Code das
Min und
Max deiner Trackbar?
Siehe Code unten!
// BASS_ChannelGetPosition = Position in bytes!
// BASS_ChannelBytes2Seconds = MilliSekunden!
Dein hFileStream heißt bei mir Channel!
Delphi-Quellcode:
{--------------------------------- SongPos ----------------------------------}
procedure TAudioEngine.Set_SongPos(SongPos : Integer); // SongPos = MilliSekunden
begin
SongPos := BASS_ChannelSeconds2Bytes(Channel, SongPos / 1000);
BASS_ChannelSetPosition(Channel, trunc(SongPos));
end;
function TAudioEngine.Get_SongPos: Integer; // = MilliSekunden
var SongPos : QWORD;
MilliSec : Integer;
FloatPos : FLOAT;
begin
SongPos := BASS_ChannelGetPosition(Channel);
FloatPos:= BASS_ChannelBytes2Seconds(Channel, SongPos);
MilliSec:= Trunc(1000 * FloatPos);
if MilliSec < 0 then
MilliSec:= 0;
if (PlayerState = ENGINE_STOP) or (PlayerState = ENGINE_SONG_END) then
Result := 0
else
Result := MilliSec;
end;
{-------------------------------- Song Length ---------------------------------}
function TAudioEngine.Get_SongLen : Integer ; // = MilliSekunden
var MilliSec : Integer;
FloatPos : FLOAT;
begin
FloatPos := BASS_ChannelBytes2Seconds(Channel, SongLength);
MilliSec := Trunc(1000 * FloatPos);
if (MilliSec <= 0) then
MilliSec := 0;
result := MilliSec;
end;
Delphi-Quellcode:
private
Scroling : boolean;
AudioPlayer : TAudioEngine;
procedure TMain_Form.FormCreate(Sender: TObject);
begin
AudioPlayer:= TAudioEngine.Create(Application.Handle);
end;
// Zeigt die aktuelle PlayPosition an!
procedure TMain_Form.Slider_TimerTimer(Sender: TObject);
var len : integer;
begin
with AudioPlayer do
begin
label1.Caption:= AudioPlayer.Get_CPU;
Len:= Get_SongLen;
if Len <= 0 then
begin
Slider.Position:= 0;
exit;
end;
if Scroling = false then // Slider
Slider.Position:= trunc((Slider.MaxValue / Len) * Get_SongPos + 0.1);
end;
end;
procedure TMain_Form.SliderMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Scroling:= true;
end;
procedure TMain_Form.SliderMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with AudioPlayer do
begin
Set_SongPos(Trunc(Get_SongLen * slider.Position / Slider.MaxValue + 0.1));
Scroling:= false;
end
end;