我在播放声音方面有问题。
目的是将文本与我的声音交谈。
i记录了许多音素(带有语音部分的WAV文件),需要以正确的顺序互相播放。 每个声音只有在以前的声音完成时才能播放。 因此,如果我的程序需要说“你好”,那么这样做:
**play("h.wav")
if "h.wav":isStopped() then:
play("e.wav")
if "e.wav":isStopped() then... etc ...**
出于测试目的,我想播放“ A.Wav”两次,但问题是我只会听到'a'一次... 如果我玩,例如'a'然后'b',效果很好。
任何帮助都会不胜感激!
这是我目前拥有的测试代码:
function love.load()
voice = {"a","b","e","f", ......}
for i in pairs(voice) do
voice[i] = love.audio.newSource("VOICE/" .. voice[i] .. ".wav", "static")
end
end
function love.keypressed(key)
if key == "a" then
voice[1]:play()
while voice[1]:isPlaying() do end
voice[1]:play()
while voice[1]:isPlaying() do end
end
end
if ( voice[ 1 ]:isPlaying() ) then
voice[ 1 ]:stop()
voice[ 1 ]:play()
end
我猜你可以在播放任何声音之前做到这一点。
如果您想同时播放相同的声音,则需要具有多个源的实例。 löve2d的音频经理库
https://love2d.org/wiki/slam
shere是SLAM的一个例子,它将多次播放相同的声音:
require("slam")
sounds = {
["testAudio"] = love.audio.newSource("testAudio.wav", "stream"),
}
for i = 1, 10 do
sounds["testAudio"]:play()
end
这种方式,任何目前正在播放的实例都不会停止。
您可以:clone()声源并独立播放。这样:
function love.load()
SOUNDS = { ["ominous"] = love.audio.newSource("assets/sounds/ominous.wav", "static") }
end
function PlaySound(id)
local src = SOUNDS["ominous"]:clone()
src:play()
return src
end
function love.keypressed(key)
PlaySound("ominous")
if key == "escape" then
love.event.quit()
end
end
这是thisCode
的广泛简化版本。