Entwickler-Ecke
Multimedia / Grafik - Positions wird nicht eingestellt!
Leuchtturm - So 12.11.06 12:50
Titel: Positions wird nicht eingestellt!
Hi,
warum funktioniert das nicht:
Delphi-Quelltext
1: 2: 3:
| PositionsTimer.Enabled := false; pos := TrackBar2.Position; BASS_ChannelSetPosition(Channel, pos); |
Ich will das die Position der TrackBar die Position des Liedes ändert.
Das funktioniert aber nicht ein bissll. Ich kann die TrackBar zwar verschieben aber da fängt das Lied immer wieder von vorne an.
Was müsste man anders machen :?:
Leuchtturm
Gausi - So 12.11.06 12:54
Wie sind denn die Werte in der Trackbar? Die Positionsangaben bei der Bass.dll sind in Bytes im umkomprimierten Audiostrom! Ein Lied hat also locker ne maximale Position von 50.000.000 (grobe Rechnung: 1 CDDA=700MB, 10Lieder/Cd => 70MB/Lied, und dann noch was abgezogen).
Wenn deine Trackbar von 0 bis 100 geht, ist Alles am Anfang des Liedes ;-)
Leuchtturm - So 12.11.06 12:57
Meine TrackBar geht von 0 bis 500.
wie könnte man das umwandeln
Gausi - So 12.11.06 13:03
Mit
Bass_ChannelGetLength bekommst du die Länge des Streams. Dann einfach die Position der Trackbar entsprechend umsetzen:
Delphi-Quelltext
1: 2:
| BASS_ChannelSetPosition(Channel, TrackbarPos * BassLänge / TrackbarMax); |
Leuchtturm - So 12.11.06 15:45
Jetzt spielts jede Sekunde zweimal und geht dan zur nächsten
Ich glaube es liegt hier dran liegt es:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| VisTimer.Enabled := false; PositionsTimer.Enabled := false; pos := TrackBar2.Position; TrackLength := Bass_ChannelGetLength(Channel); BASS_ChannelSetPosition(Channel, pos * TrackLength div TrackBar2.Max); VisTimer.Enabled := true; PositionsTimer.Enabled := true; |
Wenn ich
PositionsTimer.Enabled := true; auskommentiere geht es einwndfrei:
Code aus PositionsTimer
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.PositionsTimer(Sender: TObject); var a, b: DWord; x, ADS: Integer; begin try a := Bass_ChannelGetLength(Channel); b := BASS_ChannelGetPosition(Channel); x := a div 500; ADS := b div x; TrackBar2.Position := ADS; except end; end; |
Liegt das jetzt am Timer oder an der TrackBarprocedure :?: :nixweiss:
Leuchtturm
Leuchtturm - Fr 17.11.06 17:01
weiß denn da keiner eine lösung
Leuchtturm - Mo 20.11.06 19:23
*push*
Gausi - Mo 20.11.06 19:39
Ich würde jetzt spontan auf zwei Sachen tippen.
Erstens verändert der Timer Trackbar.Position, was möglicherweise das Onchange-Event der Trackbar auslöst, wodurch die Position im Lied neu gesetzt wird. D.h.: Im Timer vor dem Umsetzen diesem Ereignis Nil zuweisen und hinterher wieder auf die Change-Prozedur setzen.
Zum anderen ist deine Berechnung der Position unelegant, da du dort mehrfach rundest. Besser wäre, das direkt zu berechnen per
Delphi-Quelltext
1:
| TrackBar2.Position := Round(500 * BASS_ChannelGetPosition(Channel) / Bass_ChannelGetLength(Channel)); |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!