2015-01-05 191 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