SFML - Partie 9 - Son et musique

Cet article appartient à une série de tutoriels dédiés à SFML. Le lecteur est invité à se référer aux autres sections de ce tutoriel en suivant ce lien : SFML tutoriel.

Introduction

Cette page explique comment jouer de la musique ou des sons avec SFML. L'exemple présenté sur cette page a été réalisé avec les versions suivantes :

Cette vidéo vous donne un aperçu du résultat :

Exemple et code source

Cet exemple montre comment jouer de la musique ou des sons en SFML.

/*!
 * \file    main.cpp
 * \brief   Music and sound examples (http://www.lucidarme.me/?p=6127)
 * \author  Philippe Lucidarme
 * \version 1.0
 * \date    12/20/2016
 */

#include <SFML/Audio.hpp>
#include <iostream>

// Wait for ms milliseconds
void delay_ms(int ms)
{
    sf::Clock Timer;
    while (Timer.getElapsedTime().asMilliseconds()<ms);
}

int main()
{
    // _____________________________
    // ::: load background music :::

    sf::Music music;
    if (!music.openFromFile("../music.ogg"))
    {
        std::cerr << "Error while loading background music file" << std::endl;
        return -1;
    }

    // __________________
    // ::: Load sound :::

    sf::SoundBuffer buffer;
    if (!buffer.loadFromFile("../birds.wav"))
    {
        std::cerr << "Error while loading sound file" << std::endl;
        return -1;
    }

    // ____________________
    // :::  Play sounds :::

    // Play music
    std::cout << "Start background music" << std::endl;
    music.play();
    delay_ms(1500);

    // Play wav sound over the music
    std::cout << "Play wav sound" << std::endl;
    sf::Sound sound;
    sound.setBuffer(buffer);
    sound.play();
    delay_ms(1500);

    // Increase pitch
    std::cout << "Increase pitch" << std::endl;
    music.setPitch(1.4);
    delay_ms(1500);

    // Reset pitch
    std::cout << "Reset pitch" << std::endl;
    music.setPitch(1.);
    delay_ms(1500);

    // Modify volume
    std::cout << "Fade out" << std::endl;
    for (int vol=100;vol>5;vol--)
    {
        music.setVolume(vol);
        delay_ms(50);
    }

    // Stop music
    std::cout << "Stop music" << std::endl;
    music.stop();
    return 0;
}

Téléchargement

Les fichiers et les codes sources peuvent être téléchargés depuis GitLab :

Code source sur GitLab

Voir aussi


Dernière mise à jour : 15/03/2021