게임 개발 공부/게임 제작

C++ Beep로 게임 배경음악 만들기

Vetenir 2025. 1. 15. 20:46

Beep 사용 방법

Beep(음의 높낮이, 음의 출력 시간);

 

도레미파솔라시도

12-TET(12-Tone Equal Temperament, 12평균율) 방식을 사용해 각 음의 주파수를 계산했습니다.

12평균율에서 주파수는 다음 공식을 사용해 계산했습니다.

계산 방법은 아래의 블로그에서 참고.

https://people-analysis.tistory.com/255

 

피치란 무엇인가?

옥타브 Note name은 소리의 각 음을 A1#과 같이 기호로 표현한 것 Midi number는 Note name을 숫자로 표현한 것 각 옥타브는 12개의 음으로 구성되어 있다. 한 옥타브의 차이는 진동수 2배 차이가 난다. 각

people-analysis.tistory.com

 

도레미파솔라시도 코드

#include <windows.h> // Beep 함수를 사용하기 위한 헤더 파일
#include <iostream>  // 입출력을 위한 헤더 파일

void playSimpleMelody() {
    // 간단한 멜로디 (C D E F G A B C)
    int melody[] = {
        261,  // C4
        294,  // D4
        329,  // E4
        349,  // F4
        392,  // G4
        440,  // A4
        493,  // B4
        523   // C5
    };

    int duration = 300; // 각 음표의 지속 시간 (밀리초)
    int melodySize = 8;
    std::cout << "도레미파솔라시도" << std::endl;

    // 멜로디 재생
    for (int i = 0; i < melodySize; i++) {
        Beep(melody[i], duration);
        Sleep(50); // 음표 간의 짧은 휴식
    }

    std::cout << "음악 재생 완료!" << std::endl;
}

int main() {
    playSimpleMelody();
    return 0;
}

 

활용 코드

Beep 함수는 Windows API를 통해 호출할 수 있는 함수.

#include <windows.h> // Beep 함수를 사용하기 위한 헤더 파일
#include <iostream>  // 입출력을 위한 헤더 파일
#include <thread>

// Zelda - Song of Time
void playMusic() {
    while (true) { // 무한 반복
        Beep(880, 500);  // A5 1-2
        Beep(587, 1000);  // D5 1
        Beep(698, 500);  // F5 1-2
        Beep(880, 500);  // A5 1-2
        Beep(587, 1000);  // D5 1
        Beep(698, 500);  // F5 1-2
        Beep(880, 250);  // A5 1-4
        Beep(1046, 250); // C6 1-4
        Beep(987, 500);  // B5 1-2
        Beep(783, 500);  // G5 1-2
        Beep(698, 250);  // F5 1-4
        Beep(783, 250);  // G5 1-4
        Beep(880, 500);  // A5 1-2
        Beep(587, 500);  // D5 1
        Beep(523, 250);  // C5 1-4
        Beep(659, 250);  // E5 1-4
        Beep(587, 850);  // D5 3-4
        Sleep(150);
    }
}

int main() {
    int a;

    std::thread musicThread(playMusic);
    std::cout << "브금 재생 중" << std::endl;
    std::cin >> a;
    return 0;
}

 

 

코드는 아래의 영상들을 참고하여 제작했습니다.

https://www.youtube.com/watch?v=g0wUVcgTj54

https://www.youtube.com/watch?v=R0svMCWbdrU