Skip to content

Commit

Permalink
Merge pull request #2781 from ota/pyopenjtalk_g2p_accent
Browse files Browse the repository at this point in the history
  • Loading branch information
kan-bayashi authored Dec 18, 2020
2 parents 1ee24c3 + 9daf1e2 commit bba6712
Showing 5 changed files with 90 additions and 1 deletion.
3 changes: 3 additions & 0 deletions egs2/TEMPLATE/tts1/README.md
Original file line number Diff line number Diff line change
@@ -262,6 +262,9 @@ You can change via `--g2p` option in `tts.sh`.
- e.g. `Hello World` -> `[HH, AH0, L, OW1, W, ER1, L, D]`
- `pyopenjtalk`: [r9y9/pyopenjtalk](https://github.com/r9y9/pyopenjtalk)
- e.g. `こんにちは` -> `[k, o, N, n, i, ch, i, w, a]`
- `pyopenjtalk_accent`: [r9y9/pyopenjtalk](https://github.com/r9y9/pyopenjtalk)
- Add accent information labels in addition to phoneme labels
- e.g. `こんにちは` -> `['k', '5', '-4', 'o', '5', '-4', 'N', '5', '-3', 'n', '5', '-2', 'i', '5', '-2', 'ch', '5', '-1', 'i', '5', '-1', 'w', '5', '0', 'a', '5', '0']`
- `pyopenjtalk_kana`: [r9y9/pyopenjtalk](https://github.com/r9y9/pyopenjtalk)
- Use kana instead of phoneme
- e.g. `こんにちは` -> `[コ, ン, ニ, チ, ワ]`
1 change: 1 addition & 0 deletions espnet2/bin/tokenize_text.py
Original file line number Diff line number Diff line change
@@ -231,6 +231,7 @@ def get_parser() -> argparse.ArgumentParser:
"g2p_en",
"g2p_en_no_space",
"pyopenjtalk",
"pyopenjtalk_accent",
"pyopenjtalk_kana",
"pypinyin_g2p",
"pypinyin_g2p_phone",
1 change: 1 addition & 0 deletions espnet2/tasks/tts.py
Original file line number Diff line number Diff line change
@@ -185,6 +185,7 @@ def add_task_arguments(cls, parser: argparse.ArgumentParser):
"g2p_en",
"g2p_en_no_space",
"pyopenjtalk",
"pyopenjtalk_accent",
"pyopenjtalk_kana",
"pypinyin_g2p",
"pypinyin_g2p_phone",
14 changes: 14 additions & 0 deletions espnet2/text/phoneme_tokenizer.py
Original file line number Diff line number Diff line change
@@ -22,6 +22,18 @@ def pyopenjtalk_g2p(text) -> List[str]:
return phones


def pyopenjtalk_g2p_accent(text) -> List[str]:
import pyopenjtalk
import re

phones = []
for labels in pyopenjtalk.run_frontend(text)[1]:
p = re.findall(r"\-(.*?)\+.*?\/A:([0-9\-]+).*?\/F:.*?_([0-9])", labels)
if len(p) == 1:
phones += [p[0][0], p[0][2], p[0][1]]
return phones


def pyopenjtalk_g2p_kana(text) -> List[str]:
import pyopenjtalk

@@ -96,6 +108,8 @@ def __init__(
self.g2p = G2p_en(no_space=True)
elif g2p_type == "pyopenjtalk":
self.g2p = pyopenjtalk_g2p
elif g2p_type == "pyopenjtalk_accent":
self.g2p = pyopenjtalk_g2p_accent
elif g2p_type == "pyopenjtalk_kana":
self.g2p = pyopenjtalk_g2p_kana
elif g2p_type == "pypinyin_g2p":
72 changes: 71 additions & 1 deletion test/espnet2/text/test_phoneme_tokenizer.py
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@
try:
import pyopenjtalk

params.extend(["pyopenjtalk", "pyopenjtalk_kana"])
params.extend(["pyopenjtalk", "pyopenjtalk_accent", "pyopenjtalk_kana"])
del pyopenjtalk
except ImportError:
pass
@@ -65,6 +65,76 @@ def test_text2tokens(phoneme_tokenizer: PhonemeTokenizer):
"t",
"a",
]
elif phoneme_tokenizer.g2p_type == "pyopenjtalk_accent":
input = "昔は俺も若かった"
output = [
"m",
"4",
"-3",
"u",
"4",
"-3",
"k",
"4",
"-2",
"a",
"4",
"-2",
"sh",
"4",
"-1",
"i",
"4",
"-1",
"w",
"4",
"0",
"a",
"4",
"0",
"o",
"3",
"-2",
"r",
"3",
"-1",
"e",
"3",
"-1",
"m",
"3",
"0",
"o",
"3",
"0",
"w",
"2",
"-1",
"a",
"2",
"-1",
"k",
"2",
"0",
"a",
"2",
"0",
"k",
"2",
"1",
"a",
"2",
"1",
"cl",
"2",
"2",
"t",
"2",
"3",
"a",
"2",
"3",
]
elif phoneme_tokenizer.g2p_type == "pyopenjtalk_kana":
input = "昔は俺も若かった"
output = ["ム", "カ", "シ", "ワ", "オ", "レ", "モ", "ワ", "カ", "カ", "ッ", "タ"]

0 comments on commit bba6712

Please sign in to comment.