Minimalist Sound Manager (Español)

Un administrador de sonido minimalista para hacer más fácil sonidos sin añadir una biblioteca entera:

do
    -- contenedor para las fuentes que se esten reproduciendo
    local sources = {}

    -- revisa si hay fuentes que terminaron de reproducirse y las remueve
    -- añadir a love.update
    function love.audio.update()
        local remove = {}
        for _,s in pairs(sources) do
            if s:isStopped() then
                remove[#remove + 1] = s
            end
        end

        for i,s in ipairs(remove) do
            sources[s] = nil
        end
    end

    -- sobrescribe love.audio.play para crear y registrar la fuente si se necesita
    local play = love.audio.play
    function love.audio.play(what, how, loop)
        local src = what
        if type(what) ~= "userdata" or not what:typeOf("Source") then
            src = love.audio.newSource(what, how)
            src:setLooping(loop or false)
        end

        play(src)
        sources[src] = src
        return src
    end

    -- detiene una fuente
    local stop = love.audio.stop
    function love.audio.stop(src)
        if not src then return end
        stop(src)
        sources[src] = nil
    end
end

Ahora puedes reproducir efectos de sonido y música de fondo sin preocuparte de los objetos de fuente (source):

function love.load()
    -- seguiras teniendo un manejador de fuentes si lo necesitas
    bgm = love.audio.play("background-music.ogg", "stream", true) -- reproduce y repite musica de fondo
end

function love.update(dt)
    love.audio.update()
end

function love.keypressed(key)
    if key == 's' then
        love.audio.stop(bgm)
    elseif key == 'p' then
        love.audio.play(bgm) -- sigue reproduciendo y repitiendose
    else
        love.audio.play("explosion.ogg") -- reproduce un sonido de explosion una vez
    end
end

Otros idiomas