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.1.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.1-cp313-cp313-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.13Windows x86-64

pyopenjtalk_agpl3-1.0.1-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.1-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.1-cp313-cp313-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.1-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.1-cp312-cp312-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.12Windows x86-64

pyopenjtalk_agpl3-1.0.1-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.1-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.1-cp312-cp312-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.1-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.1-cp311-cp311-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.11Windows x86-64

pyopenjtalk_agpl3-1.0.1-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.1-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.1-cp311-cp311-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.1-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.1-cp310-cp310-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.10Windows x86-64

pyopenjtalk_agpl3-1.0.1-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.1-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.1-cp310-cp310-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.1-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.1-cp39-cp39-win_amd64.whl (88.0 MB view details)

Uploaded CPython 3.9Windows x86-64

pyopenjtalk_agpl3-1.0.1-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.1-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.1-cp39-cp39-macosx_11_0_arm64.whl (88.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

pyopenjtalk_agpl3-1.0.1-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.1.tar.gz.

File metadata

  • Download URL: pyopenjtalk_agpl3-1.0.1.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.1.tar.gz
Algorithm Hash digest
SHA256 c433737cfbd0a9617b37ff46c85a80ae7a23776ac6d9877535678ee7fed5a8e1
MD5 0aaad924f739f2c6934e07d08849bd4a
BLAKE2b-256 d877f79d526c721f52d1d94afa0a05f7f494a7205ad1d9f347ec8fee815ad57e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4c0779880f063bfdb4e0796c7553cc3e9019b45da37553c63b01db833a810433
MD5 b0a186142ee42287923f8eb7637b2dea
BLAKE2b-256 eec7bffdd6e0614fce9e0184ad6a883a7ea0d4d1f51faee9a60ea45b39f7604e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f0beed779561757471b628539bbbeb3b54a09568f4116486fad5aaa7de376871
MD5 ec50e1f45ee474f40f4236877f52ca6f
BLAKE2b-256 c191831bd8461727ceb361a6570c9e461921fcda77366254cd798d34b0fa8354

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 ffb86e871614968e93261de8423583d1ef7ceeb1c713ef207689eb3c335d0ec9
MD5 cc50d99f008d257fafc9d223a04910f1
BLAKE2b-256 cd06593c0d2494cf63b53f9d1f32d1846f9b5ea2ff2a62388775192aba9166f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 39f1ebbd468bc6d949df8b8930aba744ef40e70a460d66c48f0bcb4538afa3d4
MD5 0a02e9fde444a3afba3ad22c688295a1
BLAKE2b-256 37df6d3d0fba1fdbd01c222b35afe9694f4ac480d9adbd6d6b1d88554ab04156

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f787cfb5bdbab2a8b348186e00ca3c4c32dd3a45056229eefbf76e660c10ec8b
MD5 ab414bc9bec114537b27cdf4edd672a0
BLAKE2b-256 b1c8da86d400f229cb0524da1c3db2c9903482c29a0c81357f40fa691d695124

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 78db2f47ec22672b04acae8337bbafab18e6ff1cce523957a5db8ab956ea855a
MD5 b6f71b6bafe21858d91c591ccf501b72
BLAKE2b-256 cb2cec8332758e1955117fde787fe768de62d54a29cbe1ed8d0f62346ffe46ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cf14266ec638a3dabb24732530334b90c1856a177938288b1b9d62f95f906227
MD5 722060e73e322b66dc9f3a7b99a05293
BLAKE2b-256 83a0072634a0bbcae6e188db3e0aa68ace8014dddba07ccb3ee8f4895b0c8d5f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 161c3503bd8a8ba4bbbd46b853d6e327b874c8732bc8689a4a377d7d6bea9fb4
MD5 dd86c326e5efdf4c22124cc8b2a76e11
BLAKE2b-256 0670b959efed348e31a560c6f85b8c4628cc222a029d5d032de0b8894e0b397a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9fd1115369f613d85f35378942bada6042ebc1cd2033965f909f099bd78667d2
MD5 9324e21a8507ee1f03c7fbfd5397d038
BLAKE2b-256 5128c2886e7dc8b124a7ffe726235c92771c5b694bfad26818adc6748a4ba82d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 5c813661a3cfc661aae61f7951490b769858e8138a2da82dbc5ac9b07ac235e2
MD5 786c139d0e5cf4bc409a6063440d12e8
BLAKE2b-256 2de7082dd8f52fb55640686773f3feeacb4b95b99e08990a44eef898a15d5842

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1de755c87b93b422fec6c922b5253d72cf3b0202b3bae2d107edb9474b2b7c0c
MD5 4b31523a1dbf571b255dead4ac47391f
BLAKE2b-256 a7d21fe5c2475b041265848c43883cc09fa741842b9b1aa303eb66cf385f3e09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 064ef722184f52d4cccc84be146babd13bd2cd12bbaeb6f41b8d852b4a1cf563
MD5 1f8786b50d28bbc9713841ec3c5f7c4b
BLAKE2b-256 1ee8cde0310212c3a58f79e86bca82e54b49888752acfd528b93ee4e03cb91e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e77f0d0e521c518ef17ad59435d78f41074d522190d5d273669291dd5181d7eb
MD5 75d011ed5318605cb252bb46f9add725
BLAKE2b-256 ec1a08e74fcd557666558609b4940b450de1c816f7187f678cb63f2a8ee93417

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56c7148616ff83b82b271bfa0fcaecfc8f2b4601b6c960a02dc9210d3fd8560c
MD5 78db60a7a7a9941d369534a5bed888a3
BLAKE2b-256 29cbd729d0706200b21ebf307fddedc7695db5d4e5998beb65b26a055f19c98d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f9591de94fcfacdb511646f167bcd07ed4728a9dd517170954806b87628f65f5
MD5 d59cb4c4cfde8b440434c7dc2cafdd44
BLAKE2b-256 ece20d0893b292b61fc58dcad937f039a9b31fb6f5cca001fdfd5e46bf30eb32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8fbc6c7f6b003f3d96901736d4644be258553430bf079f7209462deeba9b174c
MD5 d11b74238e244770f8f3704fe0c106ad
BLAKE2b-256 80349f79a1d4af4de111b000674600113009430c8da54f8e1c07fc23830cadf0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9e197224f4dafec8d34abecafcf0b4f563f0047eb474dc97b9cc49aeda629106
MD5 0d760c3965d5d6ab42d6017ae08cfa9a
BLAKE2b-256 404f6c82f033160f944bafb221174d6a503746ba9546231d9f9d5c6250978e58

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4dbc755f25868f3e32898158007e4d4a1d928b867db6d8bc44930abba58856e0
MD5 37695a8e1539b94dfff4080f5b8cbb90
BLAKE2b-256 77fc75be1366d64a9e43acce3866a37c0efb15237bbaab47c920418ed01af473

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b86e5431cdec77c22baf09a9f5e14bf1fdb47817a10c3d85b48c49d71f3939fb
MD5 58330fa77aeb497de5350fbef1151c62
BLAKE2b-256 9900bca5065f9664acb684fef2a5b1327addef14e4dcfc19eb4fbcfe82a65c3e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1cb79bf9c9b69b4b25f147cdbfc9eff37e0249d3447aad10532b977aca7a4cec
MD5 96da76c79452e94497c711b8f18c47b3
BLAKE2b-256 985220cafa0977763afd3131d389a3913324f3d59812102543d132932cf3b1e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3e0b3a5856f28b6ae14e29901d135ebd468a781f3e2a9a271b008149953de37c
MD5 76be678af5e34658f11e637821a87cef
BLAKE2b-256 638e84214d0ff2fceea8a1a54252a70ae382c0df0f258552f2e0f99216407c8c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e11a0d2a15727364f7be608f107277ea31cb6379c81297ea2d978be2d4007875
MD5 f2c448de341a382555ed92131e8020c3
BLAKE2b-256 ae96ee07e2befe704729bece04ed41a7aa3d2a2722970ec6ffba680fb58a7739

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f285d37c7f69d8a3d1a699f73102b46cc67da7866534a9d8dfa4404df7192105
MD5 9e24c4884e8846638ce766ebec72bb0a
BLAKE2b-256 2a65329ebcd4dcc2ce8aa83e076d5ab953d3a12908ed13ef05d4f029f4aee44d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d37a64ee536bb79f24004378299af45c142afa82b44a2ffd49d32c8163758951
MD5 80f097947783ced2b9e218c76fb56146
BLAKE2b-256 528f076fbfdaf9a8bd897311504f670b37de709b477a34349e05d0149d2bcd32

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pyopenjtalk_agpl3-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 54caac5f2bbb8ee6254a739d44cd07f1a5d166acc937fdfe089285eee2abf481
MD5 27cfc7dfacb604c4f2615cd6c336182e
BLAKE2b-256 22788745cccf266e08b893a8e3beb2b8301472a3746ebb576237d7b2a810fd9b

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