Чистое предположение здесь, но проблема может быть в использовании оператора. Ваш код такой (я думаю):
using (SoundPlayer myPlayer = new SoundPlayer(BEEPPURE))
{
myPlayer.Play();
}
Блок using вызовет Dispose () на myPlayer, иногда до того, как он завершит воспроизведение звука (но редко, потому что звук такой короткий - с более длинным звуком, держу пари, вы можете воспроизводить ошибку каждый раз) , Ошибка может быть результатом того, что Windows API (который упаковывает SoundPlayer) пытается воспроизвести буфер, который уже был удален .NET.
Я думаю, что если вы сделаете это:
SoundPlayer myPlayer = new SoundPlayer(BEEPPURE);
myPlayer.Play();
или даже
(new SoundPlayer(BEEPPURE)).Play();
вы больше не увидите ошибку.