Skip to main content

A Python wrapper for OpenJTalk with additional improvements

Project description

pyopenjtalk-plus

PyPI Python package License

pyopenjtalk-plus は、各フォークでの改善を一つのコードベースにまとめ、さらなる改善を加えることを目的とした、pyopenjtalk の派生ライブラリです。

Changes in this fork

  • パッケージ名を pyopenjtalk-plus に変更
    • ライブラリ名は pyopenjtalk から変更されておらず、pyopenjtalk 本家同様に import pyopenjtalk でインポートできる
    • pyopenjtalk 本家のドロップイン代替として利用できる
  • 明示的に Python 3.11 / 3.12 / 3.13 をサポート対象に追加
    • CI 対象の Python バージョンも 3.11 以降メインに変更した
  • Windows・macOS (x64 / arm64)・Linux すべての事前ビルド済み wheels を PyPI に公開
    • pyopenjtalk は hts_engine_API・OpenJTalk・Cython に依存しており、ビルド環境の構築難易度が比較的高い
      • 特に Windows においては MSVC のインストールが必要となる
    • 事前ビルド済みの wheels を PyPI に公開することで、ビルド環境のない PC でも簡単にインストール可能にすることを意図している
  • Python 側と Cython 側の両方に型ヒント (Type Hints) を追加
  • Cython を 3.0 系に更新
    • https://github.com/cython/cython/issues/5982 の通り、Python 3.13 では一部の非推奨 C API が削除されている
    • Cython 0.x 系では Python 3.13 以降のビルドに失敗するため、Cython 3.0 系に更新した
  • numpy 2.x 系に対応
    • numpy 2.x 系では互換性のない変更が多数行われているが、公式ドキュメント によると「numpy 2.x 系でビルドした wheel であれば numpy 1.x 系でも動作する」らしい
      • pyopenjtalk-plus では、numpy 2.x 系でビルドした wheel を公開することで対応した
    • ただし、marine (marine-plus) のコードは numpy 2.x 系との互換性がないため (OverflowError が発生する) 、marine と併用する際は引き続き numpy 1.x 系が必要となる
  • pyopenjtalk.run_frontend() 関数に CLI インターフェイスを追加
    • コマンドライン引数としてテキストを受け取り、そのテキストを処理した結果を標準出力に出力する
    • 実行例: python -m pyopenjtalk "あらゆる現実を、すべて自分の方へねじ曲げたのだ。"
  • OpenJTalk 向けシステム辞書を、pyopenjtalk では初回実行時に自動ダウンロードされる open_jtalk_dic_utf_8-1.11.tar.gz から、独自にカスタマイズした pyopenjtalk-plus 向け辞書 (wheel に同梱) に変更
    • この辞書は n5-suzuki/pyopenjtalk にかつて含まれていた mecab-naist-jdic のカスタム版をベースに、jpreprocess/naist-jdic での改良点を取り込み、さらに独自に改良したもの
    • jpreprocess/naist-jdic では mecab-naist-jdic に jpreprocess 向けの改良が施されており、辞書データのミスの修正など有用な変更が多かったことから、修正内容をほぼすべて適用した
    • pyopenjtalk 本家で実装されていた _lazy_init() 関数内での辞書ダウンロード処理は pyopenjtalk-plus での辞書同梱に伴い削除している
      • 辞書データがなければ pyopenjtalk は動作しないため (つまり辞書をダウンロードしない選択肢はなく必須) 、毎回追加でダウンロードするよりも wheel に直接含めた方が安定性の面でよりベターだと考えた
      • pyopenjtalk-plus の辞書データは 100MB 以上あるが (wheel 自体は圧縮が効いて 25MB 程度) 、せいぜい数十 MB のサイズ節約よりもアクセント・読み推定精度の向上を優先した
    • カスタム辞書は pyproject.toml のあるディレクトリで task build-dictionary を実行するとビルドできる
      • 管理の簡便化のため、ビルド済みの辞書データ (*.bin / *.dic) はこの Git リポジトリに含めている
  • pyopenjtalk.run_frontend()pyopenjtalk.g2p() でも run_marine=True を指定し marine によるアクセント推定を行えるようにした
    • 以前から pyopenjtalk.extract_fullcontext() では marine による AI アクセント推定が可能だったが、pyopenjtalk.run_frontend()pyopenjtalk.g2p() にも実装した
      • 「デフォルトの学習済みモデルは JSUT コーパスのみから学習されており、論文に記載されている性能とは異なる」(≒ marine 開発元の LINE 社内では独自の音声コーパスを用いてより高性能な学習済みモデルを作成・運用している) 旨が marine の README に記載されている
      • このためデフォルトの学習済みモデルを使う限り、現状 OpenJTalk のアクセント推定の方が精度が高い傾向にある
    • pyopenjtalk-plus では PyTorch への依存が発生することからデフォルトの依存関係には含めていないが、別途 marine / marine-plus をインストールすれば利用可能
    • marine 本家は Windows や Python 3.12 以降に非対応な上、非推奨警告が多数出力される問題があるため、これらの問題に対処した marine-plus の利用を推奨します
      • pip install marine-plus で marine 本家の代わりに marine-plus をインストールできる
  • litagin02/pyopenjtalk での変更を取り込み、pyopenjtalk.unset_user_dict() 関数を追加
    • VOICEVOX で利用されている VOICEVOX/pyopenjtalk には、VOICEVOX ENGINE で利用するためのユーザー辞書機能が独自に実装されている
    • その後、pyopenjtalk v0.3.4 で VOICEVOX/pyopenjtalk と同等のユーザー辞書機能が実装された
      • VOICEVOX/pyopenjtalk の set_user_dict() 関数が update_global_jtalk_with_user_dict() 関数になるなど、同等の機能ながら関数名は変更されている
      • …が、どういう訳か VOICEVOX/pyopenjtalk には存在した「設定したユーザー辞書をリセットする」関数が実装されていない
    • このため litagin02/pyopenjtalk では VOICEVOX/pyopenjtalk から pyopenjtalk.unset_user_dict() 関数が移植されており、pyopenjtalk-plus でもこの実装を継承した
    • このほか、クロスプラットフォームで wheel をビルドするための GitHub Actions ワークフローもこのフォークから取り込んだもの
  • VOICEVOX/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • OpenJTalk の VOICEVOX 向けフォーク (VOICEVOX/open_jtalk) での変更内容を前提とした変更が多数含まれる
    • 取り込んだ変更点 (一部):
      • text2mecab() 関数を安全に改良し、エラー発生時に適切な RuntimeError を送出する
      • ARM 版 Windows でビルド可能にする
      • Windows で辞書の保存先パスに日本語を含むマルチバイト文字が含まれるとエラーが発生する問題を修正
      • 各環境でのビルドに関連する諸問題を修正
      • (OpenJTalk 側のみ) OpenJTalk 本体だけでユーザー辞書を読み込める Mecab_load_with_userdic() 関数を追加
      • (OpenJTalk 側のみ) 辞書のコンパイルに利用される mecab-dict-index モジュールにログ出力を抑制する --quiet オプションを追加
      • (OpenJTalk 側のみ) mecab-dict-index モジュールの main() 関数 (元は CLI コマンド用) をコメントアウト
        • OpenJTalk は MeCab のソースコードがベース、その MeCab 自体も非常にレガシーなソフトウェアで、お世辞にも綺麗なコードではない
        • このためか pyopenjtalk の辞書コンパイル機能は「CLI コマンド mecab-dict-index の argv と argc に相当する値を、ライブラリ側から OpenJTalk の mecab_dict_index() 関数 (mecab-dict-index コマンドのエントリーポイント) の引数として注入する」という非常にトリッキーかつ強引な手法で実装されている
        • どのみち pyopenjtalk 向け OpenJTalk では mecab-dict-index コマンドをビルドする必要がない
  • n5-suzuki/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • 複数の読み方をする漢字の読みに対し SudachiPy で形態素解析を行い、得られた結果を使い OpenJTalk から返された list[NJDFeature] 内の値を補正する実装がユニーク
    • 「何」を「なん」と読むか「なに」と読むかを判定するための scikit-learn で実装された機械学習モデルによるロジック に関して、学習済みモデルを ONNX に変換し、scikit-learn 0.24.2 への依存なしに動かせるよう改良した
      • 当該モデルは scikit-learn 0.24.2 でしか動作しないが、3年以上前にリリースされた極めて古いバージョンにつき Python 3.11 以降では動作せず、依存関係の問題もありインストール自体が困難になってきている
      • 学習用コードは含まれていなかったため推測するしかないが、モデルのバイナリに含まれる文字列から、RandomForestClassifier を用いた比較的単純な機械学習モデルだと推測される
      • ONNX 変換ツール を自作した上で ONNX に変換し、推論コード も ONNXRuntime を用いて推論するよう変更した
        • この変更により依存関係に ONNXRuntime が追加されるが、すでに機械学習関連の他ライブラリの依存関係に含まれていることも多く、実用上問題ないと判断した
  • korguchi/pyopenjtalk での変更を取り込み、多数の改良点を反映
    • このフォークで利用されている korguchi/open_jtalk では、「クァ」「グヮ」「デェ」「フュ」「シィ」などの比較的珍しい音素のサポートが追加されている
    • ほかにも「!」(感嘆符)を「記号/一般」として正しく推定するための改良など、概ね副作用なしに精度向上が見込めることから、有用性を鑑みほぼそのままマージした
    • この関係で、pyopenjtalk 本家とは一部音素での挙動が異なる
  • sabonerune/pyopenjtalk での変更を取り込み、スレッドセーフ化と一部 Cython コードの nogil 化を達成
  • submodule の OpenJTalk を tsukumijima/open_jtalk に変更
  • submodule の hts_engine_API を syoyo/hts_engine_API に変更
  • ライブラリの開発環境構築・ビルド・コード整形・テストを taskipy によるタスクランナーでの管理に変更
  • 利用予定のない Travis CI 向けファイルを削除
  • 不要な依存関係の削除、依存バージョンの整理
  • その他精度の改善・コードのクリーンアップ、非推奨警告の解消など

