SoundPlayer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Controlla la riproduzione di un suono da un file 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
- Ereditarietà
- Attributi
- Implementazioni
Esempio
Nell'esempio di codice seguente viene illustrato l'uso SoundPlayer della classe per la riproduzione di file .wav da un percorso locale o da un URI (Uniform Resource Identifier).
#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
Commenti
La SoundPlayer classe fornisce un'interfaccia semplice per il caricamento e la riproduzione di un file .wav. La SoundPlayer classe supporta il caricamento di un file .wav da un percorso file, un URL, un Stream oggetto contenente un file .wav o una risorsa incorporata contenente un file .wav.
Per riprodurre un suono usando la SoundPlayer classe, configurare un SoundPlayer oggetto con un percorso al file .wav e chiamare uno dei metodi di riproduzione. È possibile identificare il file di .wav da riprodurre usando uno dei costruttori o impostando la SoundLocation proprietà o Stream . Il file può essere caricato prima di giocare usando uno dei metodi di carico oppure il caricamento può essere posticipato fino a quando non viene chiamato uno dei metodi di riproduzione. Un SoundPlayer file configurato per caricare un file di .wav da un Stream URL o deve caricare il file .wav in memoria prima dell'inizio della riproduzione.
È possibile caricare o riprodurre un file .wav in modo sincrono o asincrono. Se si chiama un metodo di caricamento o riproduzione sincrono, il thread chiamante attende fino a quando il metodo non restituisce, che può causare l'interruzione del disegno e di altri eventi. La chiamata di un metodo di caricamento o riproduzione asincrona consentirà al thread chiamante di continuare senza interruzioni. Per altre informazioni sulle chiamate di metodo asincrone, vedere Procedura: Eseguire un'operazione in background.
Al termine del caricamento di un SoundPlayer file di .wav, genera l'evento LoadCompleted . È possibile esaminare l'oggetto AsyncCompletedEventArgs nel gestore eventi per determinare se il carico è riuscito o non riuscito. L'evento SoundLocationChanged viene generato quando l'origine audio è impostata su un nuovo percorso o URL di file. L'evento StreamChanged viene generato quando l'origine audio è impostata su un nuovo Streamoggetto . Per altre informazioni su come gestire gli eventi, vedere la gestione e generazione di eventi.
Per altre informazioni su , vedere Panoramica della SoundPlayerclasse SoundPlayer.
Nota
La SoundPlayer classe non può riprodurre altri tipi di file, ad esempio .wma o .mp3. Se si desidera riprodurre altri tipi di file, è possibile usare il controllo Lettore multimediale Windows. Per altre informazioni, vedere Uso del controllo Lettore multimediale Windows in una soluzione .NET Framework e informazioni di riferimento sul modello a oggetti Lettore multimediale Windows per Visual Basic .NET e C# in Lettore multimediale Windows SDK.
Costruttori
SoundPlayer() |
Inizializza una nuova istanza della classe SoundPlayer. |
SoundPlayer(SerializationInfo, StreamingContext) |
Obsoleti.
Inizializza una nuova istanza della classe SoundPlayer. |
SoundPlayer(Stream) |
Inizializza una nuova istanza della classe SoundPlayer e associa il file wav alla classe Stream specificata. |
SoundPlayer(String) |
Inizializza una nuova istanza della classe SoundPlayer e associa il file wav specificato. |
Proprietà
CanRaiseEvents |
Ottiene un valore che indica se il componente può generare un evento. (Ereditato da Component) |
Container |
Ottiene l'oggetto IContainer che contiene Component. (Ereditato da Component) |
DesignMode |
Ottiene un valore che indica se il Component si trova in modalità progettazione. (Ereditato da Component) |
Events |
Ottiene l'elenco dei gestori eventi allegati a questo Component. (Ereditato da Component) |
IsLoadCompleted |
Ottiene un valore indicante se il caricamento di un file wav è stato completato correttamente. |
LoadTimeout |
Ottiene o imposta il tempo, in millisecondi, in cui il file wav deve essere caricato. |
Site |
Ottiene o imposta l'oggetto ISite di Component. (Ereditato da Component) |
SoundLocation |
Ottiene o imposta il percorso di file o l'URL del file wav da caricare. |
Stream |
Ottiene o imposta la classe Stream da cui caricare il file wav. |
Tag |
Ottiene o imposta la classe Object che contiene i dati relativi alla classe SoundPlayer. |
Metodi
CreateObjRef(Type) |
Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto. (Ereditato da MarshalByRefObject) |
Dispose() |
Rilascia tutte le risorse usate da Component. (Ereditato da Component) |
Dispose(Boolean) |
Rilascia le risorse non gestite usate da Component e, facoltativamente, le risorse gestite. (Ereditato da Component) |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetLifetimeService() |
Obsoleti.
Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza. (Ereditato da MarshalByRefObject) |
GetService(Type) |
Consente di restituire un oggetto che rappresenta un servizio fornito da Component o dal relativo Container. (Ereditato da Component) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
InitializeLifetimeService() |
Obsoleti.
Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza. (Ereditato da MarshalByRefObject) |
Load() |
Carica un suono in modo sincrono. |
LoadAsync() |
Carica un file wav da un flusso o da una risorsa Web mediante un nuovo thread. |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
MemberwiseClone(Boolean) |
Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject) |
OnLoadCompleted(AsyncCompletedEventArgs) |
Genera l'evento LoadCompleted. |
OnSoundLocationChanged(EventArgs) |
Genera l'evento SoundLocationChanged. |
OnStreamChanged(EventArgs) |
Genera l'evento StreamChanged. |
Play() |
Riproduce il file wav mediante un nuovo thread e, se il file wav non è stato caricato, prima lo carica. |
PlayLooping() |
Riproduce e riproduce a ciclo continuo il file wav mediante un nuovo thread e, se il file wav non è stato caricato, prima lo carica. |
PlaySync() |
Riproduce il file wav e, se il file wav non è stato caricato, prima lo carica. |
Stop() |
Arresta la riproduzione del suono, se in corso. |
ToString() |
Restituisce un oggetto String che contiene il nome dell'eventuale oggetto Component. Questo metodo non deve essere sottoposto a override. (Ereditato da Component) |
Eventi
Disposed |
Si verifica quando il componente viene eliminato da una chiamata al metodo Dispose(). (Ereditato da Component) |
LoadCompleted |
Si verifica dopo che un file wav è stato caricato con esito positivo o negativo. |
SoundLocationChanged |
Si verifica dopo che è stato impostato un nuovo percorso di origine audio per questa classe SoundPlayer. |
StreamChanged |
Si verifica dopo che è stata impostata una nuova origine audio Stream per questa classe SoundPlayer. |
Implementazioni dell'interfaccia esplicita
ISerializable.GetObjectData(SerializationInfo, StreamingContext) |
Per una descrizione di questo membro, vedere il metodo GetObjectData(SerializationInfo, StreamingContext). |