이번에는 음악재생하는 기능을 만들 것이다.

우선 디자인을 대충 만들어주자.



그리고 MediaPlayer 클래스를 이용해 새로운 미디어플레이어 하나를 생성해준다.

미디어 플레이어는 System.Windows.Media를 using 하면 된다.

1
private MediaPlayer mMediaPlayer = new MediaPlayer();
cs

MediaPlayer를 입력하면 전구모양 표시가 뜨는데 전구를 누르면 버튼 하나로 바로 using 할 수 있다.

C#에서의 using은 C, C++의 Include라고 생각하면 된다.

근데 C#에서는 헤더파일 직접 찾을 필요없이 전구를 누르면 자동으로 using 해준다.



이후 음악을 불러와서 재생해주면 된다.

1
2
mMediaPlayer.Open(new Uri("Furtive Regret.mp3", UriKind.Relative));
mMediaPlayer.Play();
cs

잘 만들어져있어서 정말 간편하게 쓸 수 있다.

UriKind의 Relative는 상대주소, Absolute는 절대주소, RelativeOrAbsolute는 둘 다 가능하다.



음악의 정지와 일시정지도 아래처럼 사용하면 된다.

1
2
mMediaPlayer.Stop();
mMediaPlayer.Pause();
cs



볼륨 조절은 0~1까지로 조절할 수 있기때문에 Slider의 최대값을 100으로 변경해 /100을 하여 변경하고 

현재 볼륨값을 텍스트로 출력하였다. (max 100)

1
2
3
4
5
Volume.Maximum = 100.0;
Volume.Minimum = 0;
 
mMediaPlayer.Volume = Volume.Value / 100.0;
VolumeValue.Content = (int)Volume.Value;
cs



음악 재생에 따라 슬라이더가 움직이는 것은 스레드를 사용하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public delegate void timeTick();
DispatcherTimer ticks = new DispatcherTimer();
 
mMediaPlayer.MediaOpened += loadMusiced;
 
private void loadMusiced(object sender, EventArgs e)
{    
    MPposition.Maximum = mMediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds;
 
    ticks.Interval = TimeSpan.FromMilliseconds(1);
    ticks.Tick += ticks_Tick;
    ticks.Start();
}
 
void ticks_Tick(object sender, object e)
{
    TimeSpan newTimeSpan = mMediaPlayer.Position;
    MPposition.Value = newTimeSpan.TotalMilliseconds;
    PositionValue.Content = newTimeSpan.ToString("mm':'ss':'ff");
}
 
cs

밀리세컨드마다 value값을 진행시키고 content에 현재값을 표시하였다.



직접 슬라이더를 변경하거나 드래그했을 경우에는 아래와 같이 바꿔주었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
private void MPposition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    TimeSpan newTimeSpan = mMediaPlayer.Position;
    PositionValue.Content = newTimeSpan.ToString(@"mm\:ss");
}
 
private void MPposition_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
    mMediaPlayer.Position = new TimeSpan(0000, (int)MPposition.Value);
    
    TimeSpan newTimeSpan = mMediaPlayer.Position;
    PositionValue.Content = newTimeSpan.ToString(@"mm\:ss");
}
cs



음악의 재생 및 현재시간 표시, 볼륨 표시, 슬라이더가 잘 작동한다.


Posted by misty_
,