Audio 你能把一个声音放两次吗?

Audio 你能把一个声音放两次吗?,audio,playback,love2d,Audio,Playback,Love2d,我在播放声音方面有问题 其目的是制作一个与我的声音对话的文本到语音程序 我录制了很多音素(.wav文件,带有词性),需要按照正确的顺序依次播放。 仅当前一个声音播放完毕时,才能播放每个声音。 因此,如果我的程序需要说“你好”,那么它会这样做: **play("h.wav") if "h.wav":isStopped() then: play("e.wav") if "e.wav":isStopped() then... etc ...** 出于测试目的,我想玩两次“a.wav”,但问题是我只听

我在播放声音方面有问题

其目的是制作一个与我的声音对话的文本到语音程序

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

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

如果你想同时播放同一个声音两次,你需要有多个源实例

SLAM是Löve2D的音频管理器库,可以完美地处理这一问题

下面是一个SLAM示例,它会多次播放相同的声音:

require("slam")

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

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

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

感谢您的回复,我立即在您的建议代码中看到一个错误:如果播放第一个声音,它将立即停止播放并再次播放,关键是让它等待完全完成,然后再播放。。。我认为这是love2d声音dll中的一个bug。当一个源完成播放后,您再次播放它(使用:play),它有时会在:isplay上返回false-因此,如果您在同一短语上使用了两次,某些单词会被跳过…噢,我明白您想说什么了。是的,我可以尝试,但我希望有一个干净的解决方案,也许其他一些dll我可以使用的声音?(声音需要在彼此之后快速播放(并加载到ram中),因为它用于文本到语音的目的。)Ulydev,不是同时播放两次,但不要让它重叠或停止前一个声音。但是谢谢你的链接,对另一个项目来说仍然很有趣。我尝试了你的代码,并尽了最大努力,但我想这是一个Love2D错误。如果我再次尝试使用语音[1],然后是语音[2],然后是语音[1],它会起作用。我想你应该向我报告这件事,谢谢你的努力,我也知道这是一个错误