본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 사운드 재생

by 타락카얀 2023. 1. 29.
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

◈ 사운드 재생

 

 

게임메이커에는 기본적으로 *.ogg, *.mp3 및 *.wav 사운드 형식을 재생할 수 있습니다.

 

사운드는 기본적으로 아래 함수를 사용하여 재생할 수 있습니다.

 


   ◎ audio_play_sound(index, priority, loop)


      - index : 재생할 사운드의 인덱스입니다.
      - priority : 사운드의 채널 우선순위를 설정합니다.


      - loop : 사운드를 루프할지 여부를 설정합니다.
                  true(1) : 루프 재생, false(0) : 한번만 재생


 

사운드 에셋을 제공하고 우선 순위를 지정하면 재생되는 사운드 수가 audio_channel_num(num)

함수에서 설정한 제한을 초과할 때 사운드를 처리하는 방법을 결정하는데 사용됩니다.

 

우선 순위가 낮은 사운드는 우선 순위가 높은 사운드를 위해 중지됩니다.

우선 순위 값은 임의적으로 지정할 수 있으며, 게임메이커에서는 우선 순위를 동일하게

지정하므로 0~1, 또는 0~100 사이일 수 있습니다.

숫자가 높을수록 우선 순위가 높으므로 우선 순위가 100인 사운드가 우선 순위가 1인

사운드보다 선호됩니다.

 


   if health <= 0
    {
    lives -= 1;
    audio_play_sound(snd_PlayerDead, 10, false);
    }


 

아래 함수를 사용하면 오디오를 재생하는데 사용할 수 있는 오디오 채널 수를 설정할 수 있습니다.

 


   ◎ audio_channel_num(num)
      - num : 사용 가능한 오디오 채널 수(기본값은 128).


 

한 번에 재생할 수 있는 동시 사운드의 수를 지정하고, 그 수가 초과되면 낮은 우선 순위의

사운드는 더 높은 우선 순위의 사운드에 대한 채널을 확보하기 위해 중지됩니다.

이 기능을 사용하면 장치에 맞게 게임을 최적화할 수 있습니다.

 

하지만 오디오용 채널 수가 적을수록 성능이 향상되지만, 동시에 여러 개를 재생할 경우,

특정 사운드가 눈에 띄게 끊길 수도 있습니다.

 


   switch (os_browser)
   {
   case browser_not_a_browser:
      switch (os_type)
         {
         case os_windows:
         case os_macos:
            audio_channel_num(200);
            break;
         default:
            audio_channel_num(64);
            break;
         }
      break;
   default:
      audio_channel_num(16);
      break;
   }


 

사운드를 정지하고 싶을 때는 아래 함수를 사용합니다.

 


   ◎ audio_stop_sound(index)
      - index : 재생할 사운드 인덱스


   ◎ audio_stop_all( )


 

지정한 사운드만 정지하거나, 모든 사운드 재생을 정지할 수 있습니다.

 


   audio_stop_all( );

 

재생 중인 사운드를 일시 정지 시킬 수도 있습니다.

 


   ◎ audio_pause_sound(index)
      - index : 일시 정지할 사운드 인덱스


   ◎ audio_pause_all( )


 

지정한 사운드만 일시 정지하거나, 모든 사운드 재생을 일시 정지합니다.

 


   if keyboard_check_pressed(ord("P"))
   {
   global.Pause = !global.Pause;
   if global.Pause
      {
      audio_pause_all( );
      }
   else
      {
      audio_resume_all( );
      }
   }


 

일시 정지한 사운드는 아래 함수로 다시 재개할 수 있습니다.

 


   ◎ audio_resume_sound(index)
      - index : 재생 재개할 사운드 인덱스


   ◎ audio_resume_all( )


 

함수는 일시 정지된 부분부터 재생합니다.

 


   if keyboard_check_pressed(ord("P"))
   {
   global.Pause = !global.Pause;
   if global.Pause
      {
      audio_pause_all( );
      }
   else
      {
      audio_resume_all( );
      }
   }


 

아래 함수를 사용하면 사운드가 재생 중인지를 체크할 수 있습니다.

 


   ◎ audio_is_playing(index)
      - index : 재생중인지 체크할 사운드 인덱스


 

지정할 사운드가 재생 중이면 true(1), 재생 중이 아니라면 false(0)가 반환됩니다.

단, 지정한 사운드가 일시 정지 중일 경우, 사운드는 완전히 정지된 것이 아니기 때문에

true가 반환됩니다.

이 함수는 보통 새로운 사운드를 재생하거나, 완전히 정지할 때 사용합니다.

 


   if !audio_is_playing(snd_Waterfall)
   {
   audio_play_sound(snd_Waterfall, 10, false);
   }


 

아래 함수를 사용하면 일시 정지 중인지를 체크할 수 있습니다.

 


   ◎ audio_is_paused(index)

 

지정한 사운드가 일시 정지 중이면 true(1), 아니라면 false(0)가 반환됩니다.

 


   if audio_is_paused(snd_Waterfall)
   {
   audio_resume_sound(snd_Waterfall);
   }


 

아래 함수를 사용하면 일반 오디오 기능에서 사용할 수 있는 새 사운드 인덱스를 생성하여

외부 OGG 파일 소스에서 직접 사운드를 스트리밍할 수 있습니다.

 


   ◎ audio_create_stream(filename)
      - filename : 오디오를 스트리밍할 파일(OGG만 해당)입니다.


 

더 이상 사운드가 필요하지 않은 경우에는 audio_destroy_stream(index) 함수를 호출하여

메모리에서 제거해야 합니다.

그렇지 않으면 메모리 누수가 발생하여 게임 속도가 느려질 수 있고, 게임이 중단될 수도 있습니다.

 


   snd = audio_create_stream("Music/Track1.ogg");
   audio_play_sound(snd, 0, true);


 

audio_create_stream(filename) 함수를 사용하여 파일에서 오디오 스트림을 생성했을 때,

더 이상 해당 사운드가 필요하지 않은 경우, 이 함수를 호출하여 메모리에서 제거할 수 있습니다.

 


   ◎ audio_destroy_stream(index)
      - index : 오디오를 스트리밍한 사운드 인덱스


 

사운드가 소멸된 후, 추가로 호출하면 오류가 발생할 수 있어요.

 


   audio_destroy_stream(snd);

 

위 스트리밍 함수로 사운드 에셋을 추가하는 경우, 또는 사운드가 존재하는 지를 체크해야 하는 경우

아래 함수로 확인할 수 있습니다.

 


   ◎ audio_exists(index)

 

이 함수는 사운드가 존재하면 true(1), 존재하지 않으면 false(0)를 반환합니다.

 


   if audio_exists(global.Music)
   {
   audio_play_sound(global.Music, 0, true);
   }


 

 

 

 

 

 

 

300x250

댓글