Skip to main content

A python wrapper for OpenJTalk

Project description

pyopenjtalk

PyPI Python package Build Status License DOI

A python wrapper for OpenJTalk.

The package consists of two core components:

  • Text processing frontend based on OpenJTalk
  • Speech synthesis backend using HTSEngine

Notice

  • The package is built with the modified version of OpenJTalk. The modified version provides the same functionality with some improvements (e.g., cmake support) but is technically different from the one from HTS working group.
  • The package also uses the modified version of hts_engine_API. The same applies as above.

Before using the pyopenjtalk package, please have a look at the LICENSE for the two software.

Build requirements

The python package relies on cython to make python bindings for open_jtalk and hts_engine_API. You must need the following tools to build and install pyopenjtalk:

  • C/C++ compilers (to build C/C++ extentions)
  • cmake
  • cython

Supported platforms

  • Linux
  • Mac OSX
  • Windows (MSVC) (see this PR)

Installation

pip install pyopenjtalk

Development

To build the package locally, you will need to make sure to clone open_jtalk and hts_engine_API.

git submodule update --recursive --init

and then run

pip install -e .

Quick demo

Please check the notebook version here (nbviewer).

TTS

In [1]: import pyopenjtalk

In [2]: from scipy.io import wavfile

In [3]: x, sr = pyopenjtalk.tts("おめでとうございます")

In [4]: wavfile.write("test.wav", sr, x.astype(np.int16))

Run text processing frontend only

In [1]: import pyopenjtalk

In [2]: pyopenjtalk.extract_fullcontext("こんにちは")
Out[2]:
['xx^xx-sil+k=o/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:5_5%0_xx_xx/H:xx_xx/I:xx-xx@xx+xx&xx-xx|xx+xx/J:1_5/K:1+1-5',
'xx^sil-k+o=N/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'sil^k-o+N=n/A:-4+1+5/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'k^o-N+n=i/A:-3+2+4/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'o^N-n+i=ch/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'N^n-i+ch=i/A:-2+3+3/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'n^i-ch+i=w/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'i^ch-i+w=a/A:-1+4+2/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'ch^i-w+a=sil/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'i^w-a+sil=xx/A:0+5+1/B:xx-xx_xx/C:09_xx+xx/D:xx+xx_xx/E:xx_xx!xx_xx-xx/F:5_5#0_xx@1_1|1_5/G:xx_xx%xx_xx_xx/H:xx_xx/I:1-5@1+1&1-1|1+5/J:xx_xx/K:1+1-5',
'w^a-sil+xx=xx/A:xx+xx+xx/B:xx-xx_xx/C:xx_xx+xx/D:xx+xx_xx/E:5_5!0_xx-xx/F:xx_xx#xx_xx@xx_xx|xx_xx/G:xx_xx%xx_xx_xx/H:1_5/I:xx-xx@xx+xx&xx-xx|xx+xx/J:xx_xx/K:1+1-5']

Please check lab_format.pdf in HTS-demo_NIT-ATR503-M001.tar.bz2 for more details about full-context labels.

Grapheme-to-phoeneme (G2P)

In [1]: import pyopenjtalk

In [2]: pyopenjtalk.g2p("こんにちは")
Out[2]: 'k o N n i ch i w a'

In [3]: pyopenjtalk.g2p("こんにちは", kana=True)
Out[3]: 'コンニチワ'

Create/Apply user dictionary

  1. Create a CSV file (e.g. user.csv) and write custom words like below:
GNU,,,1,名詞,一般,*,*,*,*,GNU,グヌー,グヌー,2/3,*
  1. Call mecab_dict_index to compile the CSV file.
In [1]: import pyopenjtalk

In [2]: pyopenjtalk.mecab_dict_index("user.csv", "user.dic")
reading user.csv ... 1
emitting double-array: 100% |###########################################|

done!
  1. Call update_global_jtalk_with_user_dict to apply the user dictionary.
In [3]: pyopenjtalk.g2p("GNU")
Out[3]: 'j i i e n u y u u'

In [4]: pyopenjtalk.update_global_jtalk_with_user_dict("user.dic")

In [5]: pyopenjtalk.g2p("GNU")
Out[5]: 'g u n u u'

About run_marine option

After v0.3.0, the run_marine option has been available for estimating the Japanese accent with the DNN-based method (see marine). If you want to use the feature, please install pyopenjtalk as below;

pip install pyopenjtalk[marine]

And then, you can use the option as the following examples;

In [1]: import pyopenjtalk

In [2]: x, sr = pyopenjtalk.tts("おめでとうございます", run_marine=True) # for TTS

In [3]: label = pyopenjtalk.extract_fullcontext("こんにちは", run_marine=True) # for text processing frontend only

LICENSE

Acknowledgements

HTS Working Group for their dedicated efforts to develop and maintain Open JTalk.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyopenjtalk_dict-0.3.4.dev0.tar.gz (1.4 MB view hashes)

Uploaded Source

Built Distributions

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-win32.whl (967.5 kB view hashes)

Uploaded CPython 3.12 Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-musllinux_1_1_x86_64.whl (6.7 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-musllinux_1_1_i686.whl (6.6 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.2 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp312-cp312-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-win32.whl (966.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-musllinux_1_1_x86_64.whl (6.7 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-musllinux_1_1_i686.whl (6.6 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp311-cp311-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-win32.whl (966.8 kB view hashes)

Uploaded CPython 3.10 Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-musllinux_1_1_x86_64.whl (6.6 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-musllinux_1_1_i686.whl (6.5 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp310-cp310-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-win32.whl (967.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-musllinux_1_1_x86_64.whl (6.6 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-musllinux_1_1_i686.whl (6.5 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp39-cp39-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-win32.whl (967.5 kB view hashes)

Uploaded CPython 3.8 Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-musllinux_1_1_x86_64.whl (6.6 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-musllinux_1_1_i686.whl (6.5 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp38-cp38-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-win_amd64.whl (1.0 MB view hashes)

Uploaded CPython 3.7m Windows x86-64

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-win32.whl (967.5 kB view hashes)

Uploaded CPython 3.7m Windows x86

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-musllinux_1_1_x86_64.whl (6.6 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-musllinux_1_1_i686.whl (6.5 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.2 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl (6.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686 manylinux: glibc 2.17+ i686

pyopenjtalk_dict-0.3.4.dev0-cp37-cp37m-macosx_10_9_x86_64.whl (1.1 MB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page