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.000 pau
0.000 0.080 d
0.080 0.150 o
0.150 0.190 w
0.190 0.350 a
0.350 0.460 N
0.460 0.490 g
0.490 0.640 o
0.640 0.724 pau
TextGridファイルへの出力 (version 1.2.1以降)
コマンドラインツールを使った場合に限ってですが、TextGridファイルの出力に対応しました。
オプション --output_format=TextGrid を付け加えると、出力が lab ファイルではなく TextGrid ファイルとなります
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 \
--output_format=TextGrid \
--min_frame=3
とすると、以下のアラインメント結果が labファイル(result.TextGrid)に出力されます
$ cat result.TextGrid
File type = "ooTextFile"
Object class = "TextGrid"
xmin = 0
xmax = 0.724
tiers? <exists>
size = 2
item []:
item [1]:
class = "IntervalTier"
name = "phonemes"
xmin = 0
xmax = 0.724
intervals: size = 1
intervals [1]:
xmin = 0
xmax = 0.724
text = "d o w a N g o pau"
item [2]:
class = "IntervalTier"
name = "alignment result"
xmin = 0
xmax = 0.724
intervals: size = 8
intervals[1]:
xmin = 0.000
xmax = 0.080
text = "d"
intervals[2]:
xmin = 0.080
xmax = 0.150
text = "o"
intervals[3]:
xmin = 0.150
xmax = 0.190
text = "w"
intervals[4]:
xmin = 0.190
xmax = 0.350
text = "a"
intervals[5]:
xmin = 0.350
xmax = 0.460
text = "N"
intervals[6]:
xmin = 0.460
xmax = 0.490
text = "g"
intervals[7]:
xmin = 0.490
xmax = 0.640
text = "o"
intervals[8]:
xmin = 0.640
xmax = 0.724
text = "pau"