48 lines
1.1 KiB
Lua
48 lines
1.1 KiB
Lua
-- snippet from
|
|
-- https://love2d.org/wiki/Minimalist_Sound_Manager
|
|
-- <3
|
|
do
|
|
-- will hold the currently playing sources
|
|
local sources = {}
|
|
|
|
-- check for sources that finished playing and remove them
|
|
-- add to love.update
|
|
function love.audio.update()
|
|
local remove = {}
|
|
for _,s in pairs(sources) do
|
|
if not s:isPlaying() then
|
|
remove[#remove + 1] = s
|
|
end
|
|
end
|
|
|
|
for i,s in ipairs(remove) do
|
|
sources[s] = nil
|
|
end
|
|
end
|
|
|
|
-- overwrite love.audio.play to create and register source if needed
|
|
local play = love.audio.play
|
|
function love.audio.play(audio)
|
|
local what = audio.path
|
|
local how = audio.type
|
|
local loop = audio.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
|
|
|
|
-- stops a source
|
|
local stop = love.audio.stop
|
|
function love.audio.stop(src)
|
|
if not src then return end
|
|
stop(src)
|
|
sources[src] = nil
|
|
end
|
|
end
|