terça-feira, 22 de janeiro de 2013

Reproduzindo áudio



A SFML provê 2 classes para reproduzir áudio: sf::Sound e sf::Music.
sf::Sound é um objeto leve que reproduz áudio carregado de um sf::SoundBuffer. Deve ser usado para sons pequenos.
sf::Music não carrega todo o áudio na memória, em vez disso, o reproduz direto do arquivo.
As classes sf::Sound e sf::SoundBuffer trabalham da mesma maneira que sf::Sprite/sf::Texture.
Você pode carregar um buffer de som de um arquivo com a sua função loadFromFile.
#include <SFML/Audio.hpp>

int main()
{
    sf::SoundBuffer buffer;
    if (!buffer.loadFromFile("sound.wav"))
        return -1;

    return 0;
}

Como de costume, você também pode carregar um arquivo de áudio da memória (loadFromMemory) ou de um stream de entrada personalizado (loadFromStream).
Os formatos de áudio suportados podem ser encontrados aqui.
Para reproduzir o som, devemos instanciar antes a sf::Sound.
sf::SoundBuffer buffer;

sf::Sound sound;
sound.setBuffer(buffer);
sound.play();

A melhor coisa é que você pode atribuir o mesmo buffer de som para vários sons, se assim quiser. Até mesmo pode reproduzi-los juntamente.
Sons e músicas são reproduzidos em uma thread separada. Ou seja, você pode fazer o que quiser depois de começar a tocar o som que ele não vai parar de tocar até que termine ou seja interrompido explicitamente.
Tocando uma música:
sf::Music music;
if (!music.openFromFile("music.ogg"))
    return -1; // erro
music.play();

Exemplos:
// tocar playback
sound.play();

// ir para o 2º segundo
sound.setPlayingOffset(sf::seconds(2));

// pausar playback
sound.pause();

// retomar playback
sound.play();

// parar playback e rebobinar
sound.stop();

O valor do volume vai de 0 (mudo) a 100 (máximo e padrão).
sound.setVolume(50);
O atributo loop define se o som/música repete ou não.
sound.setLoop(true);

Nenhum comentário:

Postar um comentário