Воспроизведение встроенных файлов WAV с помощью SoundPlayer - PullRequest
1 голос
/ 30 ноября 2009

У меня есть приложение 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 Ответ

3 голосов
/ 30 ноября 2009

Хммм. Я не использовал SoundPlayer прежде, я предполагаю, что это просто оболочка для функции ядра DLL PlaySound. Но, во всяком случае, я ожидаю, что в качестве аргумента требуется путь к файлу.

Поэтому, чтобы он работал со встроенным ресурсом, вам, вероятно, придется сохранить файл на диск и затем воспроизвести его. Вероятно, было бы проще отказаться от идеи встроенного ресурса и развернуть ее как отдельный элемент. Включите .wav в ваш основной проект, установите для него значение «Содержимое» и «Копировать, если новее», а затем укажите его как файл в вызове звукового проигрывателя.

Помните, что в WindowsCE вам всегда нужны также полные пути. Относительный путь из текущего запущенного .exe не будет работать в CE.

Если вам нужно выяснить «где вы находитесь», чтобы создать путь к ресурсу, см. Ответ на этот вопрос .

...