Leppesynkronisering

Hva sier du?

Piksler + Bevegelse + Lyd = Liv

Gjøre det mer realistisk

Det er noen figurer som skal snakke, og akkurat nå ser du bare en snakkeboble. Jeg kunne allerede bruke lyd, men det så ikke pent ut ennå. Når noen snakker, må munnen bevege seg, så jeg fant ut hvordan de gjør det i tegnefilmer.

Lang historie kort: Med minst 6 til 9 forskjellige bilder av munnen kan du få det til å se ut som om den virkelig snakker. Det finnes ulike programmer som gjør om lyd til hvilket bilde som skal vises.

Lydinput > program > [ABBFGG] output.

Deretter vises det i spillet en annen frame av hodet for hver bokstav.

    -- 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

Det finnes flere programmer som gjør dette, men jeg har valgt det gratis programmet 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")