최근 만들고 있는 프로그램에 사용할 음성재생 라이브러리를 이것저것 살펴보다가..
WMPLib, MBroMP3, DirectX.AudioVideoPlayback 이렇게 3가지를 놓고 상당한 고민을 했습니다.
이것저것 살펴본결과, 직접 구현하면서 사용하기에는 DirectX.AudioVideoPlayback이 수월해보여 이녀석으로 결정했습니다.
기념으로 DirectX.AudioVideoPlayback을 사용해서 간단하게 음성파일 재생을 구현해 보도록하겠습니다.
Microsoft.DirectX.AudioVideoPlayback을 사용하면 생각보다 간편하게 기능을 구현할 수 있습니다만..
.NET 1.1에서 구현된 녀석들을 .NET 2.0에서 사용하면 등장하는 문제인 LoaderLock 버그가 여기에도 존재합니다.
차근차근 구현하고.. 이 LoaderLock이 등장하지 않도록 하는 것까지 오늘은 알아보도록 하겠습니다.
우선 가장 먼저 해야할 일은 이 녀석을 사용하기 위한 준비과정이 되겠죠?
아래 그림처럼 참조추가의 .NET탭에서 Microsoft.DirectX.AudioVideoPlayback 항목을 선택해줍니다.
그러면 솔루션 탐색기에서 추가된 참조를 확인할 수 있습니다.
이녀석을 더블클릭해서 개체 브라우저로 잠시 우리가 사용할 녀석을 확인해보도록하지요.
이처럼 설명도 모두 나와있으니, 참고하시면 되겠습니다.
기본적으로 필요한 메소드와 프로퍼티는 모두 제공하고 있으므로 생각보다 쉬울 것 같습니다.
간단하게 폼이 로드되면 재생되는 코드를 만들어 볼까요?
그림과 같이 사용하시면 해당 경로의 음악파일을 자동으로 재생합니다. 두 번째 인자를 false로 주면 자동 재생은 안되죠.
이 외에 필요시에는 Play()나 Open()메소드를 이용하시면 되겠습니다.
이렇게 했지만.. 아마도 막상 시작을하면 LoaderLock예외가 발생하면서 프로그램이 중단될 것입니다.
아래와 같이 하면.. 완전히 해결하는 것은 아니지만, 프로그램이 죽지않게 할 수 있습니다.
(제가 알고 있는 완벽하게 해결하는 방법은 .Net Framework 1.1을 설치하는 것입니다.)
디버그 -> 예외 -> Managed Debugging Assistant -> LoaderLock의 Throw속성을 체크해제합니다.
LoaderLock예외를 이렇게 처리하고나면 이녀석을 컨트롤과 연결시켜서 사용자의 요구에 따라서 동작하는
재생프로그램을 만들고 싶으실지도 모르겠습니다.
재생시간이나 볼륨을 TrackBar와 연동시키고 싶다면.. TrackBar를 생성하고 TrackBar의 ValueChanged이벤트가
발생했을 때, 해당 Value를 받아와서 수행시키게하고... 재생, 중지등에 대한 적절한 이미지를 만들어 주고, 이 녀석들에 대한 Click이벤트를 Stop(), Pause()등의 메소드들과 연결하시면 되겠습니다.
문제는 재생중에 재생시간에 대한 TrackBar를 움직여야 한다는 점인데요. 이 부분은 쓰레드로 해결을 하는 수밖에 없겠지요.
Invoke를 사용해서 한다면 특별한 문제점은 없을거라고 생각합니다만..
처음에 언급했던 너무 완벽한 버그인 LoaderLock때문에 문제점이 발생하지 않을지는 저도 해보아야 알것 같습니다.
이 부분은 해보고 빠른 시일내에 이 글을 수정하는 식으로 업데이트하도록 하겠습니다.
-> 확인결과 이상없이 잘 수행됩니다.
이로써 간단하게 음악파일을 재생할 수 있는 기능을 살펴보았습니다.
[출처] 〃C# DirectX.AudioVideoPlayback를 이용한 음성파일 재생.|작성자 Chuls