C# SoundPlayer статичен после воспроизведения WAV
-
12-12-2019 - |
Вопрос
Я использую этот код для воспроизведения WAV-файла с ресурса, и звук воспроизводится правильно, но затем я получаю короткий всплеск статики после его воспроизведения (около 1/2 секунды):
//System.Media.SystemSounds.Beep.Play();
SoundPlayer sndPlayer = new SoundPlayer();
sndPlayer.Stream = Resources.Notify;
sndPlayer.Play();
Если я раскомментирую System.Media.SystemSounds.Beep.Play()
строкой выше, затем звуковой сигнал и звук уведомления с моих ресурсов воспроизводятся корректно, без помех.Я перепробовал несколько различных вариантов приведенного выше кода и всегда получал статический результат.Я попытался сделать все переменные статичными, на случай, если было что-то связанное с ранней сборкой мусора, но это не помогло.
WAV-файл - это всего лишь тот, который я скопировал с c:\WINDOWS\Media\ding.wav
(в Windows XP), и он отлично воспроизводится в проигрывателе Windows Media.Кроме того, если я использую новый SoundPlayer("c:\WINDOWS\Media\ding.wav")
, он корректно воспроизводится из файла.
Я полагаю, это как-то связано с UnmanagedMemoryStream
тот Resources.Notify
есть, и, может быть, мне сначала нужно загрузить его в управляемый поток?Я знаю, что у меня были проблемы с файлами PNG, если я не использую new Bitmap(Resource.MyPNG)
и попробуйте использовать Resource.MyPNG
непосредственно вместо этого, так что, может быть, что-то подобное с ресурсами WAV?
Обновление : Изначально я думал, что это происходит при каждом воспроизведении звука, но теперь оказывается, что это происходит только при самом первом воспроизведении звука в моем приложении.Так, может быть, необходимо выполнить некоторую инициализацию?
Я также пробовал это, та же проблема:
SoundPlayer sndPlayer = new SoundPlayer(Resources.Notify);
sndPlayer.Play();
Решение 2
Была просто проблема на одном компьютере.Никогда не разбирался в этом, и в других приложениях, похоже, нет этой проблемы, но пока что это не стоит моего времени, если только на 1 ПК (из, возможно, 15 протестированных).Сообщу о лучшем ответе, если я когда-нибудь его получу.
Другие советы
Это внутренняя реализация, которую использует MS My.Audio.Воспроизвести(), посмотрите, как они создают экземпляр класса SoundPlayer, они используют преимущества перегруженного конструктора, который принимает путь к файлу как показано ниже или ручей:
http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx
public void Play(string location, AudioPlayMode playMode)
{
this.ValidateAudioPlayModeEnum(playMode, "playMode");
SoundPlayer sound = new SoundPlayer(this.ValidateFilename(location));
this.Play(sound, playMode);
}
Можете ли вы попробовать передать поток при создании экземпляра SoundPlayer?