ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WPF MediaPlayer Volume 사용
    C#/WPF 2017. 3. 10. 15:42

    MediaPlayer 를 사용하면서 volume 값을 저장하고, 프로그램이 켜질때 다시 적용시키는 방법을 하고있었다.


    그런데 volume값이 1 이 되면 (0 ~ 1) 불러올때 적용이 안되더라. 그래서 찾아보고 찾아보니


    Volume값이 1 을 가리키면 bool 값의 1 처럼 "소리가 난다." 를 뜻한다.

    그래서 실질적인 Max Volume 값은 0.99 이다.


    따로 사용하는 AIMP 라는 음악플레이어 에서도 볼륨 99%는 존재하지 않는다. 97, 98과 100이 존재할 뿐...


    0.99를 100으로 표시하고 사용하는 것이였다.


    결국에 알아내긴 했지만, 혹시 나같은 사람이 있을까 글을 적는다.




    MediaPlayer 로 음악파일을 재생하면 매번 재생할때마다 Volume이 0.5로 설정된다. 그래서 따로 사용자가 설정한 볼륨값을 저장하고, media를 Open(또는 Play) 할 때 마다 Volume 을 설정해주어야 한다. 안그러면 매번 볼륩이 0.5 이다.





    Volume 값을 설정할 때 편하게 하기 위해 휠을 돌리면 + - 2 씩 되게 했다. 해놓고 보니 56 에서 더이상 커지지 못하고 이러한 현상들이 중간중간 일어나더라. 대충 예상은 했지만 역시나 Floating Point 방식 때문이였다. 58이 내부적으로는 57.99999997 이런식으로 저장이 되어있어서 2씩 조절하니 메롱이 된것이다.


    이럴때에는 Math.Round 를 사용하자  (int)Math.Round(media.Volume * 100) / 100.0


    지금 나는 소수점 아래 두 자리만 남겨두기 위해 * 100, int형으로 변환, / 100 으로 처리한다. int 형으로 변환하기 전에 반올림을 하면 57.99999... 이 58이 되어서 좋다.


    그러면 ceiling을 사용하면 되지 않느냐? 할텐데 58이 아닌 12인가 그 부근에서는 12.000000001 이런식으로 저장이 된다. 그래서 거기서는 ceiling을 사용하면 메롱이 된다. 그렇다고 그런값만 찾아서 floor를 해준다?

    round를 사용했다.


    Round  : 반올림 (사사오입) ( 0.5 기준)

    Ceiling  : 올림

    Floor    : 내림 (버림)











    댓글

GiGong