SoundPlayer Klasse

Definition

Steuert die Wiedergabe eines Sounds aus einer WAV-Datei.

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
Vererbung
Attribute
Implementiert

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung der SoundPlayer -Klasse zum Wiedergeben von WAV-Dateien aus einem lokalen Pfad oder einem Uniform Resource Identifier (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

Hinweise

Die SoundPlayer -Klasse bietet eine einfache Schnittstelle zum Laden und Wiedergeben einer WAV-Datei. Die SoundPlayer -Klasse unterstützt das Laden einer WAV-Datei aus einem Dateipfad, einer URL, einer Stream ,wav-Datei oder einer eingebetteten Ressource, die eine WAV-Datei enthält.

Um einen Sound mit der SoundPlayer -Klasse wiederzugeben, konfigurieren Sie einen SoundPlayer mit einem Pfad zur WAV-Datei, und rufen Sie eine der Wiedergabemethoden auf. Sie können die wav-Datei identifizieren, die wiedergegeben werden soll, indem Sie einen der Konstruktoren verwenden oder entweder die SoundLocation Eigenschaft oder Stream festlegen. Die Datei kann vor der Wiedergabe mit einer der Lademethoden geladen werden, oder das Laden kann zurückgestellt werden, bis eine der Wiedergabemethoden aufgerufen wird. Eine SoundPlayer zum Laden einer WAV-Datei aus einer Stream ODER URL konfigurierte muss die WAV-Datei in den Arbeitsspeicher laden, bevor die Wiedergabe beginnt.

Sie können eine WAV-Datei synchron oder asynchron laden oder wiedergeben. Wenn Sie eine synchrone Lade- oder Wiedergabemethode aufrufen, wartet der aufrufende Thread, bis die Methode zurückgegeben wird, was dazu führen kann, dass das Malen und andere Ereignisse unterbrochen werden. Durch Das Aufrufen einer asynchronen Lade- oder Wiedergabemethode kann der aufrufende Thread ohne Unterbrechung fortgesetzt werden. Weitere Informationen zu asynchronen Methodenaufrufen finden Sie unter Vorgehensweise: Ausführen eines Vorgangs im Hintergrund.

Wenn das SoundPlayer Laden einer WAV-Datei abgeschlossen ist, löst es das LoadCompleted -Ereignis aus. Sie können den AsyncCompletedEventArgs in Ihrem Ereignishandler untersuchen, um festzustellen, ob die Auslastung erfolgreich war oder fehlgeschlagen ist. Das SoundLocationChanged Ereignis wird ausgelöst, wenn die Audioquelle auf einen neuen Dateipfad oder eine neue URL festgelegt ist. Das StreamChanged Ereignis wird ausgelöst, wenn die Audioquelle auf einen neuen Streamfestgelegt ist. Weitere Informationen zum Behandeln von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Weitere Informationen zu SoundPlayerfinden Sie unter Übersicht über die SoundPlayer-Klasse.

Hinweis

Die SoundPlayer -Klasse kann keine anderen Dateitypen wie wma oder .mp3 wiedergeben. Wenn Sie andere Dateitypen wiedergeben möchten, können Sie das Windows Medienwiedergabe-Steuerelement verwenden. Weitere Informationen finden Sie unter Verwenden des Windows Medienwiedergabe-Steuerelements in einer .NET Framework Projektmappe und Windows Medienwiedergabe Objektmodellreferenz für Visual Basic .NET und C# im Windows Medienwiedergabe SDK.

Konstruktoren

SoundPlayer()

Initialisiert eine neue Instanz der SoundPlayer-Klasse.

SoundPlayer(SerializationInfo, StreamingContext)
Veraltet.

Initialisiert eine neue Instanz der SoundPlayer-Klasse.

SoundPlayer(Stream)

Initialisiert eine neue Instanz der SoundPlayer-Klasse und fügt die WAV-Datei im angegebenen Stream an.

SoundPlayer(String)

Initialisiert eine neue Instanz der SoundPlayer-Klasse und fügt die angegebene WAV-Datei an.

Eigenschaften

CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
Container

Ruft die IContainer ab, die in der Component enthalten ist.

(Geerbt von Component)
DesignMode

Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet.

(Geerbt von Component)
Events

Ruft die Liste der Ereignishandler ab, die dieser Component angefügt sind.

(Geerbt von Component)
IsLoadCompleted

Ruft einen Wert ab, der angibt, ob das Laden einer WAV-Datei ordnungsgemäß abgeschlossen wurde.

LoadTimeout

Ruft die Zeitspanne (in Millisekunden) ab, in der die WAV-Datei geladen werden muss, oder legt diese fest.

Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)
SoundLocation

Ruft den Dateipfad oder die URL der zu ladenden WAV-Datei ab oder legt diesen bzw. diese fest.

Stream

Ruft den Stream ab, aus dem die WAV-Datei geladen werden soll, oder legt diesen fest.

Tag

Ruft das Object ab, das Daten über den SoundPlayer enthält, oder legt dieses fest.

Methoden

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
Dispose()

Gibt alle vom Component verwendeten Ressourcen frei.

(Geerbt von Component)
Dispose(Boolean)

Gibt die von Component verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

(Geerbt von Component)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetService(Type)

Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt.

(Geerbt von Component)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
Load()

Lädt einen Sound synchron.

LoadAsync()

Lädt eine WAV-Datei aus einem Stream oder von einer Webressource mithilfe eines neuen Threads.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

(Geerbt von MarshalByRefObject)
OnLoadCompleted(AsyncCompletedEventArgs)

Löst das LoadCompleted-Ereignis aus.

OnSoundLocationChanged(EventArgs)

Löst das SoundLocationChanged-Ereignis aus.

OnStreamChanged(EventArgs)

Löst das StreamChanged-Ereignis aus.

Play()

Lädt zunächst die WAV-Datei, sofern sie nicht bereits geladen ist, und gibt sie mithilfe eines neuen Threads wieder.

PlayLooping()

Lädt zunächst die WAV-Datei, sofern sie nicht bereits geladen ist, und gibt sie mithilfe eines neuen Threads in einer Endlosschleife wieder.

PlaySync()

Lädt zunächst die WAV-Datei, sofern sie nicht bereits geladen ist, und gibt sie wieder.

Stop()

Beendet die laufende Wiedergabe des Sounds.

ToString()

Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden.

(Geerbt von Component)

Ereignisse

Disposed

Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird.

(Geerbt von Component)
LoadCompleted

Tritt nach dem ordnungsgemäßen oder fehlgeschlagenen Laden einer WAV-Datei ein.

SoundLocationChanged

Tritt ein, wenn ein neuer Audioquellpfad für diesen SoundPlayer festgelegt wurde.

StreamChanged

Tritt ein, wenn eine neue Stream-Audioquelle für diesen SoundPlayer festgelegt wurde.

Explizite Schnittstellenimplementierungen

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Eine Beschreibung dieses Members finden Sie unter der GetObjectData(SerializationInfo, StreamingContext)-Methode.

Gilt für:

Weitere Informationen