-- 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
