pydominoの使用例
pythonライブラリの場合
import numpy as np
import librosa
import pydomino
alignmer: pydomino.Aligner = pydomino.Aligner("onnx_model/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.07999999821186066, 'pau'),
(0.07999999821186066, 0.12999999523162842, 'd'),
(0.12999999523162842, 0.20000000298023224, 'o'),
(0.20000000298023224, 0.25999999046325684, 'w'),
(0.25999999046325684, 0.3400000035762787, 'a'),
(0.3400000035762787, 0.44999998807907104, 'N'),
(0.44999998807907104, 0.47999998927116394, 'g'),
(0.47999998927116394, 0.6800000071525574, 'o'),
(0.6800000071525574, 0.7300000190734863, 'pau')
]
ここで、第3引数の最小割り当てフレーム数を5に変えてみると、とすると、以下のアラインメント結果が得られます
alignment_result: list[tuple[float, float, str]] = alignmer.align(wav_source, " ".join(phonemes), 3)
print(f"{alignment_result}")
[
(0.0, 0.07999999821186066, 'pau'),
(0.07999999821186066, 0.12999999523162842, 'd'),
(0.12999999523162842, 0.20000000298023224, 'o'),
(0.20000000298023224, 0.25999999046325684, 'w'),
(0.25999999046325684, 0.3400000035762787, 'a'),
(0.3400000035762787, 0.4399999976158142, 'N'),
(0.4399999976158142, 0.49000000953674316, 'g'),
(0.49000000953674316, 0.6800000071525574, 'o'),
(0.6800000071525574, 0.7300000190734863, 'pau')
]
音素 "g" に割り当てられた秒数が 0.03秒から0.05秒に伸びます。これが、最小割り当てフレーム数の保証によるものです。
コマンドラインツールの場合
git clone と pip install ./ を使った場合、./build ディレクトリ以下にコマンドラインツールがビルドされます。
これによってアラインメントの実行も可能です
たとえば
$ build/{temporary-directory}/pydomino/domino --input_path example/dowaNgo.wav --input_phoneme "pau d o w a N g o pau" --output_path result.lab -N 5
とすると、以下のアラインメント結果が labファイル(result.lab)に出力されます
$ cat result.wav
0.00 0.08 pau
0.08 0.13 d
0.13 0.20 o
0.20 0.26 w
0.26 0.34 a
0.34 0.44 N
0.44 0.49 g
0.49 0.68 o
0.68 0.73 pau