2016-04-28 19 views
2

Ich arbeite in einem kleinen Audio-Player. Sie wissen, mit den einfachsten Sachen und Funktionen.Kann nicht Audio-Position mit Trackbar in C#

Ich habe ein Problem beim Ändern des Trackbar-Wertes (Scrollen), diese Trackbar zeigt die aktuelle Audio-Position an.

Wenn ich den Schieberegler der Trackbar ziehe, sollte sich die Audio-Position ändern. Ich verwende die CSCore Audio Library. Dies ist der Code, den ich verwende, um die aktuelle Position der Audio-Wiedergabe zu aktualisieren:

private void ProgressTimerTick(object sender, EventArgs e) 
{ 
SongProgressTrackbar.MaxValue = (int)audioPlayer.Length.TotalMilliseconds; 
SongProgress.Value = (int)audioPlayer.Position.TotalMilliseconds; 
} 

Das funktioniert perfekt ohne Probleme.

Aber ...

private void SongProgressTrackbar_Scroll(object sender, ScrollEventArgs e) 
{ 
Timespan newPos = new Timespan(SongProgressTrackbar.Value); 
audioPlayer.Position = newPos; 
} 

Was hier passiert, ist, dass die Audiosignale an den Start gehen wieder, wenn das Ereignis ausgelöst wird, insteqd die Position zu ändern, wo ich in der trackbar klicken, es beginnt nochmal.

Also, was habe ich falsch geschrieben? Ich habe versucht, das ValueChanged Event zu verwenden, aber das bringt nur das Audio in Position 0:00. Wie gesagt, der TimerTick funktioniert. Aber immer, wenn ich die Trackleiste scrolle, beginnt das Audio wieder von vorne.

Hoffe jemand kann mir helfen, dieses Problem zu lösen. Vielen Dank im Voraus - CCB

+0

Sie haben ein offensichtliches Problem mit der Einheitenumwandlung, jetzt stellen Sie die Zeit in Einheiten von 100 Nanosekunden ein. Schließen Sie genug bis 0. Verwenden Sie stattdessen TimeSpan.FromMilliseconds(). –

+0

Danke Hans! TimeSpan.FromMilliseconds hat funktioniert! Bitte poste deinen Kommentar als Lösung, um ihn zu markieren. – ChrisCreateBoss

Antwort

1

Es gibt ein Problem in Ihrem Konvertierungs Trackbar Wert auf Zeit. Code Rückkehr Mikrosekunden: (diese Rückkehr Sekunden)

Timespan newPos = new Timespan(0,0,SongProgressTrackbar.Value); 

dieser Code umwandeln trackbar auf Sekunden:

Timespan newPos = new Timespan(SongProgressTrackbar.Value); 

sollten Sie nutzen so sein. danke.

+0

Mein Timer hat ein Intervall von 100 Millisekunden. Deshalb verwende ich TotalMilliseconds. Diese Lösung kann meine Zeitspanne in Sekunden umwandeln, aber das ist nicht das, wonach ich suche. Aber trotzdem danke. – ChrisCreateBoss

1

sollten Sie Ihre Millisekunde in Tick konvertieren. Ein einzelner Tick steht für einhundert Nanosekunden oder ein Zehnmillionstel einer Sekunde. Es gibt 10.000 Ticks in einer Millisekunde oder 10 Millionen Ticks in einer Sekunde. Single Argumant Verwendung von TimeSpan erhalten Werte als Tick.

Timespan newPos = new Timespan(SongProgressTrackbar.Value * 10000); 

danke.