SoundPlayer et ressources [Résolu]

babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2007 à 14:14 - Dernière réponse : delphi2004 6 Messages postés jeudi 26 février 2004Date d'inscription 29 décembre 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

12 réponses

cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 12 févr. 2007 à 14:40
-1
Merci
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-
Commenter la réponse de cs_Bidou
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2007 à 15:02
-1
Merci
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
Commenter la réponse de babe59
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 12 févr. 2007 à 15:07
-1
Merci
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-
Commenter la réponse de cs_Bidou
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2007 à 15:28
-1
Merci
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
Commenter la réponse de babe59
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 12 févr. 2007 à 15:43
-1
Merci
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-
Commenter la réponse de cs_Bidou
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 12 févr. 2007 à 16:49
-1
Merci
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
Commenter la réponse de babe59
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 13 févr. 2007 à 10:24
-1
Merci
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-
Commenter la réponse de cs_Bidou
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 13 févr. 2007 à 11:13
-1
Merci
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
Commenter la réponse de babe59
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 13 févr. 2007 à 11:48
-1
Merci
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-
Commenter la réponse de cs_Bidou
gulfstreamg450 1 Messages postés vendredi 8 juin 2007Date d'inscription 1 décembre 2008 Dernière intervention - 1 déc. 2008 à 13:00
-1
Merci
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.
Commenter la réponse de gulfstreamg450
delphi2004 6 Messages postés jeudi 26 février 2004Date d'inscription 29 décembre 2008 Dernière intervention - 29 déc. 2008 à 19:36
-1
Merci
Using  System.Media;
SoundPlayer



sound =

new



SoundPlayer
(

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





krimou
Commenter la réponse de delphi2004
delphi2004 6 Messages postés jeudi 26 février 2004Date d'inscription 29 décembre 2008 Dernière intervention - 29 déc. 2008 à 19:36
-1
Merci
Using  System.Media;
SoundPlayer



sound =

new



SoundPlayer
(

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





krimou
Commenter la réponse de delphi2004

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.