Cómo: Utilizar la invocación de plataforma para reproducir un archivo de sonido (Guía de programación de C#)

En el siguiente ejemplo de código de C# se muestra cómo se utilizan los servicios de invocación de plataforma para reproducir un archivo de sonido en el sistema operativo Windows.

Ejemplo

En este código de ejemplo se utiliza DllImport para importar el punto de entrada del método PlaySound de winmm.dll como Form1 PlaySound().El ejemplo tiene un Windows Form simple con un botón.Al hacer clic en el botón, se abre un cuadro de diálogo OpenFileDialog estándar de Windows para que pueda abrir un archivo y reproducirlo.Cuando se selecciona un archivo de sonido, éste se reproduce mediante el método PlaySound() del ensamblado winmm.DLL.Para obtener más información sobre el método PlaySound de winmm.dll, vea Using the PlaySound function with Waveform-Audio Files.Busque y seleccione un archivo que tenga una extensión .wav y, a continuación, haga clic en Abrir para reproducirlo mediante la invocación de plataforma.Un cuadro de texto muestra la ruta de acceso completa del archivo seleccionado.

El cuadro de diálogo Abrir archivos se puede filtrar con los siguientes valores para que muestre sólo los archivos que tengan la extensión .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);
            } 
        }
    }
}

Compilar el código

Para compilar el código

  1. Cree un nuevo proyecto de aplicación para Windows C# en Visual Studio y asígnele el nombre WinSound.

  2. Copie el código anterior y péguelo sobre el contenido del archivo Form1.cs.

  3. Copie el código siguiente y péguelo en el archivo Form1.Designer.cs, en el método InitializeComponent(), después de cualquier código existente.

    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. Compile y ejecute el código.

Seguridad

Para obtener más información, vea Seguridad de .NET Framework.

Vea también

Referencia

Información general sobre interoperabilidad (Guía de programación de C#)

Información general sobre interoperabilidad (Guía de programación de C#)

Conceptos

Guía de programación de C#

Aproximación a la invocación de plataforma

Otros recursos

Calcular las referencias de datos con invocación de plataforma