love2d播放两次声音?

时间:2015-01-05 21:34:02

标签: audio playback 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

2 个答案:

答案 0 :(得分:0)

只是想一想,如果你试过这个怎么办:

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

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

答案 1 :(得分: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

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