[SFML] 음악 재생하기

오디오를 재생시켜주는 타입으로는 Music이 있다. 

비슷하게 Sound라는 것도 있는데 이건 말 그대로 효과음같은 사운드만 깔아주는거다. 좀 다르다.


어쨌든 이런식으로 짜면 알아서 잘 재생된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <SFML/Audio.hpp>
#include <string>
#include <iostream>
 
int main(void)
{
    std::string filename = R"(C:\Users\sssan\Desktop\Ludovico Einaudi - I Giorni.ogg)";
 
    sf::Music music_player;
    
    if (music_player.openFromFile(filename)) //파일 등록하고 제대로 됐나 체크.
    {
        music_player.play(); //오디오 실행!
 
        //커맨드에서는 루프 안걸면 바로 꺼져버림.
        while (music_player.getStatus() != sf::Music::Stopped) //음악 끝날때까지 루프
        {
            system("cls");
            std::cout << "재생중" << std::endl;
        }
        std::cout << "플레이 종료" << std::endl;
    }
    else
        std::cout << "에러요" << std::endl;
}
cs

처음에는 예외도 안떴는데 왜 노래 안켜고 바로 꺼지지? 하면서 삽질을 좀 했는데, 

생각해보니 음악과 상관없이 커맨드가 꺼져서 그런거였다.

GUI로 띄울때는 아마 루프 지워도 될거다.


그리고 주의할점으로는 이게 범용적인 오디오 포맷들을 얼추 지원하기는 하는데, 정작 중요한 mp3를 지원하지 않는다는 것이다. 저작권 때문에...


찾아보니까 얼마전에 저작권 소멸했다는 것 같은데 빨리 업데이트가 되었으면 하는 바람이다.



어쨌든 실행은 잘 된다.


감미로운 선율이 흘러내린다.



설정

트랙백

댓글

[C++/SFML] SFML 시작

SFML은 Simple & Fast Multimedia Library의 준말로, C++로 구성된 GUI 라이브러리다.


크로스플랫폼이며, 오픈소스이며, 모바일도 지원한다.


다운은 여기서 골라 받으면 된다.

https://www.sfml-dev.org/download/sfml/2.5.0/


압축 풀고나서 폴더는 쓰기 편한 위치에다 적당히 정리해놓자


그러면 이제 쓰면 된다.


라이브러리를 장착하는건 VS가 더 편하다.


대충 빈 프로젝트 만들고, 프로젝트 속성에 들어간다.


그러면 VS++ 디렉터리라는 항목에서 포함 디렉터리에 들어가서, 

SFML 폴더 안의 include라는 폴더를 추가하면 된다. 이건 #include 할때 SFML 전용 헤더들을 쓸 수 있게 하려는 것이다.




그리고 링커-일반 페이지에서 추가 라이브러리 디렉터리에 들어가,

이번에는 lib라는 폴더를 추가한다.



그리고 마지막으로 링커-입력 페이지에서 추가 종속성에 들어가,

lib 폴더에 있는 .lib 파일들 이름을 적어놓는다.

뒤에 -d 붙은 것들은 디버깅 모드에서 쓰는 거고 안붙은건 릴리즈모드에서 쓰는 것이다. 필요한걸로 알아서 잘 붙이자



그럼 이제 끝이다.


코드를 짜넣고 실행을 해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <SFML/Graphics.hpp>
#include <string>
#include <exception>
 
int main(void)
{
    // main window 생성
    sf::RenderWindow window(sf::VideoMode(400300), "SFML window");
 
    // 쓸 폰트 생성
    sf::Font font;
    if (!font.loadFromFile(R"(C:\Users\sssan\Library\Fonts\NanumFont\NanumGothic.ttf)"))
        throw std::exception("font error");
 
    // 화면에 쓸 내용
    sf::Text text("Hello SFML", font, 50);
    text.setFillColor(sf::Color::Green); //글씨 색깔
 
    // 윈도우 루프 시작
    while (window.isOpen())
    {
        sf::Event event;
 
        // 종료 여부 체크
        while (window.pollEvent(event))
            if (event.type == sf::Event::Closed)
                window.close();
 
        // 화면 청소
        window.clear();
 
        // 화면에 글씨 쓰기
        window.draw(text);
 
        // 띄우기
        window.display();
    }
}
cs


잘 된다.



그리고 다른 컴파일러에서 CMake로 라이브러리를 추가하려거든, 대충 이렇게 쓰면 된다.

본인은 Clion을 썼다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmake_minimum_required(VERSION 3.10)
project(Simple_Music)
 
set(CMAKE_CXX_STANDARD 17)
 
include_directories("C:/Users/sssan/Library/SFML-2.5.0/bin")
include_directories("C:/Users/sssan/Library/SFML-2.5.0/include")
 
# 라이브러리 종속성
set(SFML_LIB "C:/Users/sssan/Library/SFML-2.5.0/lib")
link_libraries(${SFML_LIB}/sfml-system-d.lib)
link_libraries(${SFML_LIB}/sfml-graphics-d.lib)
link_libraries(${SFML_LIB}/sfml-window-d.lib)
link_libraries(${SFML_LIB}/sfml-audio-d.lib)
link_libraries(${SFML_LIB}/sfml-network-d.lib)
link_libraries(${SFML_LIB}/sfml-main-d.lib)
 
add_executable(Simple_Music main.cpp)
cs


설정

트랙백

댓글