AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trackbar/Zeit

Ein Thema von Nils_13 · begonnen am 10. Dez 2004 · letzter Beitrag vom 28. Dez 2004
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#41

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 19:48
Hi!

Zitat von Nils_13:
4. Falls es hier noch niemanden aufgefallen ist: die Umsetzung ist doch gerade das Problem
Nein, die Umsetzung ist m.E. nach nicht das Problem.
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#42

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 19:52
Zitat von Nils_13:
Hi,

1. Das Prinzip hab ich kapiert!
2. Das umstetzen ist eine andere Sache!
3. Max gibt es nicht!
4. Falls es hier noch niemanden aufgefallen ist: die Umsetzung ist doch gerade das Problem

1. Glaub ich nicht
2. Dann sag was du für ein PRoblem hast
3. Der Beweis.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#43

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 19:55
Der Beweis:
Miniaturansicht angehängter Grafiken
o.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#44

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 19:57
Hi Nils_13,

du hättest sagen sollen dass du eine TLMDTrackBar verwendest. Das ist nicht das selbe wie eine TTrackBar.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#45

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 20:03
Weiß .
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#46

Re: Trackbar/Zeit

  Alt 11. Dez 2004, 22:42
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:
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.
[edit=Admin]Code in den Anhang verschoben. Mfg, Daniel[/edit]
Angehängte Dateien
Dateityp: txt source_147.txt (32,8 KB, 57x aufgerufen)
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#47

Re: Trackbar/Zeit

  Alt 12. Dez 2004, 12:13
Hi Wishmaster!

Da hast du dir aber viel Arbeit gemacht (immerhin über 1000 Zeilen Code)

Danke für die TAudioEngine, damit mit kann ich jetzt etwas anfangen!
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#48

Re: Trackbar/Zeit

  Alt 15. Dez 2004, 03:45
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);
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#49

Re: Trackbar/Zeit

  Alt 27. Dez 2004, 20:02
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;
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#50

Re: Trackbar/Zeit

  Alt 28. Dez 2004, 00:04
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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:58 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