Я создаю простой музыкальный (mp3) плеер в WinForm на С#. Чего я хочу добиться, так это:
1) Воспроизвести выбранный музыкальный файл
2) Автоматически перемещать трекбар во время воспроизведения музыки
3) Разрешить пользователю перемещать трекбар вперед и назад, чтобы они могли играть музыку из любой точки трека. (При этом играет музыка)
У меня №1 и №2 работают без проблем. Однако у меня возникли трудности с реализацией № 3. Музыка играет очень прерывисто, так как я перезаписываю значение. Вот мой код.
private AxWMPLib.AxWindowsMediaPlayer player;
/*Play the music file selected (#1) */
private void BtnPlay_Click(object sender, EventArgs e)
{
player = new AxWMPLib.AxWindowsMediaPlayer();
player.CreateControl();
player.URL = filePath; //Initialized somewhere in the code
player.PlayStateChange += player_PlayStateChange;
player.Ctlcontrols.play();
}
private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (player.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
MyTrackBar.Maximum = (int)player.Ctlcontrols.currentItem.duration;
TmrPlay.Start();
}
else if(player.playState == WMPLib.WMPPlayState.wmppsStopped)
{
TmrPlay.Stop();
MyTrackBar.Value = 0;
}
}
/*Move the TrackBar automatically with Timer. (#2) Runs every 100 ms */
private void TmrPlay_Tick(object sender, EventArgs e)
{
if (player.playState == WMPLib.WMPPlayState.wmppsPlaying)
MyTrackBar.Value = (int)player.Ctlcontrols.currentPosition;
}
/* Trying to play music from anywhere when the TrackBar is manually moved.
For example, they can move the TrackBar and move it towards the end of the
music, WHILE THE MUSIC IS PLAYING. */
/* With this below event code, I can move the TrackBar freely, but the music
plays very choppy because it keeps changing the currentPosition. */
private void MyTrackBar_ValueChanged(object sender, EventArgs e)
{
player.Ctlcontrols.currentPosition = MyTrackBar.Value;
}
Может ли кто-нибудь дать мне совет о том, как воспроизводить музыку без рывков при перемещении трекбара?
.Value
меняет и настраивает игрока. - person Daniel A. White   schedule 01.11.2018