Воспроизведение встроенных файлов WAV с помощью SoundPlayer
У меня есть приложение Compact Framework 3.5, которое отвечает за сканирование штрих-кодов. В зависимости от ситуации он должен воспроизводить 3 разных звука, поэтому я создал класс-оболочку вокруг объекта SoundPlayer и вызвал для этого метод Play.
public static class SoundEffectsPlayer
{
private static readonly SoundEffect _alert;
static SoundEffectsPlayer()
{
// This will cause the SoundEffect class to throw an error that the Uri
// Format is not supported, when new SoundPlayer(location) is called.
_alert = new SoundEffect("SoundEffects/alert.wav");
}
public static SoundEffect Alert
{
get { return _alert; }
}
}
public class SoundEffect
{
private readonly SoundPlayer _sound;
public SoundEffect(string location)
{
_sound = new SoundPlayer(location);
_sound.Load();
}
public bool IsLoaded
{
get { return _sound.IsLoadCompleted; }
}
public void Play()
{
_sound.Play();
}
}
Идея состояла в том, чтобы не создавать SoundPlayer каждый раз, когда нужно было сканировать штрих-код (что будет несколько сотен раз в час). Так что я могу просто позвонить в Play уже загруженного файла.
Файл alert.wav находится в папке SoundEffects, которая находится в корневом каталоге библиотечного проекта, на который ссылается приложение, и он настроен как встроенный ресурс. Что мне нужно передать в класс SoundEffects, чтобы загрузить файл WAV? Должен ли файл wav быть встроен в проект библиотеки?
Также кто-нибудь замечает что-то не так с тем, как я обрабатываю воспроизведение файлов WAV? Это моя первая попытка чего-то подобного, поэтому я открыт для предложений по улучшению.
1 ответ
Хммм. Я не использовал SoundPlayer прежде, я предполагаю, что это просто оболочка для функции ядра DLL PlaySound. Но в любом случае, я ожидаю, что в качестве аргумента требуется путь к файлу.
Поэтому, чтобы он работал со встроенным ресурсом, вам, вероятно, придется сохранить файл на диск и затем воспроизвести его. Вероятно, было бы проще отказаться от идеи встроенного ресурса и развернуть ее как отдельный элемент. Включите.wav в ваш основной проект, установите для него "Содержимое" и "Копировать, если новее", а затем укажите его как файл при вызове звукового проигрывателя.
Помните, что в WindowsCE вам всегда нужны также полные пути. Относительный путь от текущего запущенного.exe не будет работать в CE.
Если вам необходимо выяснить "где вы находитесь", чтобы создать путь к ресурсу, см. Ответ на этот вопрос.