Partager via


Comment : utiliser l'appel de code non managé pour lire un fichier audio (Guide de programmation C#)

L'exemple de code C# suivant illustre comment utiliser les services d'appel de code managé pour lire un fichier son .wav sur le système d'exploitation Windows.

Exemple

Cet exemple de code utilise DllImport pour importer le point d'entrée de la méthode PlaySound de winmm.dll comme Form1 PlaySound(). L'exemple a un simple Windows Form doté d'un bouton. Cliquez sur le bouton pour ouvrir une boîte de dialogue OpenFileDialog Windows standard et ouvrir le fichier que vous souhaitez lire. Lorsqu'un fichier .wav est sélectionné, il est lu à l'aide de la méthode PlaySound() de la méthode d'assembly winmm.DLL. Pour plus d'informations sur la méthode PlaySound de winmm.dll, consultez Utilisation de la fonction PlaySound avec les fichiers audio Waveform (page éventuellement en anglais) Parcourez et sélectionnez un fichier doté d'une extension .wav, puis cliquez sur Ouvrir pour lire le fichier .wav à l'aide de l'appel de code non managé. Une zone de texte affiche le chemin d'accès complet du fichier sélectionné.

La boîte de dialogue Fichiers ouverts utilise les paramètres de filtre suivants pour afficher uniquement les fichiers dotés d'une extension .wav :

dialog1.Filter = "Wav Files (*.wav)|*.wav";
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WinSound
{
    public partial class Form1 : Form
    {
        private TextBox textBox1;
        private Button button1;

        public Form1()  //constructor
        {
            InitializeComponent();
        }

        [System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
        private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);

        [System.Flags] 
        public enum PlaySoundFlags : int
        {
            SND_SYNC = 0x0000,
            SND_ASYNC = 0x0001, 
            SND_NODEFAULT = 0x0002, 
            SND_LOOP = 0x0008, 
            SND_NOSTOP = 0x0010,
            SND_NOWAIT = 0x00002000, 
            SND_FILENAME = 0x00020000, 
            SND_RESOURCE = 0x00040004 
        }

        private void button1_Click (object sender, System.EventArgs e)
        {
            OpenFileDialog dialog1 = new OpenFileDialog(); 

            dialog1.Title = "Browse to find sound file to play";
            dialog1.InitialDirectory = @"c:\";
            dialog1.Filter = "Wav Files (*.wav)|*.wav";
            dialog1.FilterIndex = 2;
            dialog1.RestoreDirectory = true;

            if(dialog1.ShowDialog() == DialogResult.OK) 
            { 
                textBox1.Text = dialog1.FileName;
                PlaySound (dialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_SYNC);
            } 
        }
    }
}

Compilation du code

Pour compiler le code

  1. Créez un nouveau projet d'application Windows C# dans Visual Studio et nommez-le WinSound.

  2. Copiez le code précité et collez-le sur le contenu du fichier Form1.cs.

  3. Copiez le code suivant et collez-le dans le fichier Form1.Designer.cs, dans la méthode InitializeComponent(), après tout code existant.

    this.button1 = new System.Windows.Forms.Button();
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.SuspendLayout();
    //  
    // button1 
    //  
    this.button1.Location = new System.Drawing.Point(192, 40);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(88, 24);
    this.button1.TabIndex = 0;
    this.button1.Text = "Browse";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //  
    // textBox1 
    //  
    this.textBox1.Location = new System.Drawing.Point(8, 40);
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(168, 20);
    this.textBox1.TabIndex = 1;
    this.textBox1.Text = "FIle path";
    //  
    // Form1 
    //  
    this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Controls.Add(this.textBox1);
    this.Controls.Add(this.button1);
    this.Name = "Form1";
    this.Text = "Platform Invoke WinSound C#";
    this.ResumeLayout(false);
    this.PerformLayout();
    
  4. Compilez et exécutez le code.

Sécurité

Pour plus d'informations, consultez .NET Framework Security.

Voir aussi

Référence

Vue d'ensemble de l'interopérabilité (Guide de programmation C#)

Vue d'ensemble de l'interopérabilité (Guide de programmation C#)

Concepts

Guide de programmation C#

Présentation détaillée de l'appel de code non managé

Autres ressources

Marshaling de données à l'aide de l'appel de code managé