2015-01-05 2 views
0

У меня проблема с воспроизведением звуков.love2d играет звук дважды?

Целью является создание программы для перевода текста в речь, которая говорит с моим голосом.

Я записал много фонем (.wav-файлов с частями речи), которые должны играть друг за другом в правильном порядке. каждый звук должен воспроизводиться ТОЛЬКО, если предыдущий звук закончил воспроизведение. так что если моя программа должна сказать «привет», то он делает это:

**play("h.wav") 
if "h.wav":isStopped() then: 
play("e.wav") 
if "e.wav":isStopped() then... etc ...** 

Для тестирования я хочу играть «a.wav» дважды, но проблема в том, что я слышу только «А» один раз .. , если я играю, например «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

спасибо за ответ, я сразу вижу ошибку в вашем подсказке: если первый звук воспроизводится он сразу же перестает играть и играет снова, уловка - заставить его подождать, пока он не будет полностью закончен, а THEN воспроизвести его снова ... Я думаю, что это ошибка в звуковой dll love2d. когда источник закончил игру, и вы снова воспроизводите его (с помощью: play), он иногда возвращает false: isPlaying - в результате некоторые слова пропускались, если вы использовали их дважды по одной и той же фразе ... – Tom

+0

ow, я вижу, что вы пытаетесь сказать. да, я мог бы попробовать это, но я надеялся, что для этого есть чистое решение, может быть, какая-то другая dll, которую я мог бы использовать для звуков? (звуки должны быстро воспроизводиться друг за другом (и загружаться в баране), потому что его для текстовых целей ..) – 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

Смежные вопросы