QuantumNova Ответов: 1

файл .wav перестает воспроизводиться без предупреждения


Привет всем, я пытаюсь воспроизвести простой файл .wav для фоновой музыки, но по какой - то причине примерно через 10-30 секунд воспроизведения он всегда останавливается без каких-либо ошибок. Я использую visual studio 2017 для его запуска, поэтому, когда он останавливается, я обнаружил, что маркер помещается в то время, когда он останавливается, и он указывает на начало управляемой сборки мусора кучи (GC), но я понятия не имею, как это исправить, поэтому, если кто-то может сказать мне, как исправить эту проблему или предложить другой способ воспроизведения аудио без этой проблемы, пожалуйста, поделитесь, это было бы очень полезно.

Что я уже пробовал:

private void PlaySound()
        {
            Uri uri = new Uri(@"C:\User Program Files\ConsoleApp1\visual studio\Mini test game 1\Mini test game 1\resources\Sad Background Music 1.wav");
            var player = new MediaPlayer();
            player.Open(uri);
            player.Play();
        }

1 Ответов

Рейтинг:
1

OriginalGriff

Цитата:
я обнаружил, что маркер помещается в момент его остановки и указывает на начало управляемой сборки мусора кучи (GC)
Это как бы точно говорит о том, в чем проблема!
Ваш плеер выходит из области действия в конце метода teh, поэтому в вашем приложении больше нет ссылок на него:
private void PlaySound()
{
    Uri uri = new Uri(@"C:\User Program Files\ConsoleApp1\visual studio\Mini test game 1\Mini test game 1\resources\Sad Background Music 1.wav");
    var player = new MediaPlayer();
    player.Open(uri);
    player.Play();
}
В результате, когда GC запускает его, он находит несвязанный объект и удаляет его. Это останавливает игрока играть!

Переместите свой плеер за пределы метода, и он сохранит ссылку и предотвратит ее удаление teh GC:
private MediaPlayer player = new MediaPlayer();
private void PlaySound()
{
    Uri uri = new Uri(@"C:\User Program Files\ConsoleApp1\visual studio\Mini test game 1\Mini test game 1\resources\Sad Background Music 1.wav");
    player.Open(uri);
    player.Play();
}

Но сделайте себе одолжение: не жестко кодируйте свой URL-адрес: вместо этого используйте файл настроек или относительную к исполняемому приложению папку. Таким образом, ваше приложение не будет подниматься вверх, когда вы даете копию своему партнеру.