사용자 도구

사이트 도구


raylib:flappybird:flappy_bird_에_사운드를_입히기
flappy bird 에 사운드를 입히기

플래피 버드 그림 입히기

  

스타팅 파일

오디오 기본 : 점프 효과음 만들기

위 스타팅 프로젝트 파일에는 에셋폴더에 jump.wav라는 효과음이 첨부되어 있다. 이를 이용할 것이다.

1. 오디오 디바이스 연결하기와 연결 끊기

main.cpp에서 게임창을 초기화하였으므로 바로 이어서 오디오도 초기화하자

가. 오디오 초기화

main.cpp에서 게임창을 만든 직후에 오디오를 초기화하자

    // 게임창 만들기 
    SetTargetFPS(60);               // Set our game to run at 60 frames-per-second
    InitWindow(screenWidth, screenHeight, "Flappy Bird"); 
 
    // 오디오 디바이스 초기화하기
    InitAudioDevice();      // Initialize audio device

나. 오디오 닫기

CloseWindow() 바로 전에 오디오를 닫는 함수를 부르자. while문이 종료된 다음에 불러와야 할 것이다.

    CloseAudioDevice();     // Close audio device
    CloseWindow();                  // Close window and OpenGL context
    return 0;

2. 사운드 선언 및 실행

가. bird.h

bird.h에 다음과 같이 점프에 사용할 사운드를 선언한다.

    Sound fxJump;         // Load WAV audio file

나. wave파일 할당하기

bird.cpp에서 Init문에서 사용할 wave파일을 할당하면 된다/

void Bird::Init()
{
    // 최초의 포지션 정하기
    pos = {150, float(GetScreenHeight()) / 2} ;
// 그림으로 넣기
    birdImage = LoadTexture("Assets/birddrawing.png");        // Texture loading
    fxJump = LoadSound("Assets/jump.wav");
}

다. 사운드 파일 메모리에서 해제 하기

끝나면 사운드 파일을 메모리에서 해제하는 것을 잊지 말자

Bird::~Bird()
{
    UnloadTexture(birdImage);       // Texture unloading
    UnloadSound(fxJump);     // Unload sound data
}

라. 사운드 사용하기

PlaySound()함수를 사용하면 된다. 쉽다.

void Bird::Jump()
{
    downSpeed = -jumpSpeed; 
    PlaySound(fxJump);      // Play WAV sound
}

3. 활용

이제 이것을 활용하여 플레이어가 장애물에 부딪히면 다치는 사운드도 만들어 보자.

그런데 Assets폴더에는 mp3로 되어 있다. 이것은 ConvertIO와 같은 변환사이트에서 변환하면 된다.

변환한 후에 해당 wav파일을 위와 똑같이 PlaySound()함수로 활용하면 된다.

이런 식으로 나머지 효과음도 집어 넣자. 나는 이렇게 코딩했다.

// 플레이어가 데미지를 입는 메서드
void Bird::Hurt()
{
    Life--;
    SetInvincible(true);    
 
    if (Life > 0)  PlaySound(fxHurt);
    else PlaySound(fxExplosion);
}

음악 연주하기

mp3를 연주하는 것도 그리 어려운건 아니다.

참고한 음악 파일은 Raylib의 예제파일 중에서 가져왔다.

출처 : 음악예제파일

1. 음악 파일 선언

game.h에 음악파일을 선언한다.

        Music music;

2. 음악 할당하기

game.cpp에서 Init()함수 내에 다음과 같이 음악을 할당한다.

    // 배경음악 플레이 할당하기
    music = LoadMusicStream("Assets/country.mp3");
    PlayMusicStream(music);

3. 메모리 해제하기

다음을 항상 잊지 말자

Game::~Game()
{
    UnloadTexture(backgroundImage);
    UnloadMusicStream(music);   // Unload music stream buffers from RAM
    pipes.clear();
} 

4. 뮤직 스트림 업데이트 하기

Update()루프에서 Switch 문 위에 다음과 같이 뮤직 스트림을 업데이트 하는 함수를 실행한다.

이래야만 음악이 연주된다.

    // Update
    UpdateMusicStream(music);   // Update music buffer with new stream data

4. 음악 일시정지와 재개

ResumeMusicStream() 함수와 PauseMusicStream() 함수를 이용하면 된다.

가. 정지 스위치 문

        case Gamestate::pause :    // 정지로직 
 
            if (IsKeyPressed(KEY_UP)) 
            {
                gamestate = Gamestate::game;    // 게임으로 돌아가기 
                ResumeMusicStream(music);
            }
            if (gamestate == Gamestate::pause && IsKeyPressed(KEY_ESCAPE) ) Manager->gameExit = true;   // 정지상태일때, ESC 누르면 종료
 
            break;

나. 게임 진행 스위치 문

다음과 같이 ESC키를 누르면 일시정지 함수를 불러오면 된다.

        case Gamestate::game :  // 게임로직
            // 키보드 입력
            if (IsKeyPressed(KEY_ESCAPE)) 
            {
                gamestate = Gamestate::pause;  // 게임정지로 바꾸기 
                PauseMusicStream(music);
            }

결론

오늘은 배경음악과 효과음을 해봤다. 오늘은 그리 어려운 것은 없어 보인다.

지금까지의 소스파일은 다음과 같다.

Raylib 플래피버드 - 오디오 다루기

다음번에는 메인메뉴를 키보드로 조작하기를 해볼 것이다.

로그인하면 댓글을 남길 수 있습니다.

raylib/flappybird/flappy_bird_에_사운드를_입히기.txt · 마지막으로 수정됨: 2023/11/20 00:03 저자 이거니맨