SoundPlayer 類別

定義

控制 .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
繼承
屬性
實作

範例

下列程式碼範例示範如何使用 SoundPlayer 類別從本機路徑或統一資源識別項 (URI) 播放 .wav 檔案。

#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

備註

類別 SoundPlayer 提供簡單的介面來載入和播放 .wav 檔案。 類別 SoundPlayer 支援從檔案路徑、URL、 Stream 包含 .wav 檔案的 ,或包含 .wav 檔案的內嵌資源載入 .wav 檔案。

若要使用 SoundPlayer 類別播放音效,請使用 .wav 檔案的路徑設定 , SoundPlayer 並呼叫其中一個播放方法。 您可以使用其中一個建構函式或設定 SoundLocationStream 屬性,來識別要播放的 .wav 檔案。 您可以在使用其中一個載入方法進行播放之前載入檔案,或者載入可以延後,直到呼叫其中一個播放方法為止。 設定 SoundPlayer 為從 Stream 或 URL 載入 .wav 檔案的 ,必須先將 .wav 檔案載入記憶體,才能開始播放。

您可以同步或非同步載入或播放 .wav 檔案。 如果您呼叫同步載入或播放方法,呼叫執行緒會等到方法傳回,這可能會導致繪製和其他事件中斷。 呼叫非同步載入或播放方法可讓呼叫執行緒繼續,而不會中斷。 如需非同步方法呼叫的詳細資訊,請參閱 How to: Run an Operation in the Background

SoundPlayer當 完成載入 .wav 檔案之後,就會引發 LoadCompleted 事件。 您可以在事件處理常式中檢查 , AsyncCompletedEventArgs 以判斷負載是否成功或失敗。 當 SoundLocationChanged 音訊來源設定為新的檔案路徑或 URL 時,就會引發 事件。 當 StreamChanged 音訊來源設定為新的 Stream 時,就會引發 事件。 如需如何處理事件的詳細資訊,請參閱 處理和引發事件

如需 的詳細資訊 SoundPlayer ,請參閱 SoundPlayer 類別概觀

注意

類別 SoundPlayer 無法播放其他檔案類型,例如 .wma 或 .mp3。 如果您想要播放其他檔案類型,可以使用 Windows 媒體播放機 控制項。 如需詳細資訊,請參閱在.NET Framework Solution 中使用 Windows 媒體播放機 控制項,以及 Windows 媒體播放機 SDK 中Visual Basic .NET 和 C# 的Windows 媒體播放機物件模型參考

建構函式

SoundPlayer()

初始化 SoundPlayer 類別的新執行個體。

SoundPlayer(SerializationInfo, StreamingContext)
已淘汰.

初始化 SoundPlayer 類別的新執行個體。

SoundPlayer(Stream)

初始化 SoundPlayer 類別的新執行個體,並將 .wav 檔附加到指定的 Stream 中。

SoundPlayer(String)

初始化 SoundPlayer 類別的新執行個體,並附加指定的 .wav 檔。

屬性

CanRaiseEvents

取得值,指出元件是否能引發事件。

(繼承來源 Component)
Container

取得包含 IContainerComponent

(繼承來源 Component)
DesignMode

取得值,指出 Component 目前是否處於設計模式。

(繼承來源 Component)
Events

取得附加在這個 Component 上的事件處理常式清單。

(繼承來源 Component)
IsLoadCompleted

取得值,指出 .wav 檔的載入是否順利完成。

LoadTimeout

取得或設定時間,以毫秒為單位,表示 .wav 檔載入所須的時間。

Site

取得或設定 ComponentISite

(繼承來源 Component)
SoundLocation

取得或設定要載入之 .wav 檔的檔案路徑或 URL。

Stream

取得或設定要由其載入 .wav 檔的 Stream

Tag

取得或設定 Object,包含有關 SoundPlayer 的資料。

方法

CreateObjRef(Type)

建立包含所有相關資訊的物件,這些資訊是產生用來與遠端物件通訊的所需 Proxy。

(繼承來源 MarshalByRefObject)
Dispose()

釋放 Component 所使用的所有資源。

(繼承來源 Component)
Dispose(Boolean)

釋放 Component 所使用的 Unmanaged 資源,並選擇性地釋放 Managed 資源。

(繼承來源 Component)
Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetLifetimeService()
已淘汰.

擷取控制這個執行個體存留期 (Lifetime) 原則的目前存留期服務物件。

(繼承來源 MarshalByRefObject)
GetService(Type)

傳回表示 Component 或其 Container 所提供之服務的物件。

(繼承來源 Component)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
InitializeLifetimeService()
已淘汰.

取得存留期服務物件,以控制這個執行個體的存留期原則。

(繼承來源 MarshalByRefObject)
Load()

同步載入音效。

LoadAsync()

使用新的執行緒,從資料流或 Web 資源載入 .wav 檔。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
MemberwiseClone(Boolean)

建立目前 MarshalByRefObject 物件的淺層複本。

(繼承來源 MarshalByRefObject)
OnLoadCompleted(AsyncCompletedEventArgs)

引發 LoadCompleted 事件。

OnSoundLocationChanged(EventArgs)

引發 SoundLocationChanged 事件。

OnStreamChanged(EventArgs)

引發 StreamChanged 事件。

Play()

使用新執行緒播放 .wav 檔,如果 .wav 檔還未載入則先將其載入。

PlayLooping()

使用新執行緒重複循環播放 .wav 檔,如果 .wav 檔還未載入則先將其載入。

PlaySync()

播放 .wav 檔案,如果 .wav 檔案還未載入則先將其載入。

Stop()

如果已開始播放則停止播放音效。

ToString()

傳回任何包含 Component 名稱的 String。 不應覆寫此方法。

(繼承來源 Component)

事件

Disposed

Dispose() 方法的呼叫處置元件時,就會發生。

(繼承來源 Component)
LoadCompleted

當.wav 檔載入成功或載入失敗時都會發生。

SoundLocationChanged

當這個 SoundPlayer 的新音效來源路徑設定後即會發生。

StreamChanged

當這個 Stream 的新 SoundPlayer 音效來源設定後即會發生。

明確介面實作

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

如需這個成員的描述,請參閱 GetObjectData(SerializationInfo, StreamingContext) 方法。

適用於

另請參閱