En esta ocasión vamos a repasarlos conceptos de la biblioteca SFML 2 dedicados al menejo del sonido y de la música. Trataremos las diferencias entre uno y otro y como se manejas desde SFML 2.
Sonidos
Un sonido SFML lo interpreta como algo que "suena" en un determinado momento como un choque, el disparo de un proyectil o unos pasos. Los sonidos funcionan de la misma manera que las texturas y los sprites y las fuentes y los textos. Se carga un recurso en este caso un SoundBuffer y se crea un objeto que los usa un Sound, pueden existir muchos Sound que usen el mismo SoundBuffer a diferente volumen, frecuencia etc.
Música
Lá música al contrario de los sonidos están pensada para sonar a lo largo del tiempo y no como algo puntal, al contrario que los sonidos no se carga en memoria sino que se reproduce a través de stream desde el fichero en la memoria secundaria.
Como siempre lo mejor es ver un ejemplo de uso.
#include <SFML/Graphics.hpp> | |
#include <SFML/Audio.hpp> | |
int main() | |
{ | |
// Crea una ventana de 640x480x32 con el título SFML window | |
sf::RenderWindow window(sf::VideoMode(640, 480, 32), "SFML window"); | |
// Activa la sincronización vertical (60 fps) | |
window.setVerticalSyncEnabled(true); | |
// Creamos un SoundBuffer para almacenar un sonio | |
sf::SoundBuffer buffer; | |
// Cargamos un archivo en el buffer | |
if (!buffer.loadFromFile("data/sonido.ogg")) | |
{ | |
return EXIT_FAILURE; | |
} | |
// Creamos un sonido | |
sf::Sound sonido; | |
// Le asignamos el buffer cargado | |
sonido.setBuffer(buffer); | |
// establecemos el volumen a 80 | |
sonido.setVolume(80); | |
// Creamos un objeto música | |
sf::Music musica; | |
// Abrimos el fichero de música que queremos reproducir | |
musica.openFromFile("data/musica.ogg"); | |
// Activamos el loop cuando acabe empezará de nuevo | |
musica.setLoop(true); | |
// Empezamos a reproducir nuesta música | |
musica.play(); | |
// Game Loop mientras la ventana esté abierta | |
while (window.isOpen()) | |
{ | |
// Creamos un objeto evento | |
sf::Event event; | |
// Procesamos la pila de eventos | |
while (window.pollEvent(event)) | |
{ | |
// Si el evento es de tipo Closed cerramos la ventana | |
if (event.type == sf::Event::Closed) | |
window.close(); | |
// Si pulsamos la tecla espacio que se reproduzca el sonido | |
else if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space) | |
{ | |
sonido.play(); | |
} | |
} | |
// Limpiamos la pantalla | |
window.clear(sf::Color(180, 200, 255)); | |
// Actualizamos la ventana | |
window.display(); | |
} | |
return 0; | |
} |
Al ejecutar empezará a sonar la música y al pulsar la barra espaciadora sonará nuestro sonido.
Con esto terminamos el repaso general al SFML 2, en el próximo artículo crearemos el juego del Pong entero para poner en práctica lo visto en estos artículos.
En Genbeta Dev | Artículos anteriores de SFML 2 Más información | Documentación de SFML 2