Sincronización labial
¿Qué dices?

Hacerlo más realista
Hay varios personajes que van a hablar, y ahora mismo solo ves un bocadillo de texto. Ya tenía la opción de usar audio, pero todavía no quedaba bonito. Cuando alguien habla, la boca tiene que moverse, así que investigué cómo lo hacen en los dibujos animados.
Resumiendo, con al menos 6 a 9 imágenes distintas de la boca puedes hacer que parezca que habla de verdad. Hay varios programas que convierten el audio en la imagen que hay que mostrar.
Entrada de audio > programa > salida [ABBFGG].
Después, en el juego se muestra un fotograma distinto de la cabeza para cada letra.
-- convert csv to a lua table
local libSyncTable = {}
for line in csvData:gmatch("[^\r\n]+") do
local a, b = line:match("(%S+)\t(%w)")
local framekey
if b == "A" then
framekey = 1
elseif b == "B" then
framekey = 2
elseif b == "C" then
framekey = 3
elseif b == "D" then
framekey = 4
elseif b == "E" then
framekey = 5
elseif b == "F" then
framekey = 6
-- elseif b == "G" then
-- framekey = 7
-- elseif b == "H" then
-- framekey = 8
-- elseif b == "X" then
-- framekey = 9
end
table.insert(libSyncTable, {a, framekey})
end
Hay varios programas que hacen esto, pero yo elegí el programa gratuito https://github.com/DanielSWolf/rhubarb-lip-sync.
if not os.path.exists(audioPath_lsc):
print(f"create lcs {audioPath} with text {text}")
with open("../temp/lipsync.txt", 'w') as file:
file.write(text)
command = [
"../src/lib-dev/rhubarb/rhubarb", # Het pad naar het rhubarb-programma
audioPath_ogg, # SOUND_FILE
"--recognizer", "pocketSphinx", # Recognizer instellen
"--exportFormat", "tsv", # Export formaat instellen
"--dialogFile", f"../temp/lipsync.txt", # TEMP_DIR voor dialogFile
"--output", audioPath_lsc, # OUTPUT_FILE
"--datFrameRate", "60", # Data frame rate
"--extendedShapes", "ABCDEF" # Extended shapes
]
result = subprocess.run(command, check=True)
if result.returncode != 0:
print("error")