Я использую Shuffle Fisher-Yates для моего c -проигрывателя, однако при воспроизведении предыдущей песни это также случайная песня из списка. Итак, я добавил список, который сохраняет проигрываемые песни PlayedSongs
. Он помнит все песни, которые были сыграны. Как мне играть эти песни вперед и назад? Если бы я go вернул 3 песни, а затем go снова перешел бы, это все равно была бы песня, которая находилась на втором месте. Но мысль об этом алгоритме вызывает у меня головную боль, и я не могу понять ее правильно. Вот что у меня есть.
Опять же, чтобы быть ясным: я хочу, чтобы шаффл мог играть вперед и назад. При воспроизведении назад все песни должны были быть воспроизведены в последнее время по порядку. (Это временно, поэтому этот список очищается при выходе).
Это if-выражение взято из другого метода, который обычно воспроизводит песни и проверяет, включен ли Shuffle:
//after song was played
if (ShuffleIsOn)
{
ShuffledSongIndexes.Remove(ShuffledSongIndexes.FirstOrDefault());
PlayedSongs.Add(song);
}
Затем:
public List<Song> PlayedSongs = new List<Song>();
public int CurrentShuffleIndex = 0;
public void PlayPreviousSongs()
{
PlayedSongs.Reverse();
CurrentShuffleIndex++;
try
{
MediaElement.Source = new Uri(PlayedSongs[CurrentShuffleIndex].FullFileName);
}
catch (ArgumentOutOfRangeException)
{
MediaElement.Source = new Uri(PlayedSongs[CurrentShuffleIndex - 1].FullFileName);
}
MediaElement.Play();
PlayedSongs.Reverse();
}
public void PlayNextSongs()
{
CurrentShuffleIndex++;
MediaElement.Source = new Uri(PlayedSongs[CurrentShuffleIndex].FullFileName);
MediaElement.Play();
}
Я ничего не нашел в inte rnet по этому поводу, кто-нибудь знает, как это сделать? Спасибо