SoundPlayer Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Controla la reproducción del sonido de un archivo .wav.
public ref class SoundPlayer : System::ComponentModel::Component, System::Runtime::Serialization::ISerializable
public class SoundPlayer : System.ComponentModel.Component, System.Runtime.Serialization.ISerializable
[System.Serializable]
public class SoundPlayer : System.ComponentModel.Component, System.Runtime.Serialization.ISerializable
type SoundPlayer = class
inherit Component
interface ISerializable
[<System.Serializable>]
type SoundPlayer = class
inherit Component
interface ISerializable
Public Class SoundPlayer
Inherits Component
Implements ISerializable
- Herencia
- Atributos
- Implementaciones
Ejemplos
En el ejemplo de código siguiente se muestra el uso de la SoundPlayer clase para reproducir .wav archivos desde una ruta de acceso local o un identificador uniforme de recursos (URI).
#using <System.Drawing.dll>
#using <System.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::Diagnostics;
using namespace System::Drawing;
using namespace System::Media;
using namespace System::Windows::Forms;
public ref class SoundTestForm: public System::Windows::Forms::Form
{
private:
System::Windows::Forms::Label ^ label1;
System::Windows::Forms::TextBox^ filepathTextbox;
System::Windows::Forms::Button^ playOnceSyncButton;
System::Windows::Forms::Button^ playOnceAsyncButton;
System::Windows::Forms::Button^ playLoopAsyncButton;
System::Windows::Forms::Button^ selectFileButton;
System::Windows::Forms::Button^ stopButton;
System::Windows::Forms::StatusBar^ statusBar;
System::Windows::Forms::Button^ loadSyncButton;
System::Windows::Forms::Button^ loadAsyncButton;
SoundPlayer^ player;
public:
SoundTestForm()
{
// Initialize Forms Designer generated code.
InitializeComponent();
// Disable playback controls until a valid .wav file
// is selected.
EnablePlaybackControls( false );
// Set up the status bar and other controls.
InitializeControls();
// Set up the SoundPlayer object.
InitializeSound();
}
private:
// Sets up the status bar and other controls.
void InitializeControls()
{
// Set up the status bar.
StatusBarPanel^ panel = gcnew StatusBarPanel;
panel->BorderStyle = StatusBarPanelBorderStyle::Sunken;
panel->Text = "Ready.";
panel->AutoSize = StatusBarPanelAutoSize::Spring;
this->statusBar->ShowPanels = true;
this->statusBar->Panels->Add( panel );
}
// Sets up the SoundPlayer object.
void InitializeSound()
{
// Create an instance of the SoundPlayer class.
player = gcnew SoundPlayer;
// Listen for the LoadCompleted event.
player->LoadCompleted += gcnew AsyncCompletedEventHandler( this, &SoundTestForm::player_LoadCompleted );
// Listen for the SoundLocationChanged event.
player->SoundLocationChanged += gcnew EventHandler( this, &SoundTestForm::player_LocationChanged );
}
void selectFileButton_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Create a new OpenFileDialog.
OpenFileDialog^ dlg = gcnew OpenFileDialog;
// Make sure the dialog checks for existence of the
// selected file.
dlg->CheckFileExists = true;
// Allow selection of .wav files only.
dlg->Filter = "WAV files (*.wav)|*.wav";
dlg->DefaultExt = ".wav";
// Activate the file selection dialog.
if ( dlg->ShowDialog() == ::DialogResult::OK )
{
// Get the selected file's path from the dialog.
this->filepathTextbox->Text = dlg->FileName;
// Assign the selected file's path to
// the SoundPlayer object.
player->SoundLocation = filepathTextbox->Text;
}
}
// Convenience method for setting message text in
// the status bar.
void ReportStatus( String^ statusMessage )
{
// If the caller passed in a message...
if ( (statusMessage != nullptr) && (statusMessage != String::Empty) )
{
// ...post the caller's message to the status bar.
this->statusBar->Panels[ 0 ]->Text = statusMessage;
}
}
// Enables and disables play controls.
void EnablePlaybackControls( bool enabled )
{
this->playOnceSyncButton->Enabled = enabled;
this->playOnceAsyncButton->Enabled = enabled;
this->playLoopAsyncButton->Enabled = enabled;
this->stopButton->Enabled = enabled;
}
void filepathTextbox_TextChanged( Object^ /*sender*/, EventArgs^ /*e*/ )
{
// Disable playback controls until the new .wav is loaded.
EnablePlaybackControls( false );
}
void loadSyncButton_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Disable playback controls until the .wav is
// successfully loaded. The LoadCompleted event
// handler will enable them.
EnablePlaybackControls( false );
try
{
// Assign the selected file's path to
// the SoundPlayer object.
player->SoundLocation = filepathTextbox->Text;
// Load the .wav file.
player->Load();
}
catch ( Exception^ ex )
{
ReportStatus( ex->Message );
}
}
void loadAsyncButton_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
// Disable playback controls until the .wav is
// successfully loaded. The LoadCompleted event
// handler will enable them.
EnablePlaybackControls( false );
try
{
// Assign the selected file's path to
// the SoundPlayer object.
player->SoundLocation = this->filepathTextbox->Text;
// Load the .wav file.
player->LoadAsync();
}
catch ( Exception^ ex )
{
ReportStatus( ex->Message );
}
}
// Synchronously plays the selected .wav file once.
// If the file is large, UI response will be visibly
// affected.
void playOnceSyncButton_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
ReportStatus( "Playing .wav file synchronously." );
player->PlaySync();
ReportStatus( "Finished playing .wav file synchronously." );
}
// Asynchronously plays the selected .wav file once.
void playOnceAsyncButton_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
ReportStatus( "Playing .wav file asynchronously." );
player->Play();
}
// Asynchronously plays the selected .wav file until the user
// clicks the Stop button.
void playLoopAsyncButton_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
ReportStatus( "Looping .wav file asynchronously." );
player->PlayLooping();
}
// Stops the currently playing .wav file, if any.
void stopButton_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
player->Stop();
ReportStatus( "Stopped by user." );
}
// Handler for the LoadCompleted event.
void player_LoadCompleted( Object^ /*sender*/, AsyncCompletedEventArgs^ /*e*/ )
{
String^ message = String::Format( "LoadCompleted: {0}", this->filepathTextbox->Text );
ReportStatus( message );
EnablePlaybackControls( true );
}
// Handler for the SoundLocationChanged event.
void player_LocationChanged( Object^ /*sender*/, EventArgs^ /*e*/ )
{
String^ message = String::Format( "SoundLocationChanged: {0}", player->SoundLocation );
ReportStatus( message );
}
void InitializeComponent()
{
this->filepathTextbox = gcnew System::Windows::Forms::TextBox;
this->selectFileButton = gcnew System::Windows::Forms::Button;
this->label1 = gcnew System::Windows::Forms::Label;
this->loadSyncButton = gcnew System::Windows::Forms::Button;
this->playOnceSyncButton = gcnew System::Windows::Forms::Button;
this->playOnceAsyncButton = gcnew System::Windows::Forms::Button;
this->stopButton = gcnew System::Windows::Forms::Button;
this->playLoopAsyncButton = gcnew System::Windows::Forms::Button;
this->statusBar = gcnew System::Windows::Forms::StatusBar;
this->loadAsyncButton = gcnew System::Windows::Forms::Button;
this->SuspendLayout();
//
// filepathTextbox
//
this->filepathTextbox->Anchor = (System::Windows::Forms::AnchorStyles)(System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Left | System::Windows::Forms::AnchorStyles::Right);
this->filepathTextbox->Location = System::Drawing::Point( 7, 25 );
this->filepathTextbox->Name = "filepathTextbox";
this->filepathTextbox->Size = System::Drawing::Size( 263, 20 );
this->filepathTextbox->TabIndex = 1;
this->filepathTextbox->Text = "";
this->filepathTextbox->TextChanged += gcnew System::EventHandler( this, &SoundTestForm::filepathTextbox_TextChanged );
//
// selectFileButton
//
this->selectFileButton->Anchor = static_cast<AnchorStyles>(AnchorStyles::Top | AnchorStyles::Right);
this->selectFileButton->Location = System::Drawing::Point( 276, 25 );
this->selectFileButton->Name = "selectFileButton";
this->selectFileButton->Size = System::Drawing::Size( 23, 21 );
this->selectFileButton->TabIndex = 2;
this->selectFileButton->Text = "...";
this->selectFileButton->Click += gcnew System::EventHandler( this, &SoundTestForm::selectFileButton_Click );
//
// label1
//
this->label1->Location = System::Drawing::Point( 7, 7 );
this->label1->Name = "label1";
this->label1->Size = System::Drawing::Size( 145, 17 );
this->label1->TabIndex = 3;
this->label1->Text = ".wav path or URL:";
//
// loadSyncButton
//
this->loadSyncButton->Location = System::Drawing::Point( 7, 53 );
this->loadSyncButton->Name = "loadSyncButton";
this->loadSyncButton->Size = System::Drawing::Size( 142, 23 );
this->loadSyncButton->TabIndex = 4;
this->loadSyncButton->Text = "Load Synchronously";
this->loadSyncButton->Click += gcnew System::EventHandler( this, &SoundTestForm::loadSyncButton_Click );
//
// playOnceSyncButton
//
this->playOnceSyncButton->Location = System::Drawing::Point( 7, 86 );
this->playOnceSyncButton->Name = "playOnceSyncButton";
this->playOnceSyncButton->Size = System::Drawing::Size( 142, 23 );
this->playOnceSyncButton->TabIndex = 5;
this->playOnceSyncButton->Text = "Play Once Synchronously";
this->playOnceSyncButton->Click += gcnew System::EventHandler( this, &SoundTestForm::playOnceSyncButton_Click );
//
// playOnceAsyncButton
//
this->playOnceAsyncButton->Location = System::Drawing::Point( 149, 86 );
this->playOnceAsyncButton->Name = "playOnceAsyncButton";
this->playOnceAsyncButton->Size = System::Drawing::Size( 147, 23 );
this->playOnceAsyncButton->TabIndex = 6;
this->playOnceAsyncButton->Text = "Play Once Asynchronously";
this->playOnceAsyncButton->Click += gcnew System::EventHandler( this, &SoundTestForm::playOnceAsyncButton_Click );
//
// stopButton
//
this->stopButton->Location = System::Drawing::Point( 149, 109 );
this->stopButton->Name = "stopButton";
this->stopButton->Size = System::Drawing::Size( 147, 23 );
this->stopButton->TabIndex = 7;
this->stopButton->Text = "Stop";
this->stopButton->Click += gcnew System::EventHandler( this, &SoundTestForm::stopButton_Click );
//
// playLoopAsyncButton
//
this->playLoopAsyncButton->Location = System::Drawing::Point( 7, 109 );
this->playLoopAsyncButton->Name = "playLoopAsyncButton";
this->playLoopAsyncButton->Size = System::Drawing::Size( 142, 23 );
this->playLoopAsyncButton->TabIndex = 8;
this->playLoopAsyncButton->Text = "Loop Asynchronously";
this->playLoopAsyncButton->Click += gcnew System::EventHandler( this, &SoundTestForm::playLoopAsyncButton_Click );
//
// statusBar
//
this->statusBar->Location = System::Drawing::Point( 0, 146 );
this->statusBar->Name = "statusBar";
this->statusBar->Size = System::Drawing::Size( 306, 22 );
this->statusBar->SizingGrip = false;
this->statusBar->TabIndex = 9;
this->statusBar->Text = "(no status)";
//
// loadAsyncButton
//
this->loadAsyncButton->Location = System::Drawing::Point( 149, 53 );
this->loadAsyncButton->Name = "loadAsyncButton";
this->loadAsyncButton->Size = System::Drawing::Size( 147, 23 );
this->loadAsyncButton->TabIndex = 10;
this->loadAsyncButton->Text = "Load Asynchronously";
this->loadAsyncButton->Click += gcnew System::EventHandler( this, &SoundTestForm::loadAsyncButton_Click );
//
// SoundTestForm
//
this->ClientSize = System::Drawing::Size( 306, 168 );
this->Controls->Add( this->loadAsyncButton );
this->Controls->Add( this->statusBar );
this->Controls->Add( this->playLoopAsyncButton );
this->Controls->Add( this->stopButton );
this->Controls->Add( this->playOnceAsyncButton );
this->Controls->Add( this->playOnceSyncButton );
this->Controls->Add( this->loadSyncButton );
this->Controls->Add( this->label1 );
this->Controls->Add( this->selectFileButton );
this->Controls->Add( this->filepathTextbox );
this->MinimumSize = System::Drawing::Size( 310, 165 );
this->Name = "SoundTestForm";
this->SizeGripStyle = System::Windows::Forms::SizeGripStyle::Show;
this->Text = "Sound API Test Form";
this->ResumeLayout( false );
}
};
[STAThread]
int main()
{
Application::Run( gcnew SoundTestForm );
}
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Media;
using System.Windows.Forms;
namespace SoundApiExample
{
public class SoundTestForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox filepathTextbox;
private System.Windows.Forms.Button playOnceSyncButton;
private System.Windows.Forms.Button playOnceAsyncButton;
private System.Windows.Forms.Button playLoopAsyncButton;
private System.Windows.Forms.Button selectFileButton;
private System.Windows.Forms.Button stopButton;
private System.Windows.Forms.StatusBar statusBar;
private System.Windows.Forms.Button loadSyncButton;
private System.Windows.Forms.Button loadAsyncButton;
private SoundPlayer player;
public SoundTestForm()
{
// Initialize Forms Designer generated code.
InitializeComponent();
// Disable playback controls until a valid .wav file
// is selected.
EnablePlaybackControls(false);
// Set up the status bar and other controls.
InitializeControls();
// Set up the SoundPlayer object.
InitializeSound();
}
// Sets up the status bar and other controls.
private void InitializeControls()
{
// Set up the status bar.
StatusBarPanel panel = new StatusBarPanel();
panel.BorderStyle = StatusBarPanelBorderStyle.Sunken;
panel.Text = "Ready.";
panel.AutoSize = StatusBarPanelAutoSize.Spring;
this.statusBar.ShowPanels = true;
this.statusBar.Panels.Add(panel);
}
// Sets up the SoundPlayer object.
private void InitializeSound()
{
// Create an instance of the SoundPlayer class.
player = new SoundPlayer();
// Listen for the LoadCompleted event.
player.LoadCompleted += new AsyncCompletedEventHandler(player_LoadCompleted);
// Listen for the SoundLocationChanged event.
player.SoundLocationChanged += new EventHandler(player_LocationChanged);
}
private void selectFileButton_Click(object sender,
System.EventArgs e)
{
// Create a new OpenFileDialog.
OpenFileDialog dlg = new OpenFileDialog();
// Make sure the dialog checks for existence of the
// selected file.
dlg.CheckFileExists = true;
// Allow selection of .wav files only.
dlg.Filter = "WAV files (*.wav)|*.wav";
dlg.DefaultExt = ".wav";
// Activate the file selection dialog.
if (dlg.ShowDialog() == DialogResult.OK)
{
// Get the selected file's path from the dialog.
this.filepathTextbox.Text = dlg.FileName;
// Assign the selected file's path to
// the SoundPlayer object.
player.SoundLocation = filepathTextbox.Text;
}
}
// Convenience method for setting message text in
// the status bar.
private void ReportStatus(string statusMessage)
{
// If the caller passed in a message...
if (!string.IsNullOrEmpty(statusMessage))
{
// ...post the caller's message to the status bar.
this.statusBar.Panels[0].Text = statusMessage;
}
}
// Enables and disables play controls.
private void EnablePlaybackControls(bool enabled)
{
this.playOnceSyncButton.Enabled = enabled;
this.playOnceAsyncButton.Enabled = enabled;
this.playLoopAsyncButton.Enabled = enabled;
this.stopButton.Enabled = enabled;
}
private void filepathTextbox_TextChanged(object sender,
EventArgs e)
{
// Disable playback controls until the new .wav is loaded.
EnablePlaybackControls(false);
}
private void loadSyncButton_Click(object sender,
System.EventArgs e)
{
// Disable playback controls until the .wav is
// successfully loaded. The LoadCompleted event
// handler will enable them.
EnablePlaybackControls(false);
try
{
// Assign the selected file's path to
// the SoundPlayer object.
player.SoundLocation = filepathTextbox.Text;
// Load the .wav file.
player.Load();
}
catch (Exception ex)
{
ReportStatus(ex.Message);
}
}
private void loadAsyncButton_Click(System.Object sender,
System.EventArgs e)
{
// Disable playback controls until the .wav is
// successfully loaded. The LoadCompleted event
// handler will enable them.
EnablePlaybackControls(false);
try
{
// Assign the selected file's path to
// the SoundPlayer object.
player.SoundLocation = this.filepathTextbox.Text;
// Load the .wav file.
player.LoadAsync();
}
catch (Exception ex)
{
ReportStatus(ex.Message);
}
}
// Synchronously plays the selected .wav file once.
// If the file is large, UI response will be visibly
// affected.
private void playOnceSyncButton_Click(object sender,
System.EventArgs e)
{
ReportStatus("Playing .wav file synchronously.");
player.PlaySync();
ReportStatus("Finished playing .wav file synchronously.");
}
// Asynchronously plays the selected .wav file once.
private void playOnceAsyncButton_Click(object sender,
System.EventArgs e)
{
ReportStatus("Playing .wav file asynchronously.");
player.Play();
}
// Asynchronously plays the selected .wav file until the user
// clicks the Stop button.
private void playLoopAsyncButton_Click(object sender,
System.EventArgs e)
{
ReportStatus("Looping .wav file asynchronously.");
player.PlayLooping();
}
// Stops the currently playing .wav file, if any.
private void stopButton_Click(System.Object sender,
System.EventArgs e)
{
player.Stop();
ReportStatus("Stopped by user.");
}
// Handler for the LoadCompleted event.
private void player_LoadCompleted(object sender,
AsyncCompletedEventArgs e)
{
string message = String.Format("LoadCompleted: {0}",
this.filepathTextbox.Text);
ReportStatus(message);
EnablePlaybackControls(true);
}
// Handler for the SoundLocationChanged event.
private void player_LocationChanged(object sender, EventArgs e)
{
string message = String.Format("SoundLocationChanged: {0}",
player.SoundLocation);
ReportStatus(message);
}
private void playSoundFromResource(object sender, EventArgs e)
{
System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream s = a.GetManifestResourceStream("<AssemblyName>.chimes.wav");
SoundPlayer player = new SoundPlayer(s);
player.Play();
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.filepathTextbox = new System.Windows.Forms.TextBox();
this.selectFileButton = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.loadSyncButton = new System.Windows.Forms.Button();
this.playOnceSyncButton = new System.Windows.Forms.Button();
this.playOnceAsyncButton = new System.Windows.Forms.Button();
this.stopButton = new System.Windows.Forms.Button();
this.playLoopAsyncButton = new System.Windows.Forms.Button();
this.statusBar = new System.Windows.Forms.StatusBar();
this.loadAsyncButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// filepathTextbox
//
this.filepathTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
this.filepathTextbox.Location = new System.Drawing.Point(7, 25);
this.filepathTextbox.Name = "filepathTextbox";
this.filepathTextbox.Size = new System.Drawing.Size(263, 20);
this.filepathTextbox.TabIndex = 1;
this.filepathTextbox.Text = "";
this.filepathTextbox.TextChanged += new System.EventHandler(this.filepathTextbox_TextChanged);
//
// selectFileButton
//
this.selectFileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.selectFileButton.Location = new System.Drawing.Point(276, 25);
this.selectFileButton.Name = "selectFileButton";
this.selectFileButton.Size = new System.Drawing.Size(23, 21);
this.selectFileButton.TabIndex = 2;
this.selectFileButton.Text = "...";
this.selectFileButton.Click += new System.EventHandler(this.selectFileButton_Click);
//
// label1
//
this.label1.Location = new System.Drawing.Point(7, 7);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(145, 17);
this.label1.TabIndex = 3;
this.label1.Text = ".wav path or URL:";
//
// loadSyncButton
//
this.loadSyncButton.Location = new System.Drawing.Point(7, 53);
this.loadSyncButton.Name = "loadSyncButton";
this.loadSyncButton.Size = new System.Drawing.Size(142, 23);
this.loadSyncButton.TabIndex = 4;
this.loadSyncButton.Text = "Load Synchronously";
this.loadSyncButton.Click += new System.EventHandler(this.loadSyncButton_Click);
//
// playOnceSyncButton
//
this.playOnceSyncButton.Location = new System.Drawing.Point(7, 86);
this.playOnceSyncButton.Name = "playOnceSyncButton";
this.playOnceSyncButton.Size = new System.Drawing.Size(142, 23);
this.playOnceSyncButton.TabIndex = 5;
this.playOnceSyncButton.Text = "Play Once Synchronously";
this.playOnceSyncButton.Click += new System.EventHandler(this.playOnceSyncButton_Click);
//
// playOnceAsyncButton
//
this.playOnceAsyncButton.Location = new System.Drawing.Point(149, 86);
this.playOnceAsyncButton.Name = "playOnceAsyncButton";
this.playOnceAsyncButton.Size = new System.Drawing.Size(147, 23);
this.playOnceAsyncButton.TabIndex = 6;
this.playOnceAsyncButton.Text = "Play Once Asynchronously";
this.playOnceAsyncButton.Click += new System.EventHandler(this.playOnceAsyncButton_Click);
//
// stopButton
//
this.stopButton.Location = new System.Drawing.Point(149, 109);
this.stopButton.Name = "stopButton";
this.stopButton.Size = new System.Drawing.Size(147, 23);
this.stopButton.TabIndex = 7;
this.stopButton.Text = "Stop";
this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
//
// playLoopAsyncButton
//
this.playLoopAsyncButton.Location = new System.Drawing.Point(7, 109);
this.playLoopAsyncButton.Name = "playLoopAsyncButton";
this.playLoopAsyncButton.Size = new System.Drawing.Size(142, 23);
this.playLoopAsyncButton.TabIndex = 8;
this.playLoopAsyncButton.Text = "Loop Asynchronously";
this.playLoopAsyncButton.Click += new System.EventHandler(this.playLoopAsyncButton_Click);
//
// statusBar
//
this.statusBar.Location = new System.Drawing.Point(0, 146);
this.statusBar.Name = "statusBar";
this.statusBar.Size = new System.Drawing.Size(306, 22);
this.statusBar.SizingGrip = false;
this.statusBar.TabIndex = 9;
this.statusBar.Text = "(no status)";
//
// loadAsyncButton
//
this.loadAsyncButton.Location = new System.Drawing.Point(149, 53);
this.loadAsyncButton.Name = "loadAsyncButton";
this.loadAsyncButton.Size = new System.Drawing.Size(147, 23);
this.loadAsyncButton.TabIndex = 10;
this.loadAsyncButton.Text = "Load Asynchronously";
this.loadAsyncButton.Click += new System.EventHandler(this.loadAsyncButton_Click);
//
// SoundTestForm
//
this.ClientSize = new System.Drawing.Size(306, 168);
this.Controls.Add(this.loadAsyncButton);
this.Controls.Add(this.statusBar);
this.Controls.Add(this.playLoopAsyncButton);
this.Controls.Add(this.stopButton);
this.Controls.Add(this.playOnceAsyncButton);
this.Controls.Add(this.playOnceSyncButton);
this.Controls.Add(this.loadSyncButton);
this.Controls.Add(this.label1);
this.Controls.Add(this.selectFileButton);
this.Controls.Add(this.filepathTextbox);
this.MinimumSize = new System.Drawing.Size(310, 165);
this.Name = "SoundTestForm";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show;
this.Text = "Sound API Test Form";
this.ResumeLayout(false);
}
#endregion
[STAThread]
static void Main()
{
Application.Run(new SoundTestForm());
}
}
}
Imports System.Collections
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.Media
Imports System.Windows.Forms
Public Class SoundTestForm
Inherits System.Windows.Forms.Form
Private label1 As System.Windows.Forms.Label
Private WithEvents filepathTextbox As System.Windows.Forms.TextBox
Private WithEvents playOnceSyncButton As System.Windows.Forms.Button
Private WithEvents playOnceAsyncButton As System.Windows.Forms.Button
Private WithEvents playLoopAsyncButton As System.Windows.Forms.Button
Private WithEvents selectFileButton As System.Windows.Forms.Button
Private WithEvents stopButton As System.Windows.Forms.Button
Private statusBar As System.Windows.Forms.StatusBar
Private WithEvents loadSyncButton As System.Windows.Forms.Button
Private WithEvents loadAsyncButton As System.Windows.Forms.Button
Private player As SoundPlayer
Public Sub New()
' Initialize Forms Designer generated code.
InitializeComponent()
' Disable playback controls until a valid .wav file
' is selected.
EnablePlaybackControls(False)
' Set up the status bar and other controls.
InitializeControls()
' Set up the SoundPlayer object.
InitializeSound()
End Sub
' Sets up the status bar and other controls.
Private Sub InitializeControls()
' Set up the status bar.
Dim panel As New StatusBarPanel
panel.BorderStyle = StatusBarPanelBorderStyle.Sunken
panel.Text = "Ready."
panel.AutoSize = StatusBarPanelAutoSize.Spring
Me.statusBar.ShowPanels = True
Me.statusBar.Panels.Add(panel)
End Sub
' Sets up the SoundPlayer object.
Private Sub InitializeSound()
' Create an instance of the SoundPlayer class.
player = New SoundPlayer
' Listen for the LoadCompleted event.
AddHandler player.LoadCompleted, AddressOf player_LoadCompleted
' Listen for the SoundLocationChanged event.
AddHandler player.SoundLocationChanged, AddressOf player_LocationChanged
End Sub
Private Sub selectFileButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles selectFileButton.Click
' Create a new OpenFileDialog.
Dim dlg As New OpenFileDialog
' Make sure the dialog checks for existence of the
' selected file.
dlg.CheckFileExists = True
' Allow selection of .wav files only.
dlg.Filter = "WAV files (*.wav)|*.wav"
dlg.DefaultExt = ".wav"
' Activate the file selection dialog.
If dlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
' Get the selected file's path from the dialog.
Me.filepathTextbox.Text = dlg.FileName
' Assign the selected file's path to the SoundPlayer object.
player.SoundLocation = filepathTextbox.Text
End If
End Sub
' Convenience method for setting message text in
' the status bar.
Private Sub ReportStatus(ByVal statusMessage As String)
' If the caller passed in a message...
If (statusMessage IsNot Nothing) AndAlso _
statusMessage <> [String].Empty Then
' ...post the caller's message to the status bar.
Me.statusBar.Panels(0).Text = statusMessage
End If
End Sub
' Enables and disables play controls.
Private Sub EnablePlaybackControls(ByVal enabled As Boolean)
Me.playOnceSyncButton.Enabled = enabled
Me.playOnceAsyncButton.Enabled = enabled
Me.playLoopAsyncButton.Enabled = enabled
Me.stopButton.Enabled = enabled
End Sub
Private Sub filepathTextbox_TextChanged(ByVal sender As Object, _
ByVal e As EventArgs) Handles filepathTextbox.TextChanged
' Disable playback controls until the new .wav is loaded.
EnablePlaybackControls(False)
End Sub
Private Sub loadSyncButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles loadSyncButton.Click
' Disable playback controls until the .wav is successfully
' loaded. The LoadCompleted event handler will enable them.
EnablePlaybackControls(False)
Try
' Assign the selected file's path to the SoundPlayer object.
player.SoundLocation = filepathTextbox.Text
' Load the .wav file.
player.Load()
Catch ex As Exception
ReportStatus(ex.Message)
End Try
End Sub
Private Sub loadAsyncButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles loadAsyncButton.Click
' Disable playback controls until the .wav is successfully
' loaded. The LoadCompleted event handler will enable them.
EnablePlaybackControls(False)
Try
' Assign the selected file's path to the SoundPlayer object.
player.SoundLocation = Me.filepathTextbox.Text
' Load the .wav file.
player.LoadAsync()
Catch ex As Exception
ReportStatus(ex.Message)
End Try
End Sub
' Synchronously plays the selected .wav file once.
' If the file is large, UI response will be visibly
' affected.
Private Sub playOnceSyncButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles playOnceSyncButton.Click
ReportStatus("Playing .wav file synchronously.")
player.PlaySync()
ReportStatus("Finished playing .wav file synchronously.")
End Sub
' Asynchronously plays the selected .wav file once.
Private Sub playOnceAsyncButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles playOnceAsyncButton.Click
ReportStatus("Playing .wav file asynchronously.")
player.Play()
End Sub
' Asynchronously plays the selected .wav file until the user
' clicks the Stop button.
Private Sub playLoopAsyncButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles playLoopAsyncButton.Click
ReportStatus("Looping .wav file asynchronously.")
player.PlayLooping()
End Sub
' Stops the currently playing .wav file, if any.
Private Sub stopButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles stopButton.Click
player.Stop()
ReportStatus("Stopped by user.")
End Sub
' Handler for the LoadCompleted event.
Private Sub player_LoadCompleted(ByVal sender As Object, _
ByVal e As AsyncCompletedEventArgs)
Dim message As String = [String].Format("LoadCompleted: {0}", _
Me.filepathTextbox.Text)
ReportStatus(message)
EnablePlaybackControls(True)
End Sub
' Handler for the SoundLocationChanged event.
Private Sub player_LocationChanged(ByVal sender As Object, _
ByVal e As EventArgs)
Dim message As String = [String].Format("SoundLocationChanged: {0}", _
player.SoundLocation)
ReportStatus(message)
End Sub
Private Sub playSoundFromResource(ByVal sender As Object, _
ByVal e As EventArgs)
Dim a As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim s As System.IO.Stream = a.GetManifestResourceStream("<AssemblyName>.chimes.wav")
Dim player As SoundPlayer = New SoundPlayer(s)
player.Play()
End Sub
Private Sub InitializeComponent()
Me.filepathTextbox = New System.Windows.Forms.TextBox
Me.selectFileButton = New System.Windows.Forms.Button
Me.label1 = New System.Windows.Forms.Label
Me.loadSyncButton = New System.Windows.Forms.Button
Me.playOnceSyncButton = New System.Windows.Forms.Button
Me.playOnceAsyncButton = New System.Windows.Forms.Button
Me.stopButton = New System.Windows.Forms.Button
Me.playLoopAsyncButton = New System.Windows.Forms.Button
Me.statusBar = New System.Windows.Forms.StatusBar
Me.loadAsyncButton = New System.Windows.Forms.Button
Me.SuspendLayout()
'
' filepathTextbox
'
Me.filepathTextbox.Anchor = CType(System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right, System.Windows.Forms.AnchorStyles)
Me.filepathTextbox.Location = New System.Drawing.Point(7, 25)
Me.filepathTextbox.Name = "filepathTextbox"
Me.filepathTextbox.Size = New System.Drawing.Size(263, 20)
Me.filepathTextbox.TabIndex = 1
Me.filepathTextbox.Text = ""
'
' selectFileButton
'
Me.selectFileButton.Anchor = CType(System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right, System.Windows.Forms.AnchorStyles)
Me.selectFileButton.Location = New System.Drawing.Point(276, 25)
Me.selectFileButton.Name = "selectFileButton"
Me.selectFileButton.Size = New System.Drawing.Size(23, 21)
Me.selectFileButton.TabIndex = 2
Me.selectFileButton.Text = "..."
'
' label1
'
Me.label1.Location = New System.Drawing.Point(7, 7)
Me.label1.Name = "label1"
Me.label1.Size = New System.Drawing.Size(145, 17)
Me.label1.TabIndex = 3
Me.label1.Text = ".wav path or URL:"
'
' loadSyncButton
'
Me.loadSyncButton.Location = New System.Drawing.Point(7, 53)
Me.loadSyncButton.Name = "loadSyncButton"
Me.loadSyncButton.Size = New System.Drawing.Size(142, 23)
Me.loadSyncButton.TabIndex = 4
Me.loadSyncButton.Text = "Load Synchronously"
'
' playOnceSyncButton
'
Me.playOnceSyncButton.Location = New System.Drawing.Point(7, 86)
Me.playOnceSyncButton.Name = "playOnceSyncButton"
Me.playOnceSyncButton.Size = New System.Drawing.Size(142, 23)
Me.playOnceSyncButton.TabIndex = 5
Me.playOnceSyncButton.Text = "Play Once Synchronously"
'
' playOnceAsyncButton
'
Me.playOnceAsyncButton.Location = New System.Drawing.Point(149, 86)
Me.playOnceAsyncButton.Name = "playOnceAsyncButton"
Me.playOnceAsyncButton.Size = New System.Drawing.Size(147, 23)
Me.playOnceAsyncButton.TabIndex = 6
Me.playOnceAsyncButton.Text = "Play Once Asynchronously"
'
' stopButton
'
Me.stopButton.Location = New System.Drawing.Point(149, 109)
Me.stopButton.Name = "stopButton"
Me.stopButton.Size = New System.Drawing.Size(147, 23)
Me.stopButton.TabIndex = 7
Me.stopButton.Text = "Stop"
'
' playLoopAsyncButton
'
Me.playLoopAsyncButton.Location = New System.Drawing.Point(7, 109)
Me.playLoopAsyncButton.Name = "playLoopAsyncButton"
Me.playLoopAsyncButton.Size = New System.Drawing.Size(142, 23)
Me.playLoopAsyncButton.TabIndex = 8
Me.playLoopAsyncButton.Text = "Loop Asynchronously"
'
' statusBar
'
Me.statusBar.Location = New System.Drawing.Point(0, 146)
Me.statusBar.Name = "statusBar"
Me.statusBar.Size = New System.Drawing.Size(306, 22)
Me.statusBar.SizingGrip = False
Me.statusBar.TabIndex = 9
Me.statusBar.Text = "(no status)"
'
' loadAsyncButton
'
Me.loadAsyncButton.Location = New System.Drawing.Point(149, 53)
Me.loadAsyncButton.Name = "loadAsyncButton"
Me.loadAsyncButton.Size = New System.Drawing.Size(147, 23)
Me.loadAsyncButton.TabIndex = 10
Me.loadAsyncButton.Text = "Load Asynchronously"
'
' SoundTestForm
'
Me.ClientSize = New System.Drawing.Size(306, 168)
Me.Controls.Add(loadAsyncButton)
Me.Controls.Add(statusBar)
Me.Controls.Add(playLoopAsyncButton)
Me.Controls.Add(stopButton)
Me.Controls.Add(playOnceAsyncButton)
Me.Controls.Add(playOnceSyncButton)
Me.Controls.Add(loadSyncButton)
Me.Controls.Add(label1)
Me.Controls.Add(selectFileButton)
Me.Controls.Add(filepathTextbox)
Me.MinimumSize = New System.Drawing.Size(310, 165)
Me.Name = "SoundTestForm"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show
Me.Text = "Sound API Test Form"
Me.ResumeLayout(False)
End Sub
<STAThread()> _
Shared Sub Main()
Application.Run(New SoundTestForm)
End Sub
End Class
Comentarios
La SoundPlayer clase proporciona una interfaz sencilla para cargar y reproducir un archivo .wav. La SoundPlayer clase admite la carga de un archivo .wav desde una ruta de acceso de archivo, una dirección URL, un Stream que contiene un archivo .wav o un recurso incrustado que contiene un archivo .wav.
Para reproducir un sonido mediante la SoundPlayer clase , configure un SoundPlayer con una ruta de acceso al archivo .wav y llame a uno de los métodos de reproducción. Puede identificar el archivo de .wav que se va a reproducir mediante uno de los constructores o estableciendo la SoundLocation propiedad o Stream . El archivo se puede cargar antes de reproducir mediante uno de los métodos de carga, o se puede aplazar la carga hasta que se llame a uno de los métodos de reproducción. Un SoundPlayer objeto configurado para cargar un archivo .wav desde una Stream dirección URL o debe cargar el archivo .wav en memoria antes de que comience la reproducción.
Puede cargar o reproducir un archivo .wav de forma sincrónica o asincrónica. Si llama a un método de carga o reproducción sincrónica, el subproceso de llamada esperará hasta que el método vuelva, lo que puede hacer que se interrumpa la pintura y otros eventos. Llamar a un método de carga o reproducción asincrónica permitirá que el subproceso de llamada continúe sin interrupción. Para obtener más información sobre las llamadas a métodos asincrónicos, vea Cómo: Ejecutar una operación en segundo plano.
Cuando un SoundPlayer objeto ha terminado de cargar un archivo .wav, genera el LoadCompleted evento . Puede examinar en el AsyncCompletedEventArgs controlador de eventos para determinar si la carga se realizó correctamente o no. El SoundLocationChanged evento se genera cuando el origen de audio se establece en una nueva ruta de acceso o dirección URL de archivo. El StreamChanged evento se genera cuando el origen de audio se establece en un nuevo Stream. Para obtener más información acerca de cómo controlar eventos, vea controlar y provocar eventos.
Para obtener más información sobre SoundPlayer, vea Introducción a la clase SoundPlayer.
Nota
La SoundPlayer clase no puede reproducir otros tipos de archivo, como .wma o .mp3. Si desea reproducir otros tipos de archivo, puede usar el control Reproductor multimedia de Windows. Para obtener más información, vea Uso del control Reproductor multimedia de Windows en una solución de .NET Framework y referencia del modelo de objetos de Reproductor multimedia de Windows para Visual Basic .NET y C# en el SDK de Reproductor multimedia de Windows.
Constructores
SoundPlayer() |
Inicializa una nueva instancia de la clase SoundPlayer. |
SoundPlayer(SerializationInfo, StreamingContext) |
Obsoletos.
Inicializa una nueva instancia de la clase SoundPlayer. |
SoundPlayer(Stream) |
Inicializa una instancia nueva de la clase SoundPlayer y asocia el archivo .wav a la Stream especificada. |
SoundPlayer(String) |
Inicializa una instancia nueva de la clase SoundPlayer y asocia el archivo .wav especificado. |
Propiedades
CanRaiseEvents |
Obtiene un valor que indica si el componente puede generar un evento. (Heredado de Component) |
Container |
Obtiene la interfaz IContainer que contiene la clase Component. (Heredado de Component) |
DesignMode |
Obtiene un valor que indica si Component está actualmente en modo de diseño. (Heredado de Component) |
Events |
Obtiene la lista de controladores de eventos asociados a Component. (Heredado de Component) |
IsLoadCompleted |
Obtiene un valor que indica si la carga de un archivo .wav se ha realizado correctamente. |
LoadTimeout |
Obtiene o establece el tiempo máximo, expresado en milisegundos, que puede tardar en cargarse el archivo .wav. |
Site |
Obtiene o establece ISite de Component. (Heredado de Component) |
SoundLocation |
Obtiene o establece la ruta de acceso o la dirección URL del archivo .wav que se va a cargar. |
Stream |
Obtiene o establece la Stream desde la que se va a cargar el archivo .wav. |
Tag |
Obtiene o establece el Object que contiene datos sobre SoundPlayer. |
Métodos
CreateObjRef(Type) |
Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto. (Heredado de MarshalByRefObject) |
Dispose() |
Libera todos los recursos que usa Component. (Heredado de Component) |
Dispose(Boolean) |
Libera los recursos no administrados que usa Component y, de forma opcional, libera los recursos administrados. (Heredado de Component) |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetLifetimeService() |
Obsoletos.
Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
GetService(Type) |
Devuelve un objeto que representa el servicio suministrado por Component o por Container. (Heredado de Component) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
InitializeLifetimeService() |
Obsoletos.
Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
Load() |
Carga un sonido de forma sincrónica. |
LoadAsync() |
Carga un archivo .wav desde una secuencia o un recurso Web utilizando un subproceso nuevo. |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
MemberwiseClone(Boolean) |
Crea una copia superficial del objeto MarshalByRefObject actual. (Heredado de MarshalByRefObject) |
OnLoadCompleted(AsyncCompletedEventArgs) |
Genera el evento LoadCompleted. |
OnSoundLocationChanged(EventArgs) |
Genera el evento SoundLocationChanged. |
OnStreamChanged(EventArgs) |
Genera el evento StreamChanged. |
Play() |
Reproduce el archivo .wav mediante un subproceso nuevo, y si el archivo .wav no estaba cargado, primero lo carga. |
PlayLooping() |
Reproduce repetidamente el archivo .wav mediante un subproceso nuevo y carga primero el archivo .wav si no está cargado. |
PlaySync() |
Reproduce el archivo .wav y lo carga primero si no estaba cargado. |
Stop() |
Detiene la reproducción del sonido si ya se está reproduciendo. |
ToString() |
Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar. (Heredado de Component) |
Eventos
Disposed |
Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose(). (Heredado de Component) |
LoadCompleted |
Se produce cuando un archivo .wav se ha cargado, ya sea correctamente o no. |
SoundLocationChanged |
Se produce cuando se ha establecido una nueva ruta de acceso de origen audio para este SoundPlayer. |
StreamChanged |
Se produce cuando se ha establecido un nuevo origen de audio de Stream para este SoundPlayer. |
Implementaciones de interfaz explícitas
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Para obtener una descripción de este miembro, vea el método GetObjectData(SerializationInfo, StreamingContext). |