WariHima's fork agpl branchでの変更点

次の目的で作っています

pyopenjtalkの代替品となること
自分の仕事に使うこと
大日本語tts(OSS、有償ソフトでも)で国内初の機能をたくさん追加すること

基本的にpyopenjtalkをメンテナンスしているvoicevox、r9y9氏、upstreamのtsukumijima氏のお陰で成り立っています
pyopenjtalk-plusを作っているtsukumijima氏と氏が貢献しているAivisSpeechを応援してください

追加要素

NHK日本語アクセント辞典やwikipediaをもとに方言や訛のような強弱、長さのアクセントのスタイルを追加
日本風のアクセント付きの英語の日本語読みに対応

追加予定

異体字への対応
espeakの吸収(予定では何十ヵ国語も日本語のアクセントで喋れるようになります)

Installation

下記コマンドを実行して、ライブラリをインストールできます。

pip install pyopenjtalk-plus

Development

開発環境は macOS / Linux 、Python バージョンは 3.11 が前提です。

# submodule ごとリポジトリを clone
git clone --recursive https://github.com/tsukumijima/pyopenjtalk-plus.git
cd pyopenjtalk-plus

# ライブラリ自身とその依存関係を .venv/ 以下の仮想環境にインストールし、開発環境を構築
pip install taskipy
task install

