Cómo: Repetir la reproducción de un sonido en un formulario Windows Forms
Actualización: noviembre 2007
En el ejemplo de código siguiente se reproduce repetidamente un sonido. Cuando se ejecuta el código en el controlador de eventos stopPlayingButton_Click, se detiene cualquier sonido que se está reproduciendo. Si ningún sonido se está reproduciendo, no ocurre nada.
Ejemplo
Imports System
Imports System.Media
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form
Private Player As New SoundPlayer
Sub New()
Me.InitializeComponent()
End Sub
Private Sub playLoopingButton_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles playLoopingButton.Click
Try
' Note: You may need to change the location specified based on
' the sounds loaded on your computer.
Me.Player.SoundLocation = "C:\Windows\Media\chimes.wav"
Me.Player.PlayLooping()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error playing sound")
End Try
End Sub
Private Sub stopPlayingButton_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles stopPlayingButton.Click
Me.Player.Stop()
End Sub
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
Friend WithEvents playLoopingButton As System.Windows.Forms.Button
Friend WithEvents stopPlayingButton As System.Windows.Forms.Button
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.playLoopingButton = New System.Windows.Forms.Button
Me.stopPlayingButton = New System.Windows.Forms.Button
Me.SuspendLayout()
'
'playLoopingButton
'
Me.playLoopingButton.Location = New System.Drawing.Point(12, 12)
Me.playLoopingButton.Name = "playLoopingButton"
Me.playLoopingButton.Size = New System.Drawing.Size(89, 23)
Me.playLoopingButton.TabIndex = 0
Me.playLoopingButton.Text = "Play Looping"
Me.playLoopingButton.UseVisualStyleBackColor = True
'
'stopPlayingButton
'
Me.stopPlayingButton.Location = New System.Drawing.Point(107, 12)
Me.stopPlayingButton.Name = "stopPlayingButton"
Me.stopPlayingButton.Size = New System.Drawing.Size(75, 23)
Me.stopPlayingButton.TabIndex = 1
Me.stopPlayingButton.Text = "Stop"
Me.stopPlayingButton.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(197, 52)
Me.Controls.Add(Me.stopPlayingButton)
Me.Controls.Add(Me.playLoopingButton)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1())
End Sub
End Class
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Media;
using System.Windows.Forms;
namespace SoundPlayerPlayLoopingExample
{
public class Form1 : Form
{
private SoundPlayer Player = new SoundPlayer();
public Form1()
{
InitializeComponent();
}
private void playLoopingButton_Click(object sender, EventArgs e)
{
try
{
// Note: You may need to change the location specified based on
// the sounds loaded on your computer.
this.Player.SoundLocation = @"C:\Windows\Media\chimes.wav";
this.Player.PlayLooping();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error playing sound");
}
}
private void stopPlayingButton_Click(object sender, EventArgs e)
{
this.Player.Stop();
}
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.playLoopingButton = new System.Windows.Forms.Button();
this.stopPlayingButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// playLoopingButton
//
this.playLoopingButton.Location = new System.Drawing.Point(12, 12);
this.playLoopingButton.Name = "playLoopingButton";
this.playLoopingButton.Size = new System.Drawing.Size(87, 23);
this.playLoopingButton.TabIndex = 0;
this.playLoopingButton.Text = "Play Looping";
this.playLoopingButton.UseVisualStyleBackColor = true;
this.playLoopingButton.Click += new System.EventHandler(this.playLoopingButton_Click);
//
// stopPlayingButton
//
this.stopPlayingButton.Location = new System.Drawing.Point(105, 12);
this.stopPlayingButton.Name = "stopPlayingButton";
this.stopPlayingButton.Size = new System.Drawing.Size(75, 23);
this.stopPlayingButton.TabIndex = 1;
this.stopPlayingButton.Text = "Stop";
this.stopPlayingButton.UseVisualStyleBackColor = true;
this.stopPlayingButton.Click += new System.EventHandler(this.stopPlayingButton_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(195, 51);
this.Controls.Add(this.stopPlayingButton);
this.Controls.Add(this.playLoopingButton);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button playLoopingButton;
private System.Windows.Forms.Button stopPlayingButton;
}
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
}
Compilar el código
Para este ejemplo se necesita:
Referencias a los ensamblados System y System.Windows.Forms.
Que se reemplace el nombre de archivo "c:\Windows\Media\chimes.wav" con un nombre de archivo válido.
Para obtener información sobre la generación de este ejemplo desde la línea de comandos de Visual Basic o Visual C#, vea Generar desde la línea de comandos (Visual Basic) o Generar la línea de comandos con csc.exe. También puede generar este ejemplo en Visual Studio pegando el código en un proyecto nuevo.
Programación eficaz
Las operaciones de archivo se deberían agregar dentro de los bloques de control de excepciones adecuados.
Las condiciones siguientes pueden producir una excepción:
El nombre de la ruta de acceso está mal formado. Por ejemplo, contiene caracteres que no son válidos o está compuesto sólo por espacios en blanco (clase ArgumentException).
La ruta de acceso es de sólo lectura (clase IOException).
El nombre de la ruta de acceso es Nothing (clase ArgumentNullException).
El nombre de la ruta de acceso es demasiado largo (clase PathTooLongException).
La ruta de acceso no es válida (clase DirectoryNotFoundException).
La ruta de acceso contiene sólo un signo de dos puntos ":" (clase NotSupportedException).
Seguridad
No tome ninguna decisión sobre el contenido del archivo basándose en su nombre. Por ejemplo, es posible que el archivo Form1.vb no sea un archivo de código fuente de Visual Basic. Compruebe todas las entradas antes de utilizar los datos en la aplicación.
Vea también
Tareas
Cómo: Reproducir un sonido desde un formulario Windows Forms