Code Bye

SoundPlayer控制 .wav 文件中的声音播放

SoundPlayer 类提供了加载和播放 .wav 文件的简单界面。SoundPlayer 类支持从文件路径、URL、包含 .wav 文件的 Stream 或包含 .wav 文件的嵌入资源中加载 .wav 文件。

要使用 SoundPlayer 类播放声音,请用 .wav 文件的路径配置 SoundPlayer 并调用某个播放方法。可以使用某个构造函数或通过设置 SoundLocationStream 属性来标识要播放的 .wav 文件。可以在播放前使用某个加载方法加载文件,或者将加载推迟到调用某个播放方法时。被配置为从 Stream 或 URL 中加载 .wav 文件的 SoundPlayer 必须在播放开始前将 .wav 文件加载到内存中。

可以同步或异步地加载或播放 .wav 文件。如果调用同步加载或播放方法,调用线程将一直等到方法返回,这可能会导致绘制和其他事件中断。调用异步加载或播放方法则允许调用线程继续执行,而不会中断。How to: Run an Operation in the Background.’ xml:space=”preserve”>有关异步方法调用的更多信息,请参见如何:在后台运行操作

SoundPlayer 加载完 .wav 文件后,它会引发 LoadCompleted 事件。可以检查事件处理程序中的 AsyncCompletedEventArgs,确定加载是成功还是失败。当音频源设置为新文件路径或 URL 时,引发 SoundLocationChanged 事件。当音频源设置为新 Stream 时,引发 StreamChanged 事件。

说明:

SoundPlayer 类不能播放其他文件类型,如 .wma 或 .mp3。如果想播放其他文件类型,可以使用 Windows Media Player 控件。有关更多信息,请参见 Windows 媒体播放器 SDK 中的 Using the Windows Media Player Control in a .NET Framework Solution(在 .NET 解决方案中使用 Windows 媒体播放器控件)和 Windows Media Player Object Model Reference for Visual Basic .NET and C#(Visual Basic .NET 和 C# 的 Windows 媒体播放器对象模型参考)。

public partial class SoundTestForm : 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 ((statusMessage != null) && (statusMessage != String.Empty))

{

// …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);

}

 

//#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);

 

}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SoundPlayer控制 .wav 文件中的声音播放