- Notifications
You must be signed in to change notification settings - Fork80
Python wrapper for OpenJTalk
License
r9y9/pyopenjtalk
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A python wrapper forOpenJTalk.
The package consists of two core components:
- Text processing frontend based on OpenJTalk
- Speech synthesis backend using HTSEngine
- The package is built with themodified 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 themodified 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.
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
- Linux
- Mac OSX
- Windows (MSVC) (seethis PR)
pip install pyopenjtalk
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 .
Please check the notebook versionhere (nbviewer).
In [1]:importpyopenjtalkIn [2]:fromscipy.ioimportwavfileIn [3]:x,sr=pyopenjtalk.tts("おめでとうございます")In [4]:wavfile.write("test.wav",sr,x.astype(np.int16))
In [1]:importpyopenjtalkIn [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 checklab_format.pdf
inHTS-demo_NIT-ATR503-M001.tar.bz2 for more details about full-context labels.
In [1]:importpyopenjtalkIn [2]:pyopenjtalk.g2p("こんにちは")Out[2]:'k o N n i ch i w a'In [3]:pyopenjtalk.g2p("こんにちは",kana=True)Out[3]:'コンニチワ'
- Create a CSV file (e.g.
user.csv
) and write custom words like below:
GNU,,,1,名詞,一般,*,*,*,*,GNU,グヌー,グヌー,2/3,*
- Call
mecab_dict_index
to compile the CSV file.
In [1]:importpyopenjtalkIn [2]:pyopenjtalk.mecab_dict_index("user.csv","user.dic")readinguser.csv ...1emittingdouble-array:100%|###########################################|done!
- 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'
After v0.3.0, therun_marine
option has been available for estimating the Japanese accent with the DNN-based method (seemarine). 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]:importpyopenjtalkIn [2]:x,sr=pyopenjtalk.tts("おめでとうございます",run_marine=True)# for TTSIn [3]:label=pyopenjtalk.extract_fullcontext("こんにちは",run_marine=True)# for text processing frontend only
- pyopenjtalk: MIT license (LICENSE.md)
- Open JTalk: Modified BSD license (COPYING)
- htsvoice in this repository: Please checkpyopenjtalk/htsvoice/README.md.
- marine: Apache 2.0 license (LICENSE)
HTS Working Group for their dedicated efforts to develop and maintain Open JTalk.
About
Python wrapper for OpenJTalk
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors7
Uh oh!
There was an error while loading.Please reload this page.