티스토리 뷰
윈도우 표준 사운드 파일 형식으로 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/ 를 토대로 새로이 각색하였습니다.
# 위 글은 http://www.atmarkit.co.jp/ 를 토대로 새로이 각색하였습니다.
'.NET > C#' 카테고리의 다른 글
XDocument 클래스와 LINQ (0) | 2007.08.30 |
---|---|
확장 메서드( Extension Method ) (0) | 2007.08.29 |
[제네릭 4편] 제약이 붙은 제네릭 클래스 (0) | 2007.07.04 |
[제네릭 3편] Hashtable 클래스와 Dictionary 클래스의 비호환성 (0) | 2007.07.02 |
[제네릭 2편] 제네릭 컬렉션의 사용법 2007-07-01 (0) | 2007.07.01 |
- TAG
- .NET Framework
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- 2,841,738
- Today
- 3
- Yesterday
- 47
링크
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
TAG
- 비주얼 스튜디오
- 땡초
- LINQ
- github
- Visual Studio 2008
- ASP.NET
- Windows 8
- c#
- Silverlight
- .NET Framework 4.0
- ALM
- umc
- Managed Extensibility Framework
- Visual Studio
- testing
- Team Foundation Server 2010
- POWERUMC
- Visual Studio 2010
- TFS 2010
- mono
- 팀 파운데이션 서버
- .NET
- TFS
- monodevelop
- 비주얼 스튜디오 2010
- 엄준일
- Visual Studio 11
- test
- Team Foundation Server
- MEF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
- 2020/05 (1)
- 2019/10 (3)
- 2018/11 (1)
- 2018/08 (2)
- 2017/04 (1)
- 2017/01 (2)
- 2016/11 (2)
- 2016/08 (1)
- 2016/05 (1)
- 2016/04 (2)
- 2016/02 (2)
- 2016/01 (1)
- 2015/05 (1)
- 2015/04 (2)
- 2015/03 (1)
- 2015/02 (1)
- 2015/01 (1)
- 2014/11 (1)
- 2014/09 (2)
- 2014/08 (2)
- 2014/05 (2)
- 2014/04 (3)
- 2014/03 (2)
- 2014/02 (2)
- 2014/01 (4)
- 2013/12 (2)
- 2013/11 (1)
- 2013/10 (2)
- 2013/09 (6)
- 2013/08 (3)