見出し画像

【PSDToolKit】入力したテキストをLuaで自動改行する方法【voiceroid解説】

1,はじめに

PSDToolKitは、我々voiceroid解説動画を制作する者にとってインフラともいうべき存在です。開発者のoov様に、僭越ながら感謝の意を表します。
さて、voiceroid解説を作成していると、入力したテキストを改行したくなることがあります。PSDToolKitとvoiceroidUtilを組み合わせて使っている場合、生成された字幕準備オブジェクトのテキストを改行するだけでよく、大した手間はかからないのですが、多くの文章がある場合、これは単純作業となり骨が折れます。できることならこの操作は自動化したいですよね。
本記事では、Luaを用いてこれを自動化していきます。

2,前提

Aviutl及びPSDToolKit、voiceroidUtilを用いてvoiceroid解説を作成していることが前提となります。詳細な方法については以下の記事をご覧ください。

3,方法

まずはscriptフォルダ内のPSDToolKitフォルダ内にあるsetting.lua-templateファイルを見つけましょう。その後、これをsetting.luaに改名します。
これをテキストエディタで開いて、元々あるテキストを削除し、代わりに以下をコピー&ペーストします。

local P = {}
function insert_newlines_utf8(input_string)
    local result = {} -- 結果を格納するテーブル
    local length = 0 -- 現在の文字数カウント
    local buffer = {} -- 32文字分を一時的に保存するバッファ

    -- UTF-8文字を1文字ずつ処理
    for uchar in input_string:gmatch("[^\128-\191][\128-\191]*") do
        table.insert(buffer, uchar) -- バッファに追加
        length = length + 1

        -- 32文字たまったら改行
        if length == 32 then
            table.insert(result, table.concat(buffer)) -- バッファを結合して結果に追加
            table.insert(result, "\n") -- 改行を追加
            buffer = {} -- バッファをリセット
            length = 0 -- カウントをリセット
        end
    end

    -- 最後に残ったバッファを追加
    if #buffer > 0 then
        table.insert(result, table.concat(buffer))
    end

    -- 結果を結合して返す
    return table.concat(result)
end
function P:wav_subtitle_replacer(s)
    return insert_newlines_utf8(s)
  end
return P

これによって、voiceroidUtilによって自動で入力されるテキストについて、32文字ごとに改行記号(\n)が挿入されます。したがって、手動で改行を挟むことなく自動で改行されるわけですね。
なお、上記の「32」を変えることで文字数を変更することができます。是非、お試しください。

4,おしまい

開発者様のoov氏も公式ドキュメントで述べられていますが、このsetting.luaではPSDToolKitの詳細な挙動を設定しています。他にも色々設定できるようなので、色々試してみると良いかもしれません。
ちなみに、今回のようにwav_subtitle_replacer関数を使うことで、自動挿入された字幕準備オブジェクトのテキストを自動で変更することができます。以下は、そのテンプレートです。

local P = {}
function P:wav_subtitle_replacer(s)
    return s
  end
return P

ご自身の環境に合わせて変更すると楽しそうですね!

いいなと思ったら応援しよう!