2015-01-05 146 views
0

我有播放声音的问题。love2d播放声音两次?

目的是制作一个文本到语音程序,与我的声音交谈。

我记录了很多音素(.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 
+0

我尝试了你的代码,并尽力而为,但我猜这是一个Love2D错误。如果我尝试使用语音[1],然后使用语音[2],然后再使用语音[1],它就会起作用。我认为你应该报告http://love2d.org –

+0

感谢您的尝试,我也很难这是一个错误,问候 – Tom

回答

0

只是一个想法,如果你想这是什么:

if (voice[ 1 ]:isPlaying()) then 
    voice[ 1 ]:stop() 
    voice[ 1 ]:play() 
end 

我想你可以做到这一点播放任何声音之前。

+0

感谢您的答复,我立即看到您的建议代码中的错误:如果第一个声音播放它会立即停止播放并再次播放,抓住的是让它等到它完全完成,然后再播放它......我认为它是一个爱的声音dll中的bug。当一个源完成播放,并且你再次播放它(带:播放)时,它有时会返回false:isPlaying - 因此,如果您在同一短语中使用它们两次,某些单词将被跳过... – Tom

+0

ow,我明白你想说什么。是的,我可以尝试,但我希望有一个干净的解决方案,也许一些其他的DLL我可以使用的声音? (声音需要相互之间快速播放(并在RAM中加载),因为它用于文本到语音的目的..) – Tom

0

如果您想要同时播放两次相同的声音,则需要有多个源实例。

SLAM是Löve2D的一个音频管理程序库,可以很好地处理这个问题。

https://love2d.org/wiki/SLAM

下面是与SLAM一个例子将发挥同样的声音多次:

require("slam") 

sounds = { 
    ["testAudio"] = love.audio.newSource("testAudio.wav", "stream"), 
} 

for i = 1, 10 do 
    sounds["testAudio"]:play() 
end 

这样,这是当前正在播放不会被停止任何实例。

+0

Ulydev,不是同时播放,但不要让它重叠或停止以前的声音。但感谢链接,仍然有趣的另一个项目。 – Tom