2009-11-30 4 views
1

У меня есть приложение Compact Framework 3.5, которое отвечает за сканирование штрих-кодов. Есть три разных звука, которые он должен играть в зависимости от ситуации, поэтому я создал класс оболочки вокруг объекта SoundPlayer и вызвал метод Play.Воспроизведение встроенных wav-файлов с использованием SoundPlayer

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-файлах? Это моя первая попытка в чем-то подобном, поэтому я открыт для предложений по улучшению.

ответ

3

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

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

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

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

+0

Спасибо, теперь он отлично работает. – Brandon

Смежные вопросы