示例#1
0
// Play de un sonido no localizado (volumen constante)
void SoundMan::playSound(const std::string& name) const {
	if(soundExists(name)) {
		Mix_Chunk* m = sound_map.find(name)->second;
		Mix_VolumeChunk(m, MIX_MAX_VOLUME); // Setteamos el volumen
		// Play
		Mix_PlayChannel(-1, m, 0);
	}else{
		std::stringstream ss;
		ss << "Error, invalid sound <" << name << "> requested\n";
		err_log.escribir(ss.str());
	}
}
示例#2
0
// Agrega el recurso con nombre name ubicado en el path dado por path
// Devuelve true o false y loggea en caso de error
bool SoundMan::addSound(const std::string& name, const std::string& path) {
	if(soundExists(name)) {
		std::cerr << "Error loading " << name << "; resource already exists\n";
		return false;
	}
	Mix_Chunk* m = Mix_LoadWAV(path.c_str());
	if(m == NULL) {
		std::cerr << "Error loading <" << name << ">: " << path << "\n";
		std::cerr << "Err: " << Mix_GetError() << "\n";
		return false;
	}else{
		sound_map[name] = m;
	}
	return true;
}
示例#3
0
// Devuelve un puntero a la Surface asociada con name
void SoundMan::playSound(const std::string& name, int source_x, int source_y) const {
	if(soundExists(name)) {
		Mix_Chunk* m = sound_map.find(name)->second;
		// Cambiamos el volumen de acuerdo a la distancia con el personaje
		int v = int(MIX_MAX_VOLUME - ( float(MIX_MAX_VOLUME) / float(this->MAX_AUDIBLE_DISTANCE) *
			::distance<float>(source_x, source_y, pjl->getX(), pjl->getY()) ));
		if(v < 0) v = 0; // Cap por menor
		//std::cout << "Sound: " << name << "\n";
		//std::cout << "Source: (" << source_x << "," << source_y << ")\n";
		//std::cout << "Listener: (" << pjl->getX() << "," << pjl->getY() << ")\n";
		//std::cout << "Distance: " << ::distance<float>(source_x, source_y, pjl->getX(), pjl->getY()) << "\n";
		//std::cout << "Sound volume: " << v << "\n";
		Mix_VolumeChunk(m, v);
		// Play
		Mix_PlayChannel(-1, m, 0);
	}else{
		std::stringstream ss;
		ss << "Error, invalid sound <" << name << "> requested\n";
		err_log.escribir(ss.str());
	}
}
示例#4
0
int RosalilaSound::playSound(std::string variable, int channel, int loops, int panning, bool uses_camera)
{
    if(!soundExists(variable))
    {
        rosalila()->utility->writeLogLine("Error: "+variable+" sound does not exists.");
        return -1;
    }

    if(sounds[variable]!=NULL)
    {
        int return_channel = Mix_PlayChannel( channel, sounds[variable], loops);
        if(panning != 0)
        {
            if(uses_camera)
                panning -= rosalila()->graphics->camera_x;
            int left = panning*255/rosalila()->graphics->screen_width;
            Mix_SetPanning(return_channel, 254 - left, left);
        }

        return return_channel;
    }

    return -1;
}