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