You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
212 lines
7.0 KiB
C#
212 lines
7.0 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.IO;
|
|
using Microsoft.DirectX;
|
|
using Microsoft.DirectX.DirectSound;
|
|
using Buffer = Microsoft.DirectX.DirectSound.SecondaryBuffer;
|
|
|
|
public class MainForm : Form
|
|
{
|
|
private System.ComponentModel.Container components = null;
|
|
private Button btnSoundfile;
|
|
private Label lblFilename;
|
|
private CheckBox cbLoopCheck;
|
|
private Button btnPlay;
|
|
private Button btnStop;
|
|
private Button btnCancel;
|
|
|
|
private SecondaryBuffer ApplicationBuffer = null;
|
|
private Device ApplicationDevice = null;
|
|
private string PathSoundFile = string.Empty;
|
|
|
|
public static int Main(string[] Args)
|
|
{
|
|
Application.Run(new MainForm());
|
|
return 0;
|
|
}
|
|
|
|
protected override void Dispose( bool disposing )
|
|
{
|
|
if(disposing)
|
|
{
|
|
if (null != components)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
public MainForm()
|
|
{
|
|
//
|
|
// Required for Windows Form Designer support
|
|
//
|
|
InitializeComponent();
|
|
}
|
|
#region InitializeComponent code
|
|
private void InitializeComponent()
|
|
{
|
|
this.btnSoundfile = new System.Windows.Forms.Button();
|
|
this.lblFilename = new System.Windows.Forms.Label();
|
|
this.cbLoopCheck = new System.Windows.Forms.CheckBox();
|
|
this.btnPlay = new System.Windows.Forms.Button();
|
|
this.btnStop = new System.Windows.Forms.Button();
|
|
this.btnCancel = new System.Windows.Forms.Button();
|
|
this.SuspendLayout();
|
|
//
|
|
// btnSoundfile
|
|
//
|
|
this.btnSoundfile.Location = new System.Drawing.Point(10, 11);
|
|
this.btnSoundfile.Name = "btnSoundfile";
|
|
this.btnSoundfile.Size = new System.Drawing.Size(69, 21);
|
|
this.btnSoundfile.TabIndex = 0;
|
|
this.btnSoundfile.Text = "Sound &file...";
|
|
this.btnSoundfile.Click += new System.EventHandler(this.btnSoundfile_Click);
|
|
//
|
|
// lblFilename
|
|
//
|
|
this.lblFilename.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
|
|
this.lblFilename.Location = new System.Drawing.Point(94, 11);
|
|
this.lblFilename.Name = "lblFilename";
|
|
this.lblFilename.Size = new System.Drawing.Size(345, 21);
|
|
this.lblFilename.TabIndex = 1;
|
|
this.lblFilename.Text = "No file loaded.";
|
|
this.lblFilename.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
|
//
|
|
// cbLoopCheck
|
|
//
|
|
this.cbLoopCheck.Enabled = false;
|
|
this.cbLoopCheck.Location = new System.Drawing.Point(9, 44);
|
|
this.cbLoopCheck.Name = "cbLoopCheck";
|
|
this.cbLoopCheck.Size = new System.Drawing.Size(87, 16);
|
|
this.cbLoopCheck.TabIndex = 2;
|
|
this.cbLoopCheck.Text = "&Loop sound";
|
|
//
|
|
// btnPlay
|
|
//
|
|
this.btnPlay.Enabled = false;
|
|
this.btnPlay.Location = new System.Drawing.Point(104, 48);
|
|
this.btnPlay.Name = "btnPlay";
|
|
this.btnPlay.TabIndex = 3;
|
|
this.btnPlay.Text = "&Play";
|
|
this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);
|
|
//
|
|
// btnStop
|
|
//
|
|
this.btnStop.Enabled = false;
|
|
this.btnStop.Location = new System.Drawing.Point(176, 48);
|
|
this.btnStop.Name = "btnStop";
|
|
this.btnStop.TabIndex = 4;
|
|
this.btnStop.Text = "&Stop";
|
|
this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
|
|
//
|
|
// btnCancel
|
|
//
|
|
this.btnCancel.Location = new System.Drawing.Point(364, 48);
|
|
this.btnCancel.Name = "btnCancel";
|
|
this.btnCancel.TabIndex = 5;
|
|
this.btnCancel.Text = "E&xit";
|
|
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
|
|
//
|
|
// MainForm
|
|
//
|
|
this.AcceptButton = this.btnSoundfile;
|
|
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
|
this.ClientSize = new System.Drawing.Size(450, 77);
|
|
this.Controls.AddRange(new System.Windows.Forms.Control[] {
|
|
this.btnSoundfile,
|
|
this.lblFilename,
|
|
this.cbLoopCheck,
|
|
this.btnPlay,
|
|
this.btnStop,
|
|
this.btnCancel});
|
|
this.Name = "MainForm";
|
|
this.Text = "PlaySound";
|
|
this.Load += new System.EventHandler(this.MainForm_Load);
|
|
this.ResumeLayout(false);
|
|
|
|
}
|
|
#endregion
|
|
|
|
private void btnCancel_Click(object sender, System.EventArgs e)
|
|
{
|
|
Close();
|
|
}
|
|
|
|
private void btnStop_Click(object sender, System.EventArgs e)
|
|
{
|
|
if(null != ApplicationBuffer)
|
|
ApplicationBuffer.Stop();
|
|
}
|
|
|
|
private void btnSoundfile_Click(object sender, System.EventArgs e)
|
|
{
|
|
OpenFileDialog ofd = new OpenFileDialog();
|
|
|
|
// if(string.Empty == PathSoundFile)
|
|
// PathSoundFile = DXUtil.SdkMediaPath;
|
|
|
|
ofd.InitialDirectory = PathSoundFile;
|
|
ofd.Filter= "Wave files(*.wav)|*.wav";
|
|
|
|
if( DialogResult.Cancel == ofd.ShowDialog() )
|
|
return;
|
|
|
|
if(LoadSoundFile(ofd.FileName))
|
|
{
|
|
PathSoundFile = Path.GetDirectoryName(ofd.FileName);
|
|
lblFilename.Text = Path.GetFileName(ofd.FileName);
|
|
EnablePlayUI(true);
|
|
}
|
|
else
|
|
{
|
|
lblFilename.Text = "No file loaded.";
|
|
EnablePlayUI(false);
|
|
}
|
|
}
|
|
|
|
private bool LoadSoundFile(string name)
|
|
{
|
|
try
|
|
{
|
|
ApplicationBuffer = new SecondaryBuffer(name, ApplicationDevice);
|
|
}
|
|
catch(SoundException)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private void EnablePlayUI(bool enable)
|
|
{
|
|
if (enable)
|
|
{
|
|
cbLoopCheck.Enabled = true;
|
|
btnCancel.Enabled = true;
|
|
btnPlay.Enabled = true;
|
|
btnStop.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
cbLoopCheck.Enabled = false;
|
|
btnCancel.Enabled = false;
|
|
btnPlay.Enabled = false;
|
|
btnStop.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void MainForm_Load(object sender, System.EventArgs e)
|
|
{
|
|
ApplicationDevice = new Device();
|
|
ApplicationDevice.SetCooperativeLevel(this, CooperativeLevel.Priority);
|
|
}
|
|
|
|
private void btnPlay_Click(object sender, System.EventArgs e)
|
|
{
|
|
if(null != ApplicationBuffer)
|
|
ApplicationBuffer.Play(0, (cbLoopCheck.Checked ? BufferPlayFlags.Looping : BufferPlayFlags.Default));
|
|
}
|
|
}
|