방법: 플랫폼 호출을 사용하여 웨이브 파일 재생(C# 프로그래밍 가이드)
다음 C# 코드 예제에서는 플랫폼 호출 서비스를 사용하여 Windows 운영 체제에서 웨이브 사운드 파일을 재생하는 방법을 보여 줍니다.
예제
이 예제 코드에서는 DllImport를 사용하여 winmm.dll의 PlaySound 메서드 진입점을 Form1 PlaySound()로 가져옵니다.이 예제에는 단추 하나가 있는 간단한 Windows Form이 있습니다.단추를 클릭하면 재생할 파일을 열 수 있도록 표준 Windows OpenFileDialog 대화 상자가 열립니다.웨이브 파일을 선택하면 winmm.DLL 어셈블리의 PlaySound() 메서드를 통해 파일이 재생됩니다.winmm.dll의 PlaySound 메서드에 대한 자세한 내용은 Using the PlaySound function with Waveform-Audio Files를 참조하십시오.확장명이 .wav인 파일을 찾아 선택한 다음 열기를 클릭하여 웨이브 파일을 플랫폼 호출을 통해 재생합니다.선택한 파일의 전체 경로가 텍스트 상자에 표시됩니다.
파일 열기 대화 상자는 확장명이 .wav인 파일만 표시하기 위해 다음과 같은 필터 설정을 사용하여 필터링됩니다.
dialog1.Filter = "Wav Files (*.wav)|*.wav";
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WinSound
{
public partial class Form1 : Form
{
private TextBox textBox1;
private Button button1;
public Form1() //constructor
{
InitializeComponent();
}
[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags);
[System.Flags]
public enum PlaySoundFlags : int
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
private void button1_Click (object sender, System.EventArgs e)
{
OpenFileDialog dialog1 = new OpenFileDialog();
dialog1.Title = "Browse to find sound file to play";
dialog1.InitialDirectory = @"c:\";
dialog1.Filter = "Wav Files (*.wav)|*.wav";
dialog1.FilterIndex = 2;
dialog1.RestoreDirectory = true;
if(dialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = dialog1.FileName;
PlaySound (dialog1.FileName, new System.IntPtr(), PlaySoundFlags.SND_SYNC);
}
}
}
}
코드 컴파일
코드를 컴파일하려면
Visual Studio에서 새 C# Windows 응용 프로그램 프로젝트를 만들고 이름을 WinSound로 지정합니다.
위 코드를 복사하여 Form1.cs 파일의 내용에 붙여넣습니다.
다음 코드를 복사하여 Form1.Designer.cs 파일의 InitializeComponent() 메서드에서 기존 코드 뒤에 붙여넣습니다.
this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(192, 40); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(88, 24); this.button1.TabIndex = 0; this.button1.Text = "Browse"; this.button1.Click += new System.EventHandler(this.button1_Click); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(8, 40); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(168, 20); this.textBox1.TabIndex = 1; this.textBox1.Text = "FIle path"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.textBox1); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Platform Invoke WinSound C#"; this.ResumeLayout(false); this.PerformLayout();
코드를 컴파일하고 실행합니다.
보안
자세한 내용은 .NET Framework Security를 참조하십시오.