VOICEPEAKのコマンドラインを使用して、テキストファイルを読み込んで.wavファイルを出力してみた。2回目のチャレンジです。
前回コマンドラインからテキストファイルを読み込んで.wavファイルを出力しました。しかし、読み上げ可能なテキスト量が140文字に制限されているため、VOICEPEAKエディターが遅い問題を回避する実用的な使用法ができない。ということがわかりました。
今回はテキストファイルを1行ごと別ファイルに分解し、分解したファイルをVOICEPEAKで.wavファイルにするバッチファイルを作成してみました。
テキストファイルを1行ごと別ファイルに分解する
前回同様、AI様にテキストファイルを1行ごと別ファイルに分解するバッチを書いてもらいました。
@echo off
setlocal enabledelayedexpansion
REM 入力フォルダのパス
set "input_folder=%~dp0"
REM 出力フォルダのパス
set "output_folder=%~dp0Output"
REM 出力先フォルダが存在しない場合は作成
if not exist "!output_folder!" mkdir "!output_folder!"
REM 入力フォルダ内の各テキストファイルに対して処理
for %%F in ("%input_folder%\*.txt") do (
set "input_file=%%F"
set "filename=%%~nF"
REM 出力ファイルのベース名を設定
set "output_base=!output_folder!\!filename!_"
REM テキストファイルを1行ごとに分割
set /a count=0
for /f "delims=" %%A in (!input_file!) do (
set /a count+=1
echo Processing file: !input_file!
echo Output base: !output_base!
echo Count: !count!
echo %%A > "!output_base!!count!.txt"
)
echo File !input_file! split into !count! files.
)
pause
AIの書いたスクリプトをテキストエディターにペーストして、拡張子を.bat にして保存します。文字化けしないように .batファイル、.txtファイルの文字コードは「シフト JIS」に統一します。
分解に使用するテキストファイルの中身。文字のない行は無視されます。
.batファイルをダブルクリックすると、同じディレクトリにある.txtファイルが1行ごと別の.txtファイルに分割されました。
分解されたテキストの中身。1行のみ保存されているのが確認できます。
複数のテキストファイルを.wavファイルに変換する
分解した複数のテキストファイルを、VOICEPEAKを使って.wavファイルに変換します。これは前回AI様に書いてもらったバッチがそのまま使用できます。
@echo off
setlocal enabledelayedexpansion
REM 同じディレクトリにあるテキストファイルを読み込んで WAV ファイルに出力する
for %%F in ("%~dp0\*.txt") do (
set "input_file=%%F"
REM 出力ファイル名を元のファイル名に基づいて設定
set "output_file=!input_file:.txt=_output.wav!"
REM Voicepeak を使用してテキストファイルを読み込み、WAV ファイルに出力
"C:\Program Files\VOICEPEAK\voicepeak.exe" -t "!input_file!" -n "Japanese Female 1" -o "!output_file!" -e happy=0,fun=0,sad=0,angry=0
echo Voicepeak processing for !input_file! completed. Output saved to !output_file!
)
pause
バッチファイルは1行ごとにコマンドを実行してるので、テキストファイルを分解するバッチの後ろに.wavファイルに変換するバッチを追加します。これでバッチファイルが完成しました。
@echo off
setlocal enabledelayedexpansion
REM 入力フォルダのパス
set "input_folder=%~dp0"
REM 出力フォルダのパス
set "output_folder=%~dp0Output"
REM 出力先フォルダが存在しない場合は作成
if not exist "!output_folder!" mkdir "!output_folder!"
REM 入力フォルダ内の各テキストファイルに対して処理
for %%F in ("%input_folder%\*.txt") do (
set "input_file=%%F"
set "filename=%%~nF"
REM 出力ファイルのベース名を設定
set "output_base=!output_folder!\!filename!_"
REM テキストファイルを1行ごとに分割
set /a count=0
for /f "delims=" %%A in (!input_file!) do (
set /a count+=1
echo Processing file: !input_file!
echo Output base: !output_base!
echo Count: !count!
echo %%A > "!output_base!!count!.txt"
)
echo File !input_file! split into !count! files.
)
REM 同じディレクトリにあるテキストファイルを読み込んで WAV ファイルに出力する
for %%F in ("%~dp0\Output\*.txt") do (
set "input_file=%%F"
REM 出力ファイル名を元のファイル名に基づいて設定
set "output_file=!input_file:.txt=_output.wav!"
REM Voicepeak を使用してテキストファイルを読み込み、WAV ファイルに出力
"C:\Program Files\VOICEPEAK\voicepeak.exe" -t "!input_file!" -n "Japanese Female 1" -o "!output_file!" -e happy=0,fun=0,sad=0,angry=0
echo Voicepeak processing for !input_file! completed. Output saved to !output_file!
)
pause
.batファイルをダブルクリックすると、テキストファイルを分解した後にVOICEPEAKが.wavファイルを作成します。
これで便利になった!かというと実は微妙で、VOICEPEAKの.wav出力が思いのほか遅い。今回のバッチファイルが便利に感じるかは、ワークフローしだいですね。また、140文字制限は変わらないので、1行が長い場合はファイルが出力されません。
VOICEPEAKは細かな機能のツメがあまいのが気になります。業務用途でガチで使う人向けのソフトではないのかもしれませんが、もう少し使用用途を想定した動作になって欲しいですね。