2009-11-30 17 views
1

J'ai une application Compact Framework 3.5 qui est responsable de l'analyse des codes à barres. Il y a 3 sons différents qu'il devrait jouer selon la situation, donc j'ai créé une classe wrapper autour de l'objet SoundPlayer et j'appelle la méthode Play sur ça.Lecture de fichiers wav intégrés avec 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(); 
    } 
} 

L'idée était de ne pas créer SoundPlayer chaque fois qu'un code-barres nécessaire à numériser (ce qui serait quelques centaines de fois par heure). Je peux donc appeler Play sur le fichier déjà chargé.

Le fichier alert.wav se trouve dans un dossier SoundEffects situé à la racine du projet de bibliothèque référencé par l'application et défini comme ressource intégrée. De quoi aurais-je besoin pour passer dans la classe SoundEffects pour charger le fichier wav? Le fichier wav devrait-il être intégré dans le projet de bibliothèque?

Est-ce que quelqu'un remarque quelque chose de mal dans la façon dont je gère la lecture des fichiers wav? C'est ma première tentative pour quelque chose comme ça, donc je suis ouvert à des suggestions d'amélioration.

Répondre

3

Hmmm. Je n'ai pas encore utilisé SoundPlayer, je suppose que c'est juste un emballage autour de la fonction Coredll PlaySound. Mais de toute façon, je m'attendrais à ce qu'il exige un chemin de fichier comme argument. Par conséquent, pour le faire fonctionner avec une ressource incorporée, vous devrez probablement enregistrer le fichier sur le disque, puis le lire. Il serait probablement plus simple d'abandonner l'idée de ressource intégrée et de la déployer en tant qu'élément distinct. Incluez le fichier .wav dans votre projet principal et définissez-le sur "Contenu" et "Copier si plus récent", puis reportez-le comme fichier dans l'appel du lecteur audio. Rappelez-vous que dans Windows CE vous avez toujours besoin de chemins FULL aussi. Un chemin relatif du fichier .exe en cours d'exécution ne fonctionnera pas dans CE.

Si vous avez besoin de savoir "où vous êtes" pour créer le chemin d'accès à la ressource, voir la réponse à this question.

+0

Merci, cela fonctionne très bien maintenant. – Brandon