728x90

트랙바를 이용하여 재생시간이 어느 정도 되고, 트랙바를 마음대로 움직여서 재생을 조절할 수 있게 하는 걸 하고 싶어서 폭풍검색을 해서 해결했다.

검색을 해보니 MP3 플레이어를 만드는 방법이 [DllImport("winmm.dll")] 를 이용하는 방법,  Interop.QuartzTypeLib.dll 을 이용하는 방법, NAudio.dll 를 이용하는 방법이 주로 나온다.

C# 5.0 프로그래밍 실전프로젝트(조호묵 저) 에 구현한 소스코드는 Interop.QuartzTypeLib.dll 을 이용하여 만들었다. (출판사 자료실 : http://www.kame.co.kr/)
winmm.dll 을 이용하여 tackBar 를 구현하려고 했으나 내 능력이 부족해서 구현할 수가 없었다.

검색하다보니 NAudio 를 활용하여 구현하면 된다는 내용이 블로그에 많았다.

그래서 이걸로 구현해보겠다고 마음먹고 구현을 해봤다.


처음에는 구글링한답시고 열라  삽질을 많이 했다.

구글링 검색해서 나오는 예제들은 모두 옛날 버전이더라.

유투브 동영상에 자료 찾아서 해봤는데 역시 예전버전이다. 하지만 모르는 코드를 알게되어 일부 건진 건 있다.



재생시간이 나오면서 트랙바가 움직이게 하는 걸 어떻게 할 수 있을까?

구글링해서 참조해서 만들어본 코드가

trackBar.Value = Convert.ToInt32((int)reader.CurrentTime.TotalSeconds * trackBar.Maximum / (int)reader.TotalTime.TotalSeconds);

이다.

그런데 NAudio 사이트에서 받은 코드에 나온 데모를 보니까 아주 간단하게 되어 있다.

trackBar.Value = Math.Min((int)((trackBar.Maximum * reader.Position) / reader.Length), trackBar.Maximum);


NAudio 트랙바 코드만 정리해보면

using NAudio.Wave;

using NAudio.FileFormats.Mp3;

private AudioFileReader reader;

private void timer1_Tick(object sender, EventArgs e)
{
    if (reader != null)
    {
        labelNowTime.Text = FormatTimeSpan(reader.CurrentTime); // 재생시간
        labelTotalTime.Text = FormatTimeSpan(reader.TotalTime);  // 총 시간
        trackBar.Value = Math.Min((int)((trackBar.Maximum * reader.Position) / reader.Length), trackBar.Maximum);
    }
}

private void trackBar_Scroll(object sender, EventArgs e)
{
    if (this.reader != null)
    {
        reader.Position = (trackBar.Value * reader.Length) / trackBar.Maximum;
    }
}


타이머가 동작되면 시간이 계산되어 움직이고, 타이머가 멈추면 같이 멈춘다.

트랙바에서 마우스로 찍으면 해당 지점에서 노래가 재생되도록 하고 싶어서 추가로 구현했다.

private void trackBar_MouseDown(object sender, MouseEventArgs e)
{
    if (this.reader != null)
    {
        double clickValue = ((double)e.X / (double)trackBar.Width) * (trackBar.Maximum - trackBar.Minimum);
        trackBar.Value = Convert.ToInt32(clickValue);
        reader.Position = (trackBar.Value * reader.Length) / trackBar.Maximum;
    }
}


NAudio 사이트 : http://naudio.codeplex.com/

에서 다운로드 하여 dll 파일을 참조로 포함시키고, 예제 소스코드를 참조할 수 있다.


// 재생시간 구현해보겠다고 삽질하면서 찾아낸 건데 나중에 도움이 될지도 몰라서 그냥 적어둔다.

public string Play_Duration(int iPostion)
{
    string strTimeLen = string.Empty;
    int iHour = iPostion / 3600;
    int iMinute = (int)((iPostion - (iHour * 3600)) / 60);
    int iSecond = (int)(iPostion - (iHour * 3600 + iMinute * 60));
    strTimeLen = String.Format("{0:D2}:{1:D2}:{2:D2}", iHour, iMinute, iSecond);

    return strTimeLen;
}

블로그 이미지

Link2Me

,