【问题标题】:love2d play a sound twice?love2d 播放声音两次?
【发布时间】:2015-03-03 12:10:56
【问题描述】:

我在播放声音时遇到问题。

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

我录制了很多需要以正确顺序依次播放的音素(带有词性的.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

【问题讨论】:

  • 我尝试了您的代码,并尽了最大努力,但我想这是一个 Love2D 错误。如果我尝试使用语音[1],然后使用语音[2],然后再次使用语音[1],它可以工作。我认为您应该将此报告给love2d.org
  • 感谢您的尝试,我也很难,这是一个错误,问候

标签: audio playback love2d


【解决方案1】:

只是一个想法,如果你尝试这个会怎样:

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

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

【讨论】:

  • 感谢您的回复,我立即在您的建议代码中看到一个错误:如果第一个声音正在播放,它会立即停止播放并再次播放,关键是让它等到它完全完成并且然后再玩一次...我认为它是love2d 的声音dll 中的一个错误。当一个音源完成播放后,您再次播放它(使用 :play),它有时会在 :isPlaying 上返回 false - 因此,如果您在同一个短语中使用它们两次,则会跳过某些单词...
  • 哎呀,我明白你想说什么了。是的,我可以尝试,但我希望有一个干净的解决方案,也许我可以使用其他一些 dll 来处理声音? (声音需要彼此快速播放(并加载到内存中),因为它用于文本到语音的目的..)
【解决方案2】:

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

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

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

【讨论】:

  • Ulydev,不要同时...,播放两次,但不要让它重叠或停止前一个声音。但是感谢您的链接,对于另一个项目仍然很有趣。
猜你喜欢
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多