SFML: Problema cargando sf::Sound con función fuera de clase

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

SFML: Problema cargando sf::Sound con función fuera de clase

Notapor Geo » Sab Ago 21, 2010 6:25 am

No sabía si ponerlo aquí o en el foro de bibliotecas, pero creo que no es un problema exclusivo de SFML.

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 :P. Si alguien tiene oportunidad de darle un vistazo, el código completo está en este repositorio: http://bitbucket.org/josejorge/pilascpp
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron