web-dev-qa-db-fra.com

Comment lire un fichier audio WAV depuis Ressources?

Comment puis-je lire un fichier audio WAV à partir des ressources de mon projet? Mon projet est une application Windows Forms en C #.

34
Genius
  Stream str = Properties.Resources.mySoundFile;
  RecordPlayer rp = new RecordPlayer();
  rp.Open(new WaveReader(str));
  rp.Play();

De Comment lire un fichier audio WAV à partir de ressources en C #.

6
Aleks

Puisque mySoundFile est une Stream, vous pouvez tirer parti du constructeur surchargé de SoundPlayer, qui accepte un objet Stream:

System.IO.Stream str = Properties.Resources.mySoundFile;
System.Media.SoundPlayer snd = new System.Media.SoundPlayer(str);
snd.Play();

Documentation de classe SoundPlayer (MSDN)

43
Evan Mulawski

a) OK, commencez par ajouter un fichier audio (.wav) à la ressource du projet.

  1. Ouvrez "Explorateur de solutions" à partir de la barre d’outils du menu ("VIEW") ou appuyez simplement sur Ctrl + Alt + L. 
  2. Cliquez sur la liste déroulante "Propriétés". 
  3. Ensuite, sélectionnez "Resource.resx" et appuyez sur Entrée. 

open project resource

  1. Maintenant, sélectionnez "Audio" dans la liste déroulante. 

add audio files to resource

  1. Cliquez ensuite sur "Ajouter une ressource", choisissez des fichiers audio (.wav) et cliquez sur "Ouvrir".

browsing for audio files

  1. Sélectionnez le (s) fichier (s) audio et changez les propriétés "Persistance" en "Intégré au format .resx".

embedding audio files to resource

b) Maintenant, écrivez simplement ce code pour lire l'audio.  

Dans ce code, je suis en train de jouer de l'audio lors d'un événement de chargement de formulaire. 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Media; // at first you've to import this package to access SoundPlayer

namespace WindowsFormsApplication1
{
    public partial class login : Form
    {
        public login()
        {
            InitializeComponent();
        }

        private void login_Load(object sender, EventArgs e)
        {
            playaudio(); // calling the function
        }

        private void playaudio() // defining the function
        {
            SoundPlayer audio = new SoundPlayer(WindowsFormsApplication1.Properties.Resources.Connect); // here WindowsFormsApplication1 is the namespace and Connect is the audio file name
            audio.Play();
        }
    }
}

C'est tout.
Tout est terminé, lancez maintenant le projet (appuyez sur f5) et profitez de votre son.
Bonne chance. :)

38
Pran

Vous devez faire attention à ce que le ramasse-miettes libère la mémoire utilisée par votre son alors que le son est toujours en cours de lecture. Bien que cela arrive rarement, quand cela se produit, vous ne jouerez que de la mémoire aléatoire. Il existe une solution à cela, avec le code source pour réaliser ce que vous voulez ici: http://msdn.Microsoft.com/en-us/library/dd743680(VS.85).aspx

Faites défiler l'écran jusqu'en bas, dans la section "Contenu de la communauté".

2
Brad

Autant que je sache, il existe deux façons de le faire, liste ci-dessous:

  1. Utiliser le chemin du fichier

Commencez par placer le fichier dans le dossier racine du projet, puis si vous exécutez le programme en mode Debug ou Release, vous pourrez accéder au fichier à la fois. Ensuite, utilisez la classe SoundPlayer pour le comparer.
Mais de cette manière, si vous souhaitez diffuser le projet aux utilisateurs, vous devez copier les fichiers audio avec leurs hiérarchies de dossiers, à l’exception des hiérarchies, dans le dossier "Release" du répertoire "bin".

        var basePath = System.AppDomain.CurrentDomain.BaseDirectory;
        SoundPlayer player = new SoundPlayer();
        player.SoundLocation = Path.Combine(basePath, @"./../../Reminder.wav");
        player.Load();
        player.Play();
  1. Utiliser une ressource

Suivez ci-dessous animer, ajoutez "Fichier existant" au projet.

 enter image description here

        SoundPlayer player = new SoundPlayer(Properties.Resources.Reminder);
        player.Play();

La force de cette voie est:
Seul le dossier "Release" sous le répertoire "bin" doit être copié lors de l'exécution du programme.

0
Bravo Yeung

Lorsque vous devez ajouter des sons dans votre projet, vous le ferez en lisant le ou les fichiers .wav. Ensuite, vous devez ajouter le (s) fichier (s) .wav comme ceci.

   using System.Media; //write this at the top of the code

   SoundPlayer my_wave_file = new SoundPlayer("F:/SOund wave file/airplanefly.wav");
   my_wave_file.PlaySync(); // PlaySync means that once sound start then no other activity if form will occur untill sound goes to finish

N'oubliez pas que vous devez écrire le chemin du fichier avec le format barres obliques (/), n'utilisez pas barres obliques inverses (\) lorsque vous indiquez un chemin d'accès au fichier, sinon vous obtiendrez une erreur .

Notez également que si vous souhaitez que d’autres événements se produisent pendant la lecture du son, vous pouvez modifier my_wave_file.PlaySync(); avec my_wave_file.PlayAsync();.

0
Pir Fahim Shah

Ces deux lignes peuvent le faire:

SoundPlayer sound = new SoundPlayer(Properties.Resources.solo);     
                sound.Play(); 
0
franklin karambiri