윈도우 표준 사운드 파일 형식으로 WAVE 가 있다. .wav 형식의 확장자를 사용하며, 시스템이 사용하는 WAVE 파일은 C:\Windows\Media 폴더에 보면 있다.
 
이러한 .wav 파일을 재생하는 방법이 .NET Framework 2.0 에 추가되었다. SoundPlayer 라는 클래스를 사용하고, 이 클래스를 이용하여 사운드를 재생하는 방법을 소개한다.
 
 
동기적으로 .wav 파일 재생하기
 
동기적으로 .wav 파일을 재생하려면, SoundPlayer 의 PlaySync 메서드를 호출하면 된다. 생성자에 .wav 파일의 경로를 적어주는 것으로 객체를 생성하면 된다.
 
다음은 PlsySync 를 이용한 .wav 파일 재생 샘플이다.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Media;
 
namespace ConsoleTest2
{
         class Program
         {
                  static void Main(string[] args)
                  {
                           SoundPlayer player = new SoundPlayer(@"C:\Windows\Media\tada.wav");
                           player.PlaySync();
 
                           Console.WriteLine("재생 완료");
                  }
         }
}
 
[예제1] 동기적으로 .wav 파일을 재생한다
 
샘플을 실행하면 “타다~~” 라는 음향이 들리고, 재생이 완료되면 “재생 완료” 라는 텍스트가 출력된다.
즉, PlaySync 메서드의 호출로 재생이 완료되기 전 까지는 다음 코드가 실행되지 않는다.
 
 
비동기로 .wav 파일 재생하기
 
비동기적으로 사운드를 재생하기 이해서 LoadAsync 와 Play 메서드를 제공한다. .wav 파일을 완전히 로드하기 위해 약간의 딜레이가 필요하고, 사운드 파일이 완전히 로드 되었다는 이벤트로 LoadCompleted 이벤트를 제공한다.
 
using System;
using System.Collections.Generic;
using System.Text;
using System.Media;
 
namespace ConsoleTest2
{
         class Program
         {
                  static SoundPlayer player = new SoundPlayer(@"C:\Windows\Media\tada.wav");
 
                  static void Main(string[] args)
                  {
                           player.LoadCompleted += new System.ComponentModel.AsyncCompletedEventHandler(player_LoadCompleted);
                           player.LoadAsync();
 
                           Console.WriteLine(".WAV 파일이 로드가 되고 있습니다.");
                           System.Threading.Thread.Sleep(1000);
                           Console.WriteLine("소리를 재생합니다.");
                  }
 
                  static void player_LoadCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
                  {
                           if( player.IsLoadCompleted )
                                   player.Play();
                  }
         }
}
 
[예제2] 비동기적으로 .wav 파일을 재생한다.
 
첫번쩨 [예제1] 과는 약간 다른 결과이다. [예제1] 에서는 재생이 완료되기전까지 다음줄의 코드가 실행되지 않았다.
 
하지만, [예제2]의 비동기 재생에서는 LoadAsync 메서드로 비동기적으로 사운드 파일을 읽어, LoadCompleted 이벤트가 발생하는 시점에 사운드가 재생된다.
Console Project 이므로, 어플케이션 쓰레드가 종료되는 것을 방지하기 위해
 
Thread.Sleep(1000);
 
을 하였다.
 
.NET Framework 2.0 이 제공하는 SoundPlayer 의 몇가지 메서드나 이벤트를 살펴보면, 안타깝게도 재생이 완료되는 시점의 이벤트가 제공되지 않는 것이 아쉽다.
 
.NET Framework 3.5 에서의 SoundPlayer 클래스를 살펴봤지만, 앞으로도 크게 변화는 없을 것 같다.

# 위 글은 http://www.atmarkit.co.jp/ 를 토대로 새로이 각색하였습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 땡초 POWERUMC

댓글을 달아 주세요