# コード整形
task lint
task format

# テストの実行
task test

# pyopenjtalk/dictionary/ 以下にある MeCab / OpenJTalk 辞書をビルド
## ビルド成果物は同ディレクトリに *.bin / *.dic として出力される
## ビルド後の辞書データは数百 MB あるバイナリファイルだが、取り回しやすいよう敢えて Git 管理下に含めている
task build-dictionary

# ライブラリの wheel と sdist をビルドし、dist/ に出力
task build

# ビルド成果物をクリーンアップ
task clean

下記ならびに docs/ 以下のドキュメントは、pyopenjtalk 本家のドキュメントを改変なしでそのまま引き継いでいます。
これらのドキュメントの内容が pyopenjtalk-plus にも通用するかは保証されません。


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_agpl3-1.0.0.tar.gz (87.8 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyopenjtalk_agpl3-1.0.0-cp313-cp313-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.13Windows x86-64

pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (94.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (94.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl (88.1 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

pyopenjtalk_agpl3-1.0.0-cp312-cp312-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.12Windows x86-64

pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (94.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (94.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl (88.1 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

pyopenjtalk_agpl3-1.0.0-cp311-cp311-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.11Windows x86-64

pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (94.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (94.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (88.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

pyopenjtalk_agpl3-1.0.0-cp310-cp310-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.10Windows x86-64

pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (94.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (94.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl (88.1 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

pyopenjtalk_agpl3-1.0.0-cp39-cp39-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.9Windows x86-64

pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (94.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (94.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl (88.1 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

File details

Details for the file pyopenjtalk_agpl3-1.0.0.tar.gz.

File metadata

  • Download URL: pyopenjtalk_agpl3-1.0.0.tar.gz
  • Upload date:
  • Size: 87.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0.tar.gz
Algorithm Hash digest
SHA256 597afc5b3cdc8d41d78351d63ac12d7f22b3f141e277821ea75a776cfe9e864c
MD5 076e7a6c1d49fd3cfd3ea79bd2c8a2b8
BLAKE2b-256 8d4b2bfb9dc35a565b7d6b74e36ae95918b6b92779dfab79dd7209d5a474ad15

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f5dc3fb2dadb7fb6a767706fa07d205927519ee6d7bf941d592c6a51354efa38
MD5 7d396d1590a5cdbaaf35c6f243d29fa0
BLAKE2b-256 08a28151efe14352e137278002076043000a0225480e75d7d168d6a35c13b8ce

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ae1e1cb16ea73952fa4e6d0c56272e6c73c3eca6123c3c6c88e8e6262ab7030
MD5 9ad79e8bcd1c0fb6c168315ca4ec6c41
BLAKE2b-256 3cc94c60a2711cc8c4f1b63768ea1716aa98081b083da9457eafadf315374515

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 423401d3e248f3ca7a848019ce9b9927376555a9f40bd7f5319abe67a330737c
MD5 58219fc5fab060668d4be24add3ab51f
BLAKE2b-256 3a1a76c631962219e26a1ba1c637f261a7573d6518e8eb1663736b9c343f5a37

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8fb45c4d8aa8df65c54b62d826e6ff09fde7ecbb6c962f4afbb2fe47c340b43
MD5 ae352e931f6c4b637a18b057058e845c
BLAKE2b-256 ce0e348b57d73b2778fe9f74bbc6b34448494925c35e560c156b0d0476348cf4

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 6180b3908abfb843f17fd78ab1b821e95ac2d660d882bf6cb9d1186e3a691d9b
MD5 781981c6ea236235fe9096d5666190f3
BLAKE2b-256 26068c4a59a16351ca0b3f1ddb7d6298e1477cc9c1f2e4675addb4fd1ea6e0a9

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f875950c0aed3fa7c0ed5c3c8903765d05d08b6f508a7ee62f2dd3870ce4217a
MD5 ebaa451ea0f0b220857e41d2b6565e71
BLAKE2b-256 78e1606d66508545661e97ecbe234885e3a6f3c5ce8398800095a32060ac8245

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 00eb50f31f61717a61047448855d1fe19a55ac664e7aaff677d0131bdf9d643d
MD5 b2ebca986fd287b6eeb1f0170f70e980
BLAKE2b-256 53ccce69919c87011e55eecce41b44afe79766feb2d3b25df56af704a9123781

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 15fb4dbbcee79f5b19d454d5d17557404bdb09544978450fe10230b1ef12aecf
MD5 95db1f36cd6bc3ab83b3cc8fc0e7dc0b
BLAKE2b-256 dfdc0107eab38e283fdde4eb808bd9d2c63935af2c1189ef6d7bca0776e9f8f7

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 743cc66e317ba81abc639acdb7343c3feb4a0379b6fe78daa5c793b61a7b76da
MD5 ef1922fc0d480d070b503aabfcb8317b
BLAKE2b-256 eac12b1d20e19535447d0bbb750c6b915cd9af5ef59f25b11d5703384eabec03

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 84c6673e590e43e252f473d2daebc7b97fd0fd33186908da0d27328aeb3d1ada
MD5 bb6919ecf99b07ca6486a10381f078a3
BLAKE2b-256 9b362def9c5447c35d708cc1121accdd31d7fd4eb3d486e0ec38d432a2e0db0b

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 38d336345a05122186bc97c7a281964c5a89ebf18c9f8ed8c5b9815b7c1ecff8
MD5 f0161623e45a68e27845daee5019a851
BLAKE2b-256 14eab1360e00f62f20f61ff85b6430e7b2d8159b0917c52594f8adc93e8ec4ca

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c27a8dbab4d4755196da76ca31b27239584937475be9dd4ef6edb2f802b40d48
MD5 7b68072975be2bb8d7aeda2856fdfe82
BLAKE2b-256 464fb6cab05e2c33ff9eee417f9ad6f06d63824c7ddbd8ec59e01a20fbf93b09

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2bbc2d93e3e6a8cc34ccf5451e08dafffc779bfad78bf35d7f49bed533217a4d
MD5 7963aa7abd256aba6a939f44d9971953
BLAKE2b-256 d84be0e722c4fbade339804caff6931b32a991807f40071aee593e09290d76a5

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b41cd4fa9c2b2ad02265c18a93d8d8bdc2778500b9e7284e243f448340ce57f
MD5 43ea318142edc199e3dc7c427b1d5e7a
BLAKE2b-256 b17dd37d48ab2fbecaffd4d55b81e1bf954f15a5ebc078eb264c59cd481c3947

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 96c0dacbc5b10153b8b72af99741d8351bcf0fa52078dc551d8112be06cbe6fb
MD5 4f89dc7a8e40bb221ba7c860863d7349
BLAKE2b-256 bc0a03c46e0b2d09c0348a6f2df73f9148a3a3397289af89372ba7c49632144b

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b89d2fbead5cde4972e00196e7bdfcb4e53df03adccd7cec0df4b9d24a681591
MD5 96c0020508bf2cd95bd1c90bd9eb1333
BLAKE2b-256 cf1e6390d03c86df2ad6f11ea8f15a10adb9f32414d946979ee7acf5b5c1f041

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1ed876ca3351d295e5e08a194134917e1dead779cf738334555b3a57f250925b
MD5 173fce953721eaf8656cbe6b248dbc79
BLAKE2b-256 da3c28a081078ba9fbb9a82a8837f01b6449b18acb7412820c02a33aec5c7eb0

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 437e1192c2dd303ed28e8997f818c93969a9a106c5ef9ace87686d2eac89e880
MD5 de6ca0bded282d15418667d77568b7f6
BLAKE2b-256 58c5fcbff74a6cba34350a26ed3a39024a6e5892ffc0354f1c04e1ae35c1bde3

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02251a0904c5bd74d48a403d080faaa62e8cdec6ae156b1d9aa24bd22bdf24e5
MD5 6bcddfc4b1a0d58f699cb7b76e6e0950
BLAKE2b-256 5492a0abcb20e19fdd23417a5dab9220d7bcdd8b3ceb7c22375a4982ce7ae6e8

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cbc33dbe541c05949c033bc2ea4c20bf404838ba39ba53c71dfc027dd5a8fb92
MD5 4fc17a3c0e8bef01210a8890687c1600
BLAKE2b-256 9b197ffa3615153c8b80c7ebb9f5b5a9747bbc5ac4070c900fa7464d93d210ef

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 f2265704aeff984f0eeb6cb701ed91b3013c79306b5f92f57be12dbdd3ea37a5
MD5 e81ab39504245f03ee4cf9c45fb88dfd
BLAKE2b-256 671014ea3c31c64d7221ea6a2a3255c4c94b6a8df49505d58ea649fb11d8ee2b

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 724259e9e942148846b3acb79492448a6a9fac2485013e3f6c9e5590d5828ed5
MD5 1aa8cbb6bdac021f614e5bbb7db1a485
BLAKE2b-256 f6c7c05f751d96139f189682485801f0be35f83b8fd9de644fb4636a7e444d46

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cd0619212c399ba29b63a4284c2b9298f5b8e358b6e52878d009a3750ab1f8b9
MD5 8bf289764ec6a9121842f50f04fa4173
BLAKE2b-256 d3d93369ce06ec240667cbddc51417a6a34f1442311fed445a368ee62ac148c8

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c83ddb4d9002fa88b4800da66f5635bfb920d1c51ddbc6d910269ba51f380f74
MD5 0fe316ceeca6ae447dbaf40cf54e8bec
BLAKE2b-256 4f2dfc1279b8e932fc076327dde16374e8a9e35cec7bc6296abc27c8b5ce5d97

See more details on using hashes here.

File details

Details for the file pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d05dd71170a813fcb8ef775f0b7ae8be24429b9d9a1444a098dd5a727ea22b03
MD5 2718cedb307954c2d07af1d6d787b7bd
BLAKE2b-256 ef381a1888c5068abbf16303260d89ced301316bceecfb5f7f47e020fb8ebfd0

See more details on using hashes here.

Supported by

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