pydominoの使用例
pythonライブラリの場合
import numpy as np
import librosa
import pydomino
alignmer: pydomino.Aligner = pydomino.Aligner("onnx_model/phoneme_transition_model.onnx")
wav_source: np.ndarray = librosa.load("example/dowaNgo.wav", sr=16_000, mono=True, dtype=np.float32)[0]
phonemes: list[str] = ["pau"] + ["d", "o", "w", "a", "N", "g", "o"] + ["pau"]
alignment_result: list[tuple[float, float, str]] = alignmer.align(wav_source, " ".join(phonemes), 3)
print(f"{alignment_result}")
とすると、以下のアラインメント結果が得られます
[
(0.0, 0.10999999940395355, "pau"),
(0.10999999940395355, 0.14000000059604645, "d"),
(0.14000000059604645, 0.17000000178813934, "o"),
(0.17000000178813934, 0.20999999344348907, "w"),
(0.20999999344348907, 0.36000001430511475, "a"),
(0.36000001430511475, 0.44999998807907104, "N"),
(0.44999998807907104, 0.49000000953674316, "g"),
(0.49000000953674316, 0.6200000047683716, "o"),
(0.6200000047683716, 0.754687488079071, "pau"),
]
ここで、第3引数の最小割り当てフレーム数を5に変えてみると、とすると、以下のアラインメント結果が得られます
alignment_result: list[tuple[float, float, str]] = alignmer.align(wav_source, " ".join(phonemes), 5)
print(f"{alignment_result}")
[
(0.0, 0.029999999329447746, "pau"),
(0.029999999329447746, 0.10999999940395355, "d"),
(0.10999999940395355, 0.1599999964237213, "o"),
(0.1599999964237213, 0.20999999344348907, "w"),
(0.20999999344348907, 0.36000001430511475, "a"),
(0.36000001430511475, 0.4399999976158142, "N"),
(0.4399999976158142, 0.49000000953674316, "g"),
(0.49000000953674316, 0.6200000047683716, "o"),
(0.6200000047683716, 0.754687488079071, "pau"),
]
音素 "w" に割り当てられた秒数が 0.03秒から0.05秒に伸びます。これが、最小割り当てフレーム数の保証によるものです。このフレーム数の保証は両端の pau トークンには適用されていません。このことは、最小割り当てフレーム数を5に変えてみたときの最初の pau トークンに割り当てられた秒数が0.03秒であることからもわかります。
コマンドラインツールの場合
ライブラリのインストールによって、仮想環境にコマンドラインツールもビルドされます。これによってアラインメントの実行も可能です
たとえば
domino \
--input_path example/dowaNgo.wav \
--input_phoneme "pau d o w a N g o pau" \
--output_path result.lab \
--onnx_path=onnx_model/phoneme_transition_model.onnx \
--min_frame=3
とすると、以下のアラインメント結果が labファイル(result.lab)に出力されます
$ cat result.lab
0.000 0.110 pau
0.110 0.140 d
0.140 0.170 o
0.170 0.210 w
0.210 0.360 a
0.360 0.450 N
0.450 0.490 g
0.490 0.620 o
0.620 0.755 pau