정보공간_1

[6기 부산 박천경]SDL (Simple DirectMedia layer) #2 본문

IT 놀이터/Elite Member Tech & Talk

[6기 부산 박천경]SDL (Simple DirectMedia layer) #2

알 수 없는 사용자 2014. 9. 11. 20:53

SDL (Simple DirectMedia layer) #1에서는 SDL 의 설치법 및 기존버전과 2.0버전의 차이점에 대해서 알아 보았습니다.

이번 시간에는 SDL의 새로운 버전인 SDL2.0 오픈소스를 이용하여 Bitmap 이미지를 띄워 보겠습니다

또한 SDL 2.0 버전 의 새로운 기능인 사운드카드를  잡고 그 Path 음성 파일을 재생 시키겠습니다. 

#2 진행에 앞서 SDL #1 에서  SDL 2.0버전을 설치한 후 시작해 주세요.ㅎ


1.     SDL window 창을 이용하여 이미지 띄우기



이미지를 로드 하기에 앞서 우리는 몇 가지 변수를 선언 합니다

SDL_Surface는 표시 가능한 메모리 공간으로메모리에 이미지를 그릴 수 있습니다.

SDL_Window로 선언된 변수를 이용하여 SDL_GetWindowSurface 함수에 의해서 비디오 

 프레임 버퍼가 반환됩니다.


 

다음 그림은 메인 부분입니다. SDL_CreateWindow() 을 이용하여 window의 타이틀 , 

window의 position 그리고 window의 크기를 pWindow 저장합니다이렇게 저장된 정보는 

SDL_GetWindowSurface() 함수를 이용하여  프레임  버퍼를 반환 시킵니다.

 BMP 이미지를 지정 한 다음 Blit UpdateWinowSurface를 해 주게 되면 이미지가 나오게 됩니다.



마지막에 Close 함수를 이용하여Surface Winodw Destroy 한 다음 SDL_Quit()로 종료하게 됩니다.




2.     사운드 카드를 선택하여 음악듣기



Audio에 관련된 변수를 정의 합니다. Uint8 sound 는 음악파일 데이터의 포인터 , Uint32 Sound len은 

음악파일의  길이를 저장하는 변수입니다.



Audio callback데이터의 구조체를 생성하고 SDLCALLBACK 함수를 만들어줍니다.



Audio 재생 부분입니다. test_multi_audio 함수를 통하여 저장 된 음성파일의 callback Data

 받아와서 Sound card 의 차례에 따라서 일정시간의 SDL_delay를 통해 재생해 줍니다.

사운트 카드를 지정해주는 곳이 SDL_OpenAudioDevice

(const char* device ,  int iscapture , const SDL_AudioSpec*  desired , 

SDL_AudioSpec* obtained, int allowed_change ) 함수 입니다.  

device는 UTF-8의 형식으로 사운드 카드의 device name을 넣고 , iscapture 0 인 상태에서는

 재생 0이외의 상태에서는 장치에서 녹음할때 쓰입니다. desired 은 파일의 원하는 출력포맷이고 , 

obtained 실제의 출력포맷입니다. 



다음은 메인 함수 입니다. SDL_init 을 이용하여 초기화 시켜줍니다.

SDL_GetNumAudioDevies를 이용하여 현 컴퓨터에 설치 된 사운드카드의 개수를 확인하고 

devecount 변수에 저장시킵니다소리 wav 파일을 로드 시킵니다.



다음 그림과 같이 선택한 사운드 카드에 소리가 나오는 것을 확인하실 수 있습니다.

조금만 더 응용하신다면 Thread를 이용하여 사운드 카드를 여러 개 동시에 선택하여 

각각 소리를  만들어 낼 수 있습니다.