Replicando en C++ el código del motor Pilas, agregué funciones para cargar sonidos al actor de ejemplo (el mono):
- Código: Seleccionar todo
Mono::Mono() {
imagen_normal.LoadFromFile( "data/mono_normal.png" );
imagen_grito.LoadFromFile( "data/mono_grita.png" );
imagen_sonrisa.LoadFromFile( "data/mono_sonrie.png" );
//~ Esto no funciona (no da error, pero no se reproduce el sonido)
//~ sonido_sonrisa = Pilas::cargar_sonido( "data/sonrisa.wav" );
//~ sonido_grito = Pilas::cargar_sonido( "data/grito.wav" );
//~ Esto si funciona
sf::SoundBuffer bufer1, bufer2;
bufer1.LoadFromFile( "data/sonrisa.wav" );
bufer2.LoadFromFile( "data/grito.wav" );
sonido_sonrisa.SetBuffer( bufer1 );
sonido_grito.SetBuffer( bufer2 );
SetImage( imagen_normal );
_establecer_origen_en_centro();
}
Ese código me funciona perfecto, al momento de llamar a las funciones pertinentes dentro de Mono, los sonidos se reproducen. Pero, usando el código que está comentado, los sonidos no se reproducen. La función cargar_sonido está en sonido.cpp:
- Código: Seleccionar todo
#include "sonido.h"
#include <iostream>
using std::cout;
using std::endl;
namespace Pilas {
sf::Sound cargar_sonido( const string& archivo ) {
sf::SoundBuffer bufer;
sf::Sound sonido;
if ( !bufer.LoadFromFile( archivo ) ) {
cout << "Error al cargar " << archivo << endl;
}
sonido.SetBuffer( bufer );
return sonido;
}
}
Sin embargo, si en el main hago esto:
- Código: Seleccionar todo
//~ // aquí si funciona cargando sonido con Pilas::cargar_sonido
sf::Sound prueba = Pilas::cargar_sonido( "data/grito.wav" );
prueba.Play();
El sonido se reproduce correctamente.
Tengo la duda con el hecho de usar sf::SoundBuffer temporales que se liberan incluso antes de hacer uso del sf::Sound que se creó a partir de ellos, pero en el main no tuve el problema de la reproducción, por eso sospecho que es algún tipo de acceso o declaración que no hice o que debía hacer de otra forma, pero en estos momentos tengo ganas de irme a dormir
