사운드 출력해보기
포스팅을 해야지 해야지 하면서도 못하고 있었던 것을 드디어 하게 된다.
오늘 포스팅을 하게 될 내용은 사운드를 출력하는 것이다.
물론 사운드를 출력 하는 방법은 여러가지 방법이 있다. 라이브러리가 다양하기 때문에...
하지만, Windows Mobile 6 에서는 극히 제한적이다.
처음에는 DirectSound를 포팅 해보려 했으나, 지원하지 않았다 -_-
여튼 서론이 길어졌으나, 사운드 출력 하는 방법을 알아보자~~
기본적으로 wave 파일을 출력 하는 함수들은 여러가지가 있다.
가장 간단하게 사용 할수 있는 함수는 PlaySound 였던것으로 기억한다.
하지만, 이것을 가지고는 동시에 여러 사운드를 출력이 불가능하다.
그래서 Windows Mobile 6 에서 제공 하는것중(물론 일반 Win32에서 당연히 사용 가능하다)
waveOut*** 씨리즈 라이브러리를 사용하여 출력을 해보겠다.
여러 함수들이 많겠지만, 기본적으로 아래의 순서대로 실행하여 출력하면 된다.
각 함수들의 원형을 보도록하자.
위에 함수들의 원형을 보면 알겠지만, 몇가지 구조체를 받고 있다.
해당 구조체들의 원형도 보도록하자.
이제 아까 위에서 설명한 것처럼 순서대로 함수가 원하는 데이터를 채워서 실행해주면 된다.
여기서 하나 주의할 것은, Open을 할때 콜백처리가 가능하다는것이다.
옵션에 콜백함수로 처리를 하겠다면 CALLBACK_FUNCTION, 윈도우 메세지로 처리를 하겠다면 CALLBACK_WINDOW,
뭐 등등의 쓰레드등으로 메세지 처리가 가능하고 메세지는 출력이 종료가 됐을때 라든지 몇가지가 있다.
그 부분에 대한 처리를 잘 해줘야 하고, 또하나는 Write함수를 사용 할때 보면 실제 wave의 데이터를 받아가는 곳이 있다.
이곳에 데이터를 통채로 넣어버리면, 출력이 되지 않는다. 하나의 정크단위로 잘라서 WAVEHDR과 함께 넘겨줘야만 정상 출력이 되는것을 볼 수 있을것이다.
(나도 이것때문에 왜 안되나.. 했다 -_-;;)
단위는 자유겠지만 보통 8k를 많이 사용하는것 같다.
그래서 각 웨이브 파일의 데이터를 정크단위로 잘라서 그걸 출력하므로서 동시에 몇가지 음악을 출력 할수 있게 하는것 같다.
이제 막 테스트를 끝내고 class로 레핑 해놓은 것이 있으나, 조금 더 다듬고 나서 공개를 하겠다.(별건아니지만.. )
오늘 포스팅을 하게 될 내용은 사운드를 출력하는 것이다.
물론 사운드를 출력 하는 방법은 여러가지 방법이 있다. 라이브러리가 다양하기 때문에...
하지만, Windows Mobile 6 에서는 극히 제한적이다.
처음에는 DirectSound를 포팅 해보려 했으나, 지원하지 않았다 -_-
여튼 서론이 길어졌으나, 사운드 출력 하는 방법을 알아보자~~
기본적으로 wave 파일을 출력 하는 함수들은 여러가지가 있다.
가장 간단하게 사용 할수 있는 함수는 PlaySound 였던것으로 기억한다.
하지만, 이것을 가지고는 동시에 여러 사운드를 출력이 불가능하다.
그래서 Windows Mobile 6 에서 제공 하는것중(물론 일반 Win32에서 당연히 사용 가능하다)
waveOut*** 씨리즈 라이브러리를 사용하여 출력을 해보겠다.
여러 함수들이 많겠지만, 기본적으로 아래의 순서대로 실행하여 출력하면 된다.
각 함수들의 원형을 보도록하자.
위에 함수들의 원형을 보면 알겠지만, 몇가지 구조체를 받고 있다.
해당 구조체들의 원형도 보도록하자.
이제 아까 위에서 설명한 것처럼 순서대로 함수가 원하는 데이터를 채워서 실행해주면 된다.
여기서 하나 주의할 것은, Open을 할때 콜백처리가 가능하다는것이다.
옵션에 콜백함수로 처리를 하겠다면 CALLBACK_FUNCTION, 윈도우 메세지로 처리를 하겠다면 CALLBACK_WINDOW,
뭐 등등의 쓰레드등으로 메세지 처리가 가능하고 메세지는 출력이 종료가 됐을때 라든지 몇가지가 있다.
그 부분에 대한 처리를 잘 해줘야 하고, 또하나는 Write함수를 사용 할때 보면 실제 wave의 데이터를 받아가는 곳이 있다.
이곳에 데이터를 통채로 넣어버리면, 출력이 되지 않는다. 하나의 정크단위로 잘라서 WAVEHDR과 함께 넘겨줘야만 정상 출력이 되는것을 볼 수 있을것이다.
(나도 이것때문에 왜 안되나.. 했다 -_-;;)
단위는 자유겠지만 보통 8k를 많이 사용하는것 같다.
그래서 각 웨이브 파일의 데이터를 정크단위로 잘라서 그걸 출력하므로서 동시에 몇가지 음악을 출력 할수 있게 하는것 같다.
이제 막 테스트를 끝내고 class로 레핑 해놓은 것이 있으나, 조금 더 다듬고 나서 공개를 하겠다.(별건아니지만.. )
Study/Windows Mobile 6
2009/05/03 14:18



댓글을 달아 주세요