티스토리 뷰

오랜만에 다시 글을 남겨봅니다.

이번 포스트에서 다뤄볼 내용은 버튼 이벤트를 통한 음원 재생과 동영상 재생에 대한 겁니다. 물론 기본적인 WPF 지식만 있으면 충분히 구현됩니다. 페졸드씨의 Programming Windows 에서도 Hello Windows 다음 내용으로 몇 줄에 걸쳐서 간단하게 음원 재생을 하는 방법에 대해서 다루고 있습니다. 우선은 그 내용부터 살펴보겠습니다.

 메트로 스타일 또는 WPF 용 어플에서 미디어를 재생하려면 MediaElement라는 개체를 사용합니다. 페졸드씨의 예제를 그대로 가져오겠습니다. 기존 CP 상에서는 MediaPlayer를 사용할 수 있게되었는데 RP로 넘어오면서 MediaPlayer는 WPF 데스크탑 용 어플을 만들때만 쓸 수 있는 요소가 되었고 메트로 스타일에서는 MediaElement로 바뀌었습니다. 음원을 재생하려면 다음과 같이 하면 됩니다.

 

 

지금 상태는 로컬에 있는 음원이 아닌 온라인상의 녹음 파일을 재생하는 형태가 되겠습니다. 이렇게 된다면 인터넷이 연결된 상태라면 찰스 페졸드씨의 음성을 생생하게 들으실 겁니다. 한번 보겠습니다.

 

 

동영상도 똑같습니다. 그냥 소스에 인터넷 주소만 박으면 됩니다.

 

 

페졸드씨네 홈페이지가 조금 느린거 같습니다. 동영상이 바로 재생되지 않네요. 분명 실행시키면 젊게 사시는 페졸드씨의 영상을 보실 수 있을겁니다.

 

자 여기까지 진행하는 뭔가 이상하지 않나요? 지금 소스의 원천은 인터넷 자료입니다. 그런데 실제로 음원이 나오기까지는 동작을 제대로 하고 있는 건지를 확인할 수가 없습니다. 특히 인터넷이 연결되지 않은 상태에서 이걸 알리는 경고 메세지가 없다면 유저는 될때까지 한없이 기다리겠지요. 그래서 이를 위해서 간단한  MessageDialog를 삽입하는 방법에 대해서 소개해드리고자 합니다. 일단 테스트를 위해서 xaml상은 다음과 같이 처리해줍니다.

 

 

이렇게 해야 인터넷 소스의 영향을 받는지 안 받는지를 확인할 수 있습니다. 그리고 코드단으로 넘어가야 하는데 몇가지 삽입해줘야할 네임스페이스가 있습니다.

 

바로 마지막 단에 있는 Networking.Connectivity입니다. 이걸 써야 인터넷 연결이 됬을때 생성되는 프로파일을 이 코드단에서 사용할 수 있습니다.

 이제는 MainWindow의 실행부분인 OnNavigateTo안을 정리해야 하는데 우선 말씀드릴 것은 이 MessageDialog 자체가 비동기식으로 움직인다는 겁니다. 그래서 뒤에 보면 나오겠지만 출력할때 쓰는 메서드가 ShowAsync()로 나타납니다. 한번 생각해보시면 메시지 다이얼로그 자체가 어떤 테스크를 따라서 발생하는 것이 아니라 특징 상황일때 그 즉시 나타나야 하는 요소입니다. 따라서 동기식으로 처리된다면 그 순간에 어떤 테스크가 걸려있다면 다이얼로그가 제대로 안뜨겠지요. 이런 요소도 Windows 8에 들어오면서 고려된 점입니다. 아무튼 우선은 프로파일을 정의해줘야겠지요.

 

만약 인터넷이 연결되어 있지 않다면 해당 프로파일은 비어있는 상태일 겁니다. 그래서 이에 대한 조건문을 구성해줍니다.

 

 

이제 Dialog를 삽입하는데 다음과 같이 짜주면 되겠지요.

 

MessageDialog는 Windows.UI.Popups라는 네임스페이스에 포함되어 있는 요소이기 때문에 해당 부분을 추가시켜야 하는데 단순하게 위처럼 처리해줘도 됩니다. 그래서 사전에 연결이 안되었다는 메세지를 첨가하고 인터넷 프로파일이 없을 경우에 출력하도록 처리했습니다. 마지막으로 예외구문에서는 앞에서 정한 Player의 Source를 지정해주고 그걸 Player시켜주면 끝이 되겠지요.

 

 

자 결과를 확인해보겠습니다.

먼저 인터넷이 연결되어 있을때의 동작입니다.

 

소리가 제대로 나옵니다. 다음은 인터넷 연결을 해제한 상태에서의 동작입니다.

 

 

저도 한달전에 App에 대한 점검을 받았었는데 이에 대한 부분도 삽입해야 한다고 하니 유의하시면 좋을 것 같습니다. 여기까지였습니다.

댓글