2017-12-19 3 views
0

간단한 게임을 만들기 위해 SDL을 사용하고 프로그램 시작부터 음악을 배경으로 재생하지만 음악 재생이 멈췄는지 확인하여 다음 트랙 시작할 수 있습니다. SDL_mixer 라이브러리를 사용하여 음악을로드하고 재생합니다.SDL2로 음악 재생 확인하기

bool loadTrack() 
{ 
    song = Mix_LoadMUS("backgroundmusic.mp3"); 
    if (song == NULL) 
    { 
     return false; 
    } 
    else 
    { 
     Mix_PlayMusic(song, -1); 
     return true; 
    } 
} 

I로드와 내가 음악이라는 만든 클래스에서 음악을 연주 해요, 노래는 NULL이 다음 그것을 트랙 이름을 지정하고 해당 클래스에서 "loadTrack"방법을 연주 클래스 생성자에 정의되어 있습니다 . 클래스에서 다른 메서드를 호출하여 호출 할 수 있고 트랙 재생이 끝나면 true를 반환하고 재생 중이면 false를 반환합니다. 내 문제는 트랙이 여전히 재생 중인지 또는 믹서 라이브러리가 여전히 재생 중인지 확인하기위한 자체 기능이 있는지 확인하는 방법을 모르는 것입니다.

답변

0

SDL_Mixer는 음악 재생 여부를 확인하기 위해 Mix_PlayingMusic()입니다. 하지만 -1을 Mix_PlayMusic에 전달하면 반복 재생되므로 영원히 멈추지 않습니다.

나는 수동으로 Mix_PlayMusic에 -1 대신 1 (한 번 재생)을 전달하여 노래를 "다시 시작"할 수 있다고 생각합니다. 그런 다음 메인 루프에서 다음 프레임으로 이동하기 전에 음악 재생이 중지되었는지 확인하여 다시 시작하거나 다른 음악을 재생할 수 있습니다. 그러나 이것은 각 재시작 사이에 약간의 무음 간격을 유발합니다 (게임이 60fps에서 실행될 경우 약 1 프레임 시간 ~ 60 분의 1). 따라서 단순히 음악을 완벽하게 반복하려는 경우 SDL_Mixer가 이와 같이 손으로하지 말고 더 잘 수행하도록하십시오.

+0

정확하게 대답이 필요합니다. 오늘 나중에 집에 돌아와서 시험해 볼 것입니다. – Bananas88