Difference between revisions of "Minimalist Sound Manager (日本語)"
(Created page with "minimalist sound manager (最小音声管理器) はライブラリを丸ごと追加せずに音声の再生をより容易にします: <source lang='lua'> do -- 現...") |
m |
||
Line 69: | Line 69: | ||
[[Category:Snippets (日本語)]] | [[Category:Snippets (日本語)]] | ||
+ | {{#set:LOVE Version=any}} | ||
+ | {{#set:Description=音声 Source オブジェクトを管理するためのコードです。}} |
Latest revision as of 00:55, 15 November 2016
minimalist sound manager (最小音声管理器) はライブラリを丸ごと追加せずに音声の再生をより容易にします:
do
-- 現在再生中のソースを保持します
local sources = {}
-- ソースの再生終了および削除されたか確認します
-- 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
-- 必要であればソースの作成および登録を行い love.audio.play を上書きします
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
-- ソースの停止
local stop = love.audio.stop
function love.audio.stop(src)
if not src then return end
stop(src)
sources[src] = nil
end
end
さて、実際のソース・オブジェクトに関して心配をせずに効果音および背景音楽を再生することができます:
function love.load()
-- 必要であればソースのハンドルを取得したままにします
bgm = love.audio.play("background-music.ogg", "stream", true) -- 背景音楽の段階復号化およびループ
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) -- ストリーミングおよびループしたままにします
else
love.audio.play("explosion.ogg") -- 爆発音を一回再生します
end
end