![]() |
Re: Trackbar/Zeit
Hi!
Zitat:
Du weißt nicht, was ein Stream ist, wo deine Musik herkommt, wie du sie lädst, welche Bedeutung die Parameter haben etc. Das sehe ich als ein Logik- und nicht als ein Programmierproblem an. Ciao Frederic |
Re: Trackbar/Zeit
Zitat:
2. Dann sag was du für ein PRoblem hast 3. ![]() |
Re: Trackbar/Zeit
Liste der Anhänge anzeigen (Anzahl: 1)
Der Beweis:
|
Re: Trackbar/Zeit
Hi Nils_13,
du hättest sagen sollen dass du eine TLMDTrackBar verwendest. Das ist nicht das selbe wie eine TTrackBar. Greetz alcaeus |
Re: Trackbar/Zeit
Weiß :oops: .
|
Re: Trackbar/Zeit
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
@Nils_13 Die TAudioEngine ist nur ne Unit die ich als (TAudioEngine) benannt habe! Wen es dir nicht Gefällt kannst du sie auch TOnkelBob nennen. Ich glaube es auch nicht das du es Verstanden has! Tip. In der BASS documentation findest du alles was du brauchst! Ich schreibe grade meinen Code(TAudioEngine) um für Bass V2.1! ich hoffe du kannst damit etwas anfangen. Ps. Es ist nur en test. * Langen Code bitte unbedingt als Anhang posten! * Die CommonTypes Unit!
Delphi-Quellcode:
[edit=Admin]Code in den Anhang verschoben. Mfg, Daniel[/edit]
unit CommonTypes;
interface uses Windows, Messages; // Striminfo type TStreamInfo = record StrFileName : string; // Filename StrFileSize : DWORD; // File size in byte StrSampleRate : LongInt; // Sampling rate in Hz StrBitRate : LongInt; // Bit Rate in KBPS StrBitsPerSample : Word; // Bits per sample StrDuration : DWORD; // playback duration in mili second StrChannels : Word; // 1- Mono, 2 - Stereo end; type TEqPreset = array [0..9] of Integer; TWaveData = array [0..2048] of DWORD; TFFTData = array [0..1024] of Single; TVolumeType = (glStream, GlMode, glSample); // cd const MAXDRIVES = 10; const ENGINE_CST_OFFSET = 1000; ENGINE_STOP = ENGINE_CST_OFFSET + 1; ENGINE_PLAY = ENGINE_CST_OFFSET + 2; ENGINE_PAUSE = ENGINE_CST_OFFSET + 3; ENGINE_SONG_END = ENGINE_CST_OFFSET + 4; // ENGINE_STALLED = ENGINE_CST_OFFSET + 5; const WM_GetToEnd = WM_USER + 107; // message to notify that BASS reaches the end of a stream WM_NewFFTData = WM_USER + 108; // message to notify that new FFT data are ready WM_GetMeta = WM_USER + 110; // message to notify that new Shoutcast Metadata are ready WM_DownLoaded = WM_USER + 111; implementation end. |
Re: Trackbar/Zeit
Hi Wishmaster!
Da hast du dir aber viel Arbeit gemacht (immerhin über 1000 Zeilen Code) :thumb: :thumb: Danke für die TAudioEngine, damit mit kann ich jetzt etwas anfangen! |
Re: Trackbar/Zeit
Hi
@Nils_13 wen du meinen Code(TAudioEngine) mit Bass v2.1 benutzt kann es sein das du ne Feiler Meldung bekommst mit ’’Floating Point overflow’’ dafür ist der EQ verantwortlich! 1. Sollte bei dir diese Feiler Meldung auftauchen. Bass v2.1(0.1) and Flac v2.1(0.1) sollte Abhilfe schaffen. 2. Endere das => BASS_ChannelSetSync(Channel, BASS_SYNC_ONETIME, BASS_SYNC_END, @PlayEndSync, AppHWND); zu BASS_ChannelSetSync(Channel, BASS_SYNC_END, 0, @PlayEndSync, AppHWND); |
Re: Trackbar/Zeit
Hi,
mit der JVCL-Trackbar möchte ichs jetzt machen! Es funktioniert nicht: wenn ich wieder die Mausloslasse geht der Slider zur ursprünglichen Position zurück und es ist nichts passiert!
Delphi-Quellcode:
procedure TFormPlayer.Timer1Timer(Sender: TObject);
var hFileStream, TrackPos: Integer; begin hFileStream := BASS_StreamCreateFile(FALSE, @FileName[1], 0, 0, BASS_MP3_SETPOS or BASS_STREAM_AUTOFREE); TrackPos := BASS_ChannelGetPosition(hFileStream); tb1.Position := TrackPos; end; procedure TFormPlayer.tb1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Timer1.Enabled := false; BASS_ChannelPause(channel); end; procedure TFormPlayer.tb1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var hFileStream,TrackPos: Integer; begin hFileStream := BASS_StreamCreateFile(FALSE, @FileName[1], 0, 0, BASS_MP3_SETPOS or BASS_STREAM_AUTOFREE); TrackPos := BASS_ChannelGetPosition(hFileStream); BASS_ChannelSetPosition(channel, tb1.Position); BASS_StreamPlay(channel, false, 0); tb1.position:=TrackPos; Timer1.Enabled := true; end; |
Re: Trackbar/Zeit
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! :wall: :gruebel: :?: 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:
danach rechne alles in MilliSekunden um! Anschließend berechne die Aktuelle PlayPosition! Wen du das geschafft hast dann kannst du auch die Position ändern!
Private
hFileStream : HSTREAM; // HSTREAM = DWORD; oder hFileStream : DWORD; oder Channel : DWORD 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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 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