SoundPlayer et ressources

Résolu
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015 - 12 févr. 2007 à 14:14
delphi2004 Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 29 décembre 2008 - 29 déc. 2008 à 19:36
Bonjour,
J'ai trouvé différentes pistes pour lire un fichier WAV intégré à un fichier ressource mais je n'arrive pas à les faire fonctionner (je suis sous VS2005):

1° : J'ai intégré une fichier "Sound_Erreur.wav" dans les ressources de mon projet.
            La ressource s'appelle donc "Sound_Erreur" et mon projet "sound".

2° Comment faire pour jouer le son "Sound_Erreur.wav" avec SoundPlayer :
SoundPlayer s =
new
SoundPlayer();
s.SoundLocation = ???????????????????,

s.Play();

Merci
DT

12 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 févr. 2007 à 14:40
Salut,
Jette un coup d'oeil sur cette source. J'utilise dans la classe Tools (si mes souvenirs sont bons) une méthode qui permet de récupérer un fichier son en tant que ressource et de le jouer.

<hr />
-Blog-
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2007 à 15:02
Si je comprends bien, ta source lit des fichiers situés dans un répertoires spécifiques. Pour ma part j'aimerai intégrer le fichier Wav à mon exe et donc lire la ressource "Properties.
Resources.Sound_Erreur"

DT
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 févr. 2007 à 15:07
Non, mes fichiers sons sont intégrés dans l'assembly MotusCtrl (embedded) et je les récupères de ma dll avec ce code (dans la class Tools):

public static SoundPlayer GetSoundFile(string dir, string fileName)
{
   Assembly a = Assembly.GetExecutingAssembly();
   SoundPlayer sp = new SoundPlayer(a.GetManifestResourceStream(string.Format("MotusCtrl.{0}.{1}", dir, fileName)));
   sp.Load();
    return sp;
}

le string (path) passé en argument est donc de la forme "NameSpace.Directory.FileName"

<hr />
-Blog-
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2007 à 15:28
Désolé mais je n'y arrive pas... J'ai une NullReferenceEx. sur sp.load.
Dans ma solution j'ai VS2005 m'a créé un répertoire "Resources" dans ma solution et dans lequel je retrouve "Sound_Erreur.wav"
 Voici le source (en fait j'ai simplement remplacé MotusCtrl parsound )

using

System;

using System.ComponentModel;

using System.Windows.Forms;

using System.Media;

using System.Reflection;

namespace sound
{

public
partial
class
Form1 :
Form
{

private
SoundPlayer _soundWrong = GetSoundFile(
"Resources",
"Sound_Erreur.wav");

public Form1()
{
InitializeComponent();
}

private
void button1_Click(
object sender,
EventArgs e)
{
_soundWrong.Play();
}

private
static
SoundPlayer GetSoundFile(
string dir,
string fileName)
{

   Assembly a =
Assembly.GetExecutingAssembly();

   SoundPlayer sp =
new
SoundPlayer(a.GetManifestResourceStream(
string.Format(
"sound.{0}.   {1}", dir, fileName)));
   sp.Load();

   return sp;
}
}
}

DT

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 févr. 2007 à 15:43
La méthode que je t'ai mise est a appelée comme ceci:
Tools.GetSoundFile("MonRepertoire", "MonFichierSon");

Le fichier son doit être intégré dans le projet en tant que ressouces embedded (regarde dans le source encore une fois!).
Si le fichier n'est pas dans un répertoire, alors il faut uniquement donner le nom...

<hr />
-Blog-
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
12 févr. 2007 à 16:49
J'avais tout bien suivi et compris tes explications mais ta dernière remarque ma mis sur la piste. En effet, j'ai utilisé VS2005 pour ajouter toutes mes ressources à mon projet. A noter que l'ajout de ressources par ce moyen entraîne automatiquement la création du fichier "resources.resx" dans "properties" et du répertoire "Resources" dans la solution concernée. Or les ressources de ce répertoire de sont pas embedded contrairement au fichier "resources.resx"... d'où mes soucis.

Question : Dois aussi rendre embedded les images de mon répertoire "Resources" ?

Merci pour ton aide (précieuse)

DT
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 févr. 2007 à 10:24
Euh, je ne comprends pas la question
Tu peux intégrer des ressources manuellement en les ajoutant dans l'explorateur, il ne faut pas oublier de les rendre "embedded" pour qu'elles soient inclues dans l'assembly lors de la compilation, c'est tout.

Le désavantage de ce système, c'est que les assemblies deviennent rapidement assez volumineuses...
L'avantage c'est que l'utilisateur n'a pas directement accès à la ressource...

<hr />
-Blog-
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
13 févr. 2007 à 11:13
Je n'ajoute pas manuellement mes fichiers dans mon répertoire "Resources" mais j'utilise l'onglet "Ressources" dans les "Properties" de ma solution. En faisant comme cela, je ne gère pas (physiquement) le fichier "Resources.resx" ni les fichiers que j'incorpore dans ma ressource (images, sons ...) : c'est VS qui créé lui même le répertoire "Resources" de ma solution, c'est lui qui insère les fichier dans ce répertoire et c'est aussi lui qui ne met pas embedded les fichiers  

Slts

DT
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 févr. 2007 à 11:48
Si, les ressources sont évidemment embedded, sinon tu n'y aurais pas accès. Mais Visual Studio le fait de manière transparente pour toi.
Pour t'en assurer, ajoute un fichier de 5Mo dans ton projet en tant que ressource (avec le designer), compile et va regarder la taille de l'exe qui est généré....

<hr />
-Blog-
gulfstreamg450 Messages postés 1 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 1 décembre 2008
1 déc. 2008 à 13:00
Bonjour,
Voici ta réponse. En fait le problème est que Microsoft dans ses MSDN induit les programmeurs en erreur en parlant d'un fichier Manifest qui ne sert en fait à rien et dont on se fiche.
Pour lire une resource son il te suffit d'utiliser l'exemple donné par les MSDN dont voici le code :

System.Reflection.Assembly a=System.Reflection.Assembly.GetExecutingAssembly();

System.IO.Stream sp=a.GetManifestResourceStream(".soundName.wav");

SoundPlayer sndPlay=new SoundPlayer(sp);

sndPlay.Play();

Ex. : ton projet s'appelle SoundRes, tu y as créé un dossier nommé "Resources son" qui contient un fichier nommé "monSon.wav".
Il te suffit donc d'écrire :

System.IO.Stream sp=a.GetManifestResourceStream("SoundRes.Resources_son.monSon.wav");

Tu as remarqué que l'espace entre Resources et son, du dossier Resources son doit impérativement être remplacé par un "_" pour que ça fonctionne.

Chez moi ça marche à 100%.

Voilà, en espérant que ça t'aidera, et aussi comblera l'une des nombreuses erreurs et lacunes de Microsoft dans ses MSDN très mal documentées.
delphi2004 Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 29 décembre 2008
29 déc. 2008 à 19:36
Using  System.Media;
SoundPlayer



sound =

new



SoundPlayer
(

"C:\\chimes.wav"
);sound.Play();





krimou
delphi2004 Messages postés 6 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 29 décembre 2008
29 déc. 2008 à 19:36
Using  System.Media;
SoundPlayer



sound =

new



SoundPlayer
(

"C:\\chimes.wav"
);sound.Play();





krimou
Rejoignez-nous