Вопрос

Я использую этот код для воспроизведения 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top