live2d-py 0.4.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. live2d_py-0.4.4.dist-info/METADATA +194 -0
  2. live2d_py-0.4.4.dist-info/RECORD +106 -0
  3. live2d_py-0.4.4.dist-info/WHEEL +5 -0
  4. live2d_py-0.4.4.dist-info/licenses/LICENSE +21 -0
  5. live2d_py-0.4.4.dist-info/top_level.txt +1 -0
  6. package/live2d/__init__.py +0 -0
  7. package/live2d/utils/__init__.py +0 -0
  8. package/live2d/utils/lipsync.py +78 -0
  9. package/live2d/utils/log.py +36 -0
  10. package/live2d/v2/__init__.py +46 -0
  11. package/live2d/v2/core/DEF.py +15 -0
  12. package/live2d/v2/core/__init__.py +9 -0
  13. package/live2d/v2/core/alive2d_model.py +171 -0
  14. package/live2d/v2/core/deformer/__init__.py +6 -0
  15. package/live2d/v2/core/deformer/deformer.py +80 -0
  16. package/live2d/v2/core/deformer/deformer_context.py +57 -0
  17. package/live2d/v2/core/deformer/roation_deformer.py +415 -0
  18. package/live2d/v2/core/deformer/rotation_context.py +17 -0
  19. package/live2d/v2/core/deformer/warp_context.py +12 -0
  20. package/live2d/v2/core/deformer/warp_deformer.py +315 -0
  21. package/live2d/v2/core/draw/__init__.py +3 -0
  22. package/live2d/v2/core/draw/idraw_context.py +25 -0
  23. package/live2d/v2/core/draw/idraw_data.py +118 -0
  24. package/live2d/v2/core/draw/mesh.py +186 -0
  25. package/live2d/v2/core/draw/mesh_context.py +14 -0
  26. package/live2d/v2/core/graphics/__init__.py +2 -0
  27. package/live2d/v2/core/graphics/clip_context.py +26 -0
  28. package/live2d/v2/core/graphics/clip_draw_context.py +9 -0
  29. package/live2d/v2/core/graphics/clip_matrix.py +45 -0
  30. package/live2d/v2/core/graphics/clip_rectf.py +25 -0
  31. package/live2d/v2/core/graphics/clipping_manager_opengl.py +276 -0
  32. package/live2d/v2/core/graphics/draw_param.py +81 -0
  33. package/live2d/v2/core/graphics/draw_param_opengl.py +419 -0
  34. package/live2d/v2/core/graphics/texture_info.py +10 -0
  35. package/live2d/v2/core/id/__init__.py +1 -0
  36. package/live2d/v2/core/id/id.py +33 -0
  37. package/live2d/v2/core/io/__init__.py +2 -0
  38. package/live2d/v2/core/io/binary_reader.py +194 -0
  39. package/live2d/v2/core/io/iserializable.py +13 -0
  40. package/live2d/v2/core/io/live2d_object_factory.py +36 -0
  41. package/live2d/v2/core/live2d.py +22 -0
  42. package/live2d/v2/core/live2d_gl_wrapper.py +266 -0
  43. package/live2d/v2/core/live2d_model_opengl.py +37 -0
  44. package/live2d/v2/core/model/__init__.py +4 -0
  45. package/live2d/v2/core/model/avatar.py +26 -0
  46. package/live2d/v2/core/model/model_impl.py +42 -0
  47. package/live2d/v2/core/model/part.py +66 -0
  48. package/live2d/v2/core/model/parts_context.py +30 -0
  49. package/live2d/v2/core/model_context.py +382 -0
  50. package/live2d/v2/core/motion/__init__.py +4 -0
  51. package/live2d/v2/core/motion/amotion.py +88 -0
  52. package/live2d/v2/core/motion/live2d_motion.py +226 -0
  53. package/live2d/v2/core/motion/motion.py +14 -0
  54. package/live2d/v2/core/motion/motion_queue_entry.py +24 -0
  55. package/live2d/v2/core/motion/motion_queue_manager.py +107 -0
  56. package/live2d/v2/core/param/__init__.py +4 -0
  57. package/live2d/v2/core/param/param_def_float.py +27 -0
  58. package/live2d/v2/core/param/param_def_set.py +14 -0
  59. package/live2d/v2/core/param/param_pivots.py +55 -0
  60. package/live2d/v2/core/param/pivot_manager.py +141 -0
  61. package/live2d/v2/core/physics/__init__.py +1 -0
  62. package/live2d/v2/core/physics/iphysics_param.py +12 -0
  63. package/live2d/v2/core/physics/physics_constants.py +6 -0
  64. package/live2d/v2/core/physics/physics_hair.py +136 -0
  65. package/live2d/v2/core/physics/physics_point.py +22 -0
  66. package/live2d/v2/core/physics/physics_src.py +23 -0
  67. package/live2d/v2/core/physics/physics_target.py +15 -0
  68. package/live2d/v2/core/type/__init__.py +1 -0
  69. package/live2d/v2/core/type/array.py +38 -0
  70. package/live2d/v2/core/util/__init__.py +7 -0
  71. package/live2d/v2/core/util/log/__init__.py +3 -0
  72. package/live2d/v2/core/util/log/__ut_log.py +50 -0
  73. package/live2d/v2/core/util/ut_interpolate.py +369 -0
  74. package/live2d/v2/core/util/ut_math.py +45 -0
  75. package/live2d/v2/core/util/ut_motion.py +13 -0
  76. package/live2d/v2/core/util/ut_string.py +46 -0
  77. package/live2d/v2/core/util/ut_system.py +47 -0
  78. package/live2d/v2/framework/Live2DFramework.py +15 -0
  79. package/live2d/v2/framework/__init__.py +4 -0
  80. package/live2d/v2/framework/matrix/__init__.py +2 -0
  81. package/live2d/v2/framework/matrix/l2d_matrix44.py +76 -0
  82. package/live2d/v2/framework/matrix/l2d_model_matrix.py +59 -0
  83. package/live2d/v2/framework/matrix/l2d_view_matrix.py +99 -0
  84. package/live2d/v2/framework/model/__init__.py +1 -0
  85. package/live2d/v2/framework/model/l2d_base_model.py +172 -0
  86. package/live2d/v2/framework/motion/__init__.py +5 -0
  87. package/live2d/v2/framework/motion/l2d_expression_motion.py +68 -0
  88. package/live2d/v2/framework/motion/l2d_expression_param.py +6 -0
  89. package/live2d/v2/framework/motion/l2d_eye_blink.py +82 -0
  90. package/live2d/v2/framework/motion/l2d_motion_manager.py +42 -0
  91. package/live2d/v2/framework/motion/l2d_target_point.py +67 -0
  92. package/live2d/v2/framework/physics/__init__.py +1 -0
  93. package/live2d/v2/framework/physics/l2d_physics.py +69 -0
  94. package/live2d/v2/framework/pose/__init__.py +1 -0
  95. package/live2d/v2/framework/pose/l2d_parts_param.py +15 -0
  96. package/live2d/v2/framework/pose/l2d_pose.py +132 -0
  97. package/live2d/v2/lapp_define.py +19 -0
  98. package/live2d/v2/lapp_model.py +387 -0
  99. package/live2d/v2/matrix_manager.py +73 -0
  100. package/live2d/v2/model_setting_json.py +165 -0
  101. package/live2d/v2/params.py +51 -0
  102. package/live2d/v2/platform_manager.py +39 -0
  103. package/live2d/v3/__init__.py +21 -0
  104. package/live2d/v3/live2d.pyi +279 -0
  105. package/live2d/v3/live2d.so +0 -0
  106. package/live2d/v3/params.py +55 -0
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: live2d-py
3
+ Version: 0.4.4
4
+ Summary: A non-web Live2D library for Python.
5
+ Home-page: https://github.com/Arkueid/live2d-py
6
+ Author: Arkueid
7
+ Author-email: Arkueid <thetardis@qq.com>
8
+ License: LICENSE
9
+ Project-URL: Homepage, https://github.com/Arkueid/live2d-py
10
+ Project-URL: Documentation, https://Arkueid.github.io/live2d-py-docs/
11
+ Project-URL: Repository, https://github.com/Arkueid/live2d-py
12
+ Keywords: Live2D,Cubism Live2D,Cubism SDK,Cubism SDK for Python
13
+ Requires-Python: >=3.2
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: pyopengl
17
+ Requires-Dist: pillow
18
+ Requires-Dist: numpy
19
+ Dynamic: author
20
+ Dynamic: home-page
21
+ Dynamic: license
22
+ Dynamic: license-file
23
+ Dynamic: requires-python
24
+
25
+ <div align="center" style="padding-top: 10px">
26
+ <img src="./docs/koe.svg" alt="koe" width="50px" height="50px">
27
+ <img src="./docs/logo.svg" alt="live2d-py" height="80px">
28
+ </div>
29
+
30
+ <p align="center" style="font-family: 'Roboto', sans-serif; font-size: 1em; color: #555;">
31
+ <img title="Windows Distro" src="https://github.com/Arkueid/live2d-py/actions/workflows/build-windows.yml/badge.svg">
32
+ <img title="MacOS Distro" src="https://github.com/Arkueid/live2d-py/actions/workflows/build-macos.yml/badge.svg">
33
+ <img title="Linux Distro" src="https://github.com/Arkueid/live2d-py/actions/workflows/build-linux.yml/badge.svg">
34
+ <br>
35
+ <img title="Release Version" src="https://img.shields.io/github/v/release/Arkueid/live2d-py" alt="Docker Build Version" style="margin: 0 10px;">
36
+ <img title="Python Version" src="https://img.shields.io/badge/python-3.8+-blue" alt="Python Version" style="margin: 0 10px;">
37
+ <img title="CMake" src="https://img.shields.io/badge/CMake-3.26+-orange" alt="CMake" style="margin: 0 10px;">
38
+ <img title="C++" src="https://img.shields.io/badge/C%2B%2B-17-yellow" alt="C++17" style="margin: 0 10px;">
39
+ <img title="CsmSDK" src="https://img.shields.io/badge/CsmSDK-5_r3-orange" alt="CsmSDK" style="margin: 0 10px;">
40
+ <br>
41
+ <a href="./README.en.md">English README</a>
42
+ </p>
43
+
44
+ 使用 Python 直接加载和操作 Live2D 模型,不通过 Web Engine 等间接手段进行渲染。
45
+
46
+ 基于 Python C++ API 对 Live2D Native SDK (C++) 进行了封装。理论上,只要配置好 OpenGL 上下文,可在 Python 中将 live2d 绘制在任何基于 OpenGL 的窗口。
47
+
48
+ 代码使用示例:[package](./package/)
49
+
50
+ 详细使用文档:[Wiki](https://github.com/Arkueid/live2d-py/wiki)
51
+
52
+ 修改和开发:[CONTRIBUTING](./CONTRIBUTING.md)
53
+
54
+ ## 兼容UI库
55
+
56
+ 理论上兼容所有能使用 OpenGL 进行绘制的UI库: Pygame / PyQt5 / PySide2 / PySide6 / GLFW / pyopengltk/ FreeGlut / Qfluentwidgets ...
57
+
58
+ ## 支持功能
59
+
60
+ * 加载模型:**Cubism 2.1** 和 **Cubism 3.0** 及以上版本
61
+ * 视线跟踪
62
+ * 点击交互
63
+ * 动作播放回调
64
+ * 口型同步
65
+ * 模型各部分参数控制
66
+ * 各部件透明度控制
67
+ * 精确到部件的点击检测
68
+
69
+ ## 兼容性
70
+
71
+ ### Python 版本
72
+ Python 版本支持:从 live2d-py 0.3.2 开始使用 Python C Limited API,理论上兼容 Python 3.2 以上的所有版本。
73
+
74
+ ### Cubism Live2D 版本
75
+
76
+ | `live2d-py` | 支持的live2d模型 | 实现 |
77
+ |-------------|--------------------|-----------------------|
78
+ | `live2d.v2` | Cubism 2.1 以及更早的版本 | 纯 Python 实现 | 支持 `32` / `64` 位,支持`Python 3.0` 及以上版本 | Winodws、Linux、MacOS(理论上) | |
79
+ | `live2d.v3` | Cubism 3.0 及以上版本 | Python C Extension 封装 | 支持 `32` / `64` 位,支持`Python 3.2` 及以上版本 | Windows、Linux |
80
+
81
+ ### Python 版本及平台
82
+
83
+ :white_check_mark:: 可用, 支持, 已通过
84
+
85
+ :question:: 尚未测试
86
+
87
+ :construction:, :x:: 编译期问题或平台兼容性问题待解决
88
+
89
+ |Platform|Python Version| `live2d.v2` | `live2d.v3` |构建状态|PyPI|
90
+ |--------|--------------|-------------|-------------|------|----------|
91
+ |MacOS arm64| `>3.0, <=3.10`|:white_check_mark:|:question:|:construction:|:x:|
92
+ |MacOS arm64| `>=3.11` |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
93
+ |Windows x86/x64|`>3.0, <3.8`|:white_check_mark:|:question:|:construction:|:x:|
94
+ |Windows x86/x64|`>=3.8`|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
95
+ |Ubuntu 20.04/Arch, x64|`>3.0, <3.8`|:white_check_mark:|:question:|:construction:|:x:|
96
+ |Ubuntu 20.04/Arch, x64|`>=3.8`|:white_check_mark:|:white_check_mark:|:white_check_mark:|:x:|
97
+
98
+ 注:
99
+
100
+ * `live2d.v2` 由 Cubism Web SDK 转写为纯 Python,尚未使用 numpy 等优化的库,性能有待提升
101
+ * Cubism 2.X 导出的模型:文件名格式常为 `XXX.moc`,`XXX.model.json`,`XXX.mtn`
102
+ * Cubism 3.0 及以上导出的模型:文件名格式常为 `XXX.moc3`,`XXX.model3.json`, `XXX.motion3.json`
103
+
104
+ ## 使用说明
105
+
106
+ 1. 将仓库中的 package/live2d 直接作为 Python 模块集成到你的项目中即可。
107
+
108
+
109
+ 2. 在 [Release](https://github.com/Arkueid/live2d-py/releases/latest) 中下载对应版本的 `whl` 文件并安装(推荐)
110
+
111
+ ```shell
112
+ pip install live2d_py-0.X.X-cpXXX-cpXXX-win32.whl
113
+ ```
114
+
115
+ 3. 通过 [PyPI](https://pypi.org/project/live2d-py/) 安装
116
+
117
+ ```shell
118
+ pip install live2d-py
119
+ ```
120
+
121
+ 4. 从源码构建,参考 [安装#源码构建](https://github.com/Arkueid/live2d-py/wiki/%E5%AE%89%E8%A3%85#%E6%BA%90%E7%A0%81%E6%9E%84%E5%BB%BA)
122
+
123
+ ## 示例
124
+
125
+ ### 简易面捕
126
+
127
+ 源码见 [main_facial_bind_mediapipe.py](./package/main_facial_bind.py)
128
+
129
+ ![面捕-期末周破防](./docs/video_test.gif)
130
+
131
+ ### 多模型加载
132
+
133
+ 源码见 [main_pygame_three_model.py](./package/main_pygame_three_model.py)
134
+
135
+ ![three_model](./docs/three_model.png)
136
+
137
+ ### 添加背景
138
+
139
+ 源码见 [main_pygame_background.py](./package/main_pygame_background.py)
140
+
141
+ ![background](./docs/background.png)
142
+
143
+ ### 模型变换 & 口型同步音频 & 点击测试
144
+
145
+ 源码见 [main_pygame.py](./package/main_pygame.py)
146
+
147
+ ![完整用例](./docs/full%20demo.gif)
148
+
149
+ ### 模型整体透明度示例
150
+
151
+ 源码见 [main_pyqt5_canvas_opacity.py](./package/main_pyqt5_canvas_opacity.py)
152
+
153
+ ![opacity](./docs/opacity.gif)
154
+
155
+ ## 鸣谢
156
+
157
+ 特别感谢 [96bearli],[Ovizro], [AnyaCoder], [jahtim], [Honghe], [RobertMeow], [LUORANCHENG], [TinyKiecoo] 为本项目提供的帮助和支持。
158
+
159
+ [96bearli]: https://github.com/96bearli
160
+
161
+ [Ovizro]: https://github.com/Ovizro
162
+
163
+ [AnyaCoder]: https://github.com/AnyaCoder
164
+
165
+ [jahtim]: https://github.com/jahtim
166
+
167
+ [Honghe]: https://github.com/Honghe
168
+
169
+ [RobertMeow]: https://github.com/RobertMeow
170
+
171
+ [LUORANCHENG]: https://github.com/LUORANCHENG
172
+
173
+ [TinyKiecoo]: https://github.com/TinyKiecoo
174
+
175
+ 非常感谢以下项目及其贡献者们的帮助:
176
+
177
+ [CubismNativeSamples](https://github.com/Live2D/CubismNativeSamples) (`live2d.v3`)
178
+
179
+ [Cubism2 Web SDK](https://github.com/dylanNew/live2d) (`live2d.v2`)
180
+
181
+ [de4js](https://github.com/lelinhtinh/de4js)(`JavaScript` 反混淆工具)
182
+
183
+ [JsConvert](https://github.com/JonBoynton/JSConvert) (`Javascript` 转 `Python` 工具)
184
+
185
+ [D2Evil](https://github.com/UlyssesWu/D2Evil) (`moc` 文件分析)
186
+
187
+ [facial-landmarks-for-cubism](https://github.com/adrianiainlam/facial-landmarks-for-cubism) (面捕参考)
188
+
189
+ Live2D 模型:
190
+
191
+ * [Cubism 官方样例数据](https://www.live2d.com/en/learn/sample/)
192
+ * [雅萌工作室](https://yameng.remoon.cn/studio/live2d-f/1)
193
+ * [live2d-models](https://github.com/Eikanya/Live2d-model)
194
+ * [【虚拟主播模型】 宁宁vup化!](https://www.bilibili.com/video/BV1s7411d7y9)
@@ -0,0 +1,106 @@
1
+ live2d_py-0.4.4.dist-info/licenses/LICENSE,sha256=fOLopjQpo-dFewuZO3onAtauAKu0ExQiVOIsP3OdqDE,1085
2
+ package/live2d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ package/live2d/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ package/live2d/utils/lipsync.py,sha256=I3JM5GZEIEw7Tarr3EXlHV8HBgt2uD1nYhfVxw1OqbI,2431
5
+ package/live2d/utils/log.py,sha256=eCwO6Q0B302QvTkZqI0ARbIA0VQRNrFX9PmL6kGbZWU,580
6
+ package/live2d/v2/__init__.py,sha256=K4sEInugyYeknuOyLdXPWD1TkSFhyAUZx8eWBEOGYbU,1002
7
+ package/live2d/v2/lapp_define.py,sha256=hL_AqpEk89mNTD6_cwtKTxv-PlAYQW-j7ZlzLM-mErM,321
8
+ package/live2d/v2/lapp_model.py,sha256=PJkMZ2l1p_08OjOo4dxUJvUmWYL2O6dIqal0rT1sH74,15887
9
+ package/live2d/v2/matrix_manager.py,sha256=TB7gLjYY05mPEfRooRth5YgclQ0975UL0ZaX-6WIrJA,2309
10
+ package/live2d/v2/model_setting_json.py,sha256=l6ZG5ApFYMsAhOc5FUtsHdsXEexWoB_8Gj292wbzas8,6073
11
+ package/live2d/v2/params.py,sha256=nxokCwNgcfC1NaHH5XX4BKo1M-4fZ0aRyoGqu4HCdwU,1830
12
+ package/live2d/v2/platform_manager.py,sha256=x1WZOD1KOKO5Ljp0gy07A2TZ07mkVktRgbQhFlo8jcA,1361
13
+ package/live2d/v2/core/DEF.py,sha256=B9ri6-CcwlPZrZp2goN2k3Z1DwMLpvvA96EwCDpE6Jc,509
14
+ package/live2d/v2/core/__init__.py,sha256=XZIW2p5BJjKeJLn-OhYGZHlR-Pgi0aYB41WUelbXDCw,344
15
+ package/live2d/v2/core/alive2d_model.py,sha256=R1FuE61ubCr6Uur9BAaeeS_9bc9VVvLMsaQEMBAb9wc,5382
16
+ package/live2d/v2/core/live2d.py,sha256=6_YJcZK3PhHuHQheSSIn_Wp-sLX83xJNVt_PIrAoXU8,544
17
+ package/live2d/v2/core/live2d_gl_wrapper.py,sha256=4JQTZq3fi8ZWYUWbjRkZ9dPNmaXKTqnXxsz2V5e8hkI,6742
18
+ package/live2d/v2/core/live2d_model_opengl.py,sha256=-WM95ehbk-Kb2mh1UaweyqttBGbpkWInKetW_ZhBGaI,970
19
+ package/live2d/v2/core/model_context.py,sha256=0F-cHh3dyz9jJxX-irnqCb6LXbsJKwCJwNaDlSo5GNs,12886
20
+ package/live2d/v2/core/deformer/__init__.py,sha256=FxhEKEY0wruCBkrRYTabFPkrJneS9QJLWMKsJ959tVQ,268
21
+ package/live2d/v2/core/deformer/deformer.py,sha256=YYYznYVjpy3MBfEVhcIOAvmktkT17Tek9hTcvfM_tAo,2415
22
+ package/live2d/v2/core/deformer/deformer_context.py,sha256=vLQl_GYEwOkMo0d2wX6Mo6oelck87G-VBgTl1CShxhA,1410
23
+ package/live2d/v2/core/deformer/roation_deformer.py,sha256=1xPm-9P3ab3FIBmGex36yjA2PjVhXw4TOWt6ZWUAVkQ,21598
24
+ package/live2d/v2/core/deformer/rotation_context.py,sha256=UV4TC_7A68nvuLOJGrqZP1Qcnrbykfkj1jqkL1XNBnE,475
25
+ package/live2d/v2/core/deformer/warp_context.py,sha256=ax4JCg_5TzsXF3gUS3_dthM6qzD1YvEyo7ojJk0hVvs,333
26
+ package/live2d/v2/core/deformer/warp_deformer.py,sha256=_3UsswKgslJ_pAfXqx9u93Iunjjgy6dCQlBIaFk-y2Q,16436
27
+ package/live2d/v2/core/draw/__init__.py,sha256=uSCsfBfGSok5Zz9XI89AP414Q45nfWSI95e2Gg1Jrfg,101
28
+ package/live2d/v2/core/draw/idraw_context.py,sha256=Gf0e_mAHFs7fGhlbM5l3SX-RhiLK8Yiwa60YdhW5k6s,704
29
+ package/live2d/v2/core/draw/idraw_data.py,sha256=UIjq2s70sbp-PH2KJgdGbrL6MXIt_gGBSsGfke7-E2Q,3359
30
+ package/live2d/v2/core/draw/mesh.py,sha256=DaoO8epxbA2zh1IS4IqziYaNvTIe5RE8a8suwbokiW0,6703
31
+ package/live2d/v2/core/draw/mesh_context.py,sha256=q98Dw6lfM9rZBxQHCD8zqhPzTXfmGWqBMByUE8_ZwzM,471
32
+ package/live2d/v2/core/graphics/__init__.py,sha256=VNLI94sRC1JxOCUbHDFcy3sMfift3JOR25f7D5MOxwY,109
33
+ package/live2d/v2/core/graphics/clip_context.py,sha256=b6F2U08vW7Xe9CiJQHTA_wIRgb1I9CGFMyXcbiU143U,875
34
+ package/live2d/v2/core/graphics/clip_draw_context.py,sha256=jwqhjuUcN7NUaNb_ydqLoo5TU9GjpOgrMkNphzdg9O4,216
35
+ package/live2d/v2/core/graphics/clip_matrix.py,sha256=hN3QVHAmY3Mqv8a-4xqJuPougzrc9nXZCiwAEN6KD6U,1267
36
+ package/live2d/v2/core/graphics/clip_rectf.py,sha256=ZDUHLLQN7tteLSAjOVGwJZNnEnyErZ6lmQAkewDFwJk,570
37
+ package/live2d/v2/core/graphics/clipping_manager_opengl.py,sha256=hT0vgR8M5PfT10nK9eBbAvG0IucPsXgtEeMTbVHEy50,9891
38
+ package/live2d/v2/core/graphics/draw_param.py,sha256=_ShwxhWn-t1OgFoLlHYyKMb8IzpjxwfHW21Euv2OHjg,2313
39
+ package/live2d/v2/core/graphics/draw_param_opengl.py,sha256=Bn8d2wx0JZT09fTdU6QkoOHtUk98oyEqGzQujB3CTOs,18622
40
+ package/live2d/v2/core/graphics/texture_info.py,sha256=yZXd-_GrWc29MghOEkrd7oQyYOiQCPBICm_fDc288yg,263
41
+ package/live2d/v2/core/id/__init__.py,sha256=I1N2Ej8xz5NLiJnqZLhbuA2iaRVeNXg1_yGz-24RahM,23
42
+ package/live2d/v2/core/id/id.py,sha256=9DKtsnQUAL57jNwXttINfKKR8dD0ld6L9f5Ll9VhE88,876
43
+ package/live2d/v2/core/io/__init__.py,sha256=76shswBke4pGUZyGD0_gYcp6eXpfc7_Jilwo1RHpLJ0,86
44
+ package/live2d/v2/core/io/binary_reader.py,sha256=_QXGeCXA0qZrlnHYFEFpDd1btdoDYihFZvzzqoDJ5Uw,5381
45
+ package/live2d/v2/core/io/iserializable.py,sha256=cz8f6e8Jb1AHBZfKgIUKmMnQ0RBGI-ylwwoniNdkMO0,251
46
+ package/live2d/v2/core/io/live2d_object_factory.py,sha256=Ep0gi5U_mZxl8YV59EiRbPTRUhY5bPxDJI72nFgozbg,1164
47
+ package/live2d/v2/core/model/__init__.py,sha256=qlZEy025HwZTev3ldSFSKss9d9rFcbMAKAZWqIzUWJw,138
48
+ package/live2d/v2/core/model/avatar.py,sha256=c-41gHUr551XQH3WxIz8h_v8drc0KfyRfzMHJSxzCFU,692
49
+ package/live2d/v2/core/model/model_impl.py,sha256=l2Y1Mbst_yQRoVByg3dcLC613pELaTBluGDZrSaN-Lw,1144
50
+ package/live2d/v2/core/model/part.py,sha256=vbFyhlSdvvLIexTPUyKbzEjk8Y0fbpkCrq3s_kvO8og,1553
51
+ package/live2d/v2/core/model/parts_context.py,sha256=NsnIK84QF319iF6ooCq-k8APTzYSNrb7u92jObjPjh4,893
52
+ package/live2d/v2/core/motion/__init__.py,sha256=Q2TNkm-er-2MWxZMo3bnVYyUlShZAqmyNRsiDrrwktI,176
53
+ package/live2d/v2/core/motion/amotion.py,sha256=xBZCUEkTQO5I86zvzJWzFS9PxJy-_k9yjVppbLdYBiQ,2460
54
+ package/live2d/v2/core/motion/live2d_motion.py,sha256=X9LhJTZAaQ0BSev2qNqZvN1rwpKnBGMuYhgSCme1Geo,8119
55
+ package/live2d/v2/core/motion/motion.py,sha256=hk32adPOw4WikqBjC6VESMnHr__Rc0XNeSLY3nEmQsQ,414
56
+ package/live2d/v2/core/motion/motion_queue_entry.py,sha256=YE8WBioO7JNilqYBfdua5mL-H9tpxplMytdewCCf_Oo,694
57
+ package/live2d/v2/core/motion/motion_queue_manager.py,sha256=y-H1YLJT84P_hOUdY6-n8cIcesKAe-kV3D1g2k807_k,2743
58
+ package/live2d/v2/core/param/__init__.py,sha256=O4SukihqaUIIllRcuO42gdGNH4_PyyH2jMtf2yzvmlw,165
59
+ package/live2d/v2/core/param/param_def_float.py,sha256=o23D9i3jyAPf3YXbPT9ajtM61UI1aGJWqNgTRokuNiM,708
60
+ package/live2d/v2/core/param/param_def_set.py,sha256=G4QfLqnyN2q6NqX7rRu32giLBwfNAHG3okXayNMk_N0,320
61
+ package/live2d/v2/core/param/param_pivots.py,sha256=IwH3UUCpcYobm-N_F-o6phEOjux2vJGDENjKZ5cZpXI,1480
62
+ package/live2d/v2/core/param/pivot_manager.py,sha256=0sNjY2JkEHatArLhFTTFuEclxh7aLkUkJtPxpn7pKi8,4559
63
+ package/live2d/v2/core/physics/__init__.py,sha256=zgTlhoRY-9M2PQhI6w5Cjsv0M6Ap98iMk5UiV__snt8,40
64
+ package/live2d/v2/core/physics/iphysics_param.py,sha256=0jFZDfvDhhtUnQF5wjyEVTmv62UvIE_gvHrNbGyPG6o,278
65
+ package/live2d/v2/core/physics/physics_constants.py,sha256=1Ph-kVyglQoSx-p3a0_n0XXrQnDWv8BQyy8BV4cRjhI,170
66
+ package/live2d/v2/core/physics/physics_hair.py,sha256=Dk7LXIa2Bnz1Q1C5pxENxaAzXAQ8Y17cU656BJnc10A,4183
67
+ package/live2d/v2/core/physics/physics_point.py,sha256=7S93YsUeX_8oI3yZbNYTlhwfUA_-0eH1EMkoulbYAMU,486
68
+ package/live2d/v2/core/physics/physics_src.py,sha256=jsgF5Fz7Y8BUAUnidYs1w6G_fsh0Loppqf2SugmtQq4,749
69
+ package/live2d/v2/core/physics/physics_target.py,sha256=ZIK9I7Vd2nGq2QcneFof5mE-xIv0jBi5fZL9NhEMTm0,569
70
+ package/live2d/v2/core/type/__init__.py,sha256=LGOjJUyLx-v858gP522JcT3y0ayVh8TczXEeTviJ6PU,92
71
+ package/live2d/v2/core/type/array.py,sha256=w9Tyk7UQ6dTdjRUOiO_1iTOMZ7kUNhOFhk9xiigPTnI,831
72
+ package/live2d/v2/core/util/__init__.py,sha256=ddQso6DXazLiwuekoCBU0W-mp_z74mbkDN8Cl38DFdA,247
73
+ package/live2d/v2/core/util/ut_interpolate.py,sha256=6TMuI9L0lAOjLTthjq_23zg8TJwJDw3kWbOB-WdcoBE,13550
74
+ package/live2d/v2/core/util/ut_math.py,sha256=D0lAtBW5rb7_URRDMX9sRb8CeFwVHdVMMvm3l1kJe-M,2138
75
+ package/live2d/v2/core/util/ut_motion.py,sha256=0ldWNldtb7quCdP5ipcat571g6rqmY64duRnU28FWAA,242
76
+ package/live2d/v2/core/util/ut_string.py,sha256=rEZ7U1B8SSB9ZLRlQURHDbLU15oftC2-8PMDq_IrYbA,1253
77
+ package/live2d/v2/core/util/ut_system.py,sha256=ru-Lp1JqD7V5VCvTlwwMvLePIIrlFVtqfSccXkLBV80,1155
78
+ package/live2d/v2/core/util/log/__init__.py,sha256=2RNi5XsV9ymzZUOixG5_csHTWMy06MAD3uaftuo74KQ,139
79
+ package/live2d/v2/core/util/log/__ut_log.py,sha256=f78Zas_9f9RHtEceLBj3Or2rZBsN_uQw7tordXKn8h8,846
80
+ package/live2d/v2/framework/Live2DFramework.py,sha256=tJUWA2yHQLgI9_QWRpT8Twl0guwvviut2R9jHM7HW3I,500
81
+ package/live2d/v2/framework/__init__.py,sha256=9eYWkcco44E8UbDlwYzTj8Qrayc8ZJR4HZ3P0MJal20,159
82
+ package/live2d/v2/framework/matrix/__init__.py,sha256=N-cv9h-X-DCOeogU6A_J3boT907HuZE8pycpIytN43I,83
83
+ package/live2d/v2/framework/matrix/l2d_matrix44.py,sha256=omoUT0v2cr5bdu3RW3i22UglLEF644yQgi0AtVMtzUw,1976
84
+ package/live2d/v2/framework/matrix/l2d_model_matrix.py,sha256=y2uM-l82wnfBRmIGbjlL2fJCrmAVe9yMZtOZQfI_DBM,1409
85
+ package/live2d/v2/framework/matrix/l2d_view_matrix.py,sha256=g65qZWccQHohJhEhkxkI6Zi6G9BKOUONtBasSDAErn0,3204
86
+ package/live2d/v2/framework/model/__init__.py,sha256=-41Rcwefw9cxLRZZAx9GPEyhBjZA-japP8k3_PnBPrQ,42
87
+ package/live2d/v2/framework/model/l2d_base_model.py,sha256=novDOSyjKhP5PSQPlRDgivugKnDF5hZNeCir_f9D0Yk,5069
88
+ package/live2d/v2/framework/motion/__init__.py,sha256=VK0Epx1uVDpJhwMylXscp37qw0dWm5uOZpmQZ33fkwI,244
89
+ package/live2d/v2/framework/motion/l2d_expression_motion.py,sha256=Z7mS9QmzJRvV4_ZqmGY9gouszFXRdoHZVO3wIEyjRn8,2652
90
+ package/live2d/v2/framework/motion/l2d_expression_param.py,sha256=v7VgLkviIfOnQziQ42qd1PgrLH7W_MhNowrz8H0DOzM,130
91
+ package/live2d/v2/framework/motion/l2d_eye_blink.py,sha256=JWq4PotYDmSbALXsBM58bFm4yUo1UNEab5IkZfG4zo8,2890
92
+ package/live2d/v2/framework/motion/l2d_motion_manager.py,sha256=DXROijKN8r5lbW7uJLrWCNHs2M_voUPhLImvFQPlAng,1098
93
+ package/live2d/v2/framework/motion/l2d_target_point.py,sha256=RxfYTyZdCNH5VUfG5lhrpZKlFqKbkp8wUMw28gBLl4s,2007
94
+ package/live2d/v2/framework/physics/__init__.py,sha256=7Ptq9R6JvXOoEfF-8auNPZ04fAfHi4gcLfjcWtV5hSM,35
95
+ package/live2d/v2/framework/physics/l2d_physics.py,sha256=3oidY3BGJepsKAbuRi8sajVuYXPJj--3MOejL3ztmQ0,2561
96
+ package/live2d/v2/framework/pose/__init__.py,sha256=rR3-hv5oxIZ1soG0d6_jowjLOriQn-353GX-EjHTc1s,46
97
+ package/live2d/v2/framework/pose/l2d_parts_param.py,sha256=KGFIZHaPjhmBREdssZM42Eg3-P1ZYjfxYGo4_uFeLxs,419
98
+ package/live2d/v2/framework/pose/l2d_pose.py,sha256=SzxLB4jsD1DkyHpdH94vUMhG69dJfpaTLbEGZAU5sBo,5110
99
+ package/live2d/v3/__init__.py,sha256=_nD3eDONty-XJoKQnfuIucjmqlus-k_Y8KgI0OZtqh0,325
100
+ package/live2d/v3/live2d.pyi,sha256=pscepC72H5Jw5l6N0_I0rLIVx4OLojSuXUaRaSMBYbQ,7681
101
+ package/live2d/v3/live2d.so,sha256=hpl_YKeAmqRr6X0mRV6bux2zXfvP10fBIdUhvIt8C6A,646552
102
+ package/live2d/v3/params.py,sha256=PjpDehrci1t7UA_MVrD-Pw7fhO7iypbaNOZQXFZ-uik,1844
103
+ live2d_py-0.4.4.dist-info/METADATA,sha256=luRu32-zXBec2QT9oh0dJqCKzYosC6ALQ8MIsac6qr4,7491
104
+ live2d_py-0.4.4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
105
+ live2d_py-0.4.4.dist-info/top_level.txt,sha256=TpQW7893uEAT8mPh-QCMZWhhKYvlqryC9Fjm5Hxg2f8,8
106
+ live2d_py-0.4.4.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (78.1.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Arkueid
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ package
File without changes
File without changes
@@ -0,0 +1,78 @@
1
+ import wave
2
+ import numpy as np
3
+ import time
4
+
5
+
6
+ class WavHandler:
7
+ def __init__(self):
8
+ # 每个通道的采样帧数
9
+ self.numFrames: int = 0
10
+ # 采样率,帧/秒
11
+ self.sampleRate: int = 0
12
+ self.sampleWidth: int = 0
13
+ # 通道数
14
+ self.numChannels: int = 0
15
+ # 数据
16
+ self.pcmData: np.ndarray = None
17
+ # 已经读取的帧数
18
+ self.lastOffset: int = 0
19
+ # 当前rms值
20
+ self.currentRms: float = 0
21
+ # 开始读取的时间
22
+ self.startTime: float = -1
23
+
24
+ def Start(self, filePath: str) -> None:
25
+ self.ReleasePcmData()
26
+ try:
27
+ with wave.open(filePath, "r") as wav:
28
+ self.numFrames = wav.getnframes()
29
+ self.sampleRate = wav.getframerate()
30
+ self.sampleWidth = wav.getsampwidth()
31
+ self.numChannels = wav.getnchannels()
32
+ # 双声道 / 单声道
33
+ self.pcmData = np.frombuffer(wav.readframes(self.numFrames), dtype=np.int16)
34
+ # 标准化
35
+ self.pcmData = self.pcmData / np.max(np.abs(self.pcmData))
36
+ # 拆分通道
37
+ self.pcmData = self.pcmData.reshape(-1, self.numChannels).T
38
+
39
+ self.startTime = time.time()
40
+ self.lastOffset = 0
41
+
42
+ except Exception as e:
43
+ self.ReleasePcmData()
44
+
45
+ def ReleasePcmData(self):
46
+ if self.pcmData is not None:
47
+ del self.pcmData
48
+ self.pcmData = None
49
+
50
+ def GetRms(self) -> float:
51
+ """
52
+ 获取当前音频响度
53
+ """
54
+ return self.currentRms
55
+
56
+ def Update(self) -> bool:
57
+ """
58
+ 更新位置
59
+ """
60
+ # 数据未加载或者数据已经读取完毕
61
+ if self.pcmData is None or self.lastOffset >= self.numFrames:
62
+ return False
63
+
64
+ currentTime = time.time() - self.startTime
65
+ currentOffset = int(currentTime * self.sampleRate)
66
+
67
+ # 时间太短
68
+ if currentOffset == self.lastOffset:
69
+ return True
70
+
71
+ currentOffset = min(currentOffset, self.numFrames)
72
+
73
+ dataFragment = self.pcmData[:, self.lastOffset:currentOffset].astype(np.float32)
74
+
75
+ self.currentRms = np.sqrt(np.mean(np.square(dataFragment)))
76
+
77
+ self.lastOffset = currentOffset
78
+ return True
@@ -0,0 +1,36 @@
1
+ import time
2
+
3
+ RESET = "\033[0m"
4
+ RED = "\033[31m"
5
+ GREEN = "\033[32m"
6
+ YELLOW = "\033[33m"
7
+ BLUE = "\033[34m"
8
+ MAGENTA = "\033[35m"
9
+ CYAN = "\033[36m"
10
+ WHITE = "\033[37m"
11
+
12
+
13
+ def Debug(*args, **kwargs):
14
+ print(
15
+ time.strftime(f"{BLUE}[DEBUG]"),
16
+ *args,
17
+ RESET,
18
+ **kwargs
19
+ )
20
+
21
+
22
+ def Info(*args, **kwargs):
23
+ print(
24
+ time.strftime("[INFO] "),
25
+ *args,
26
+ **kwargs
27
+ )
28
+
29
+
30
+ def Error(*args, **kwargs):
31
+ print(
32
+ time.strftime(f"{RED}[ERROR]"),
33
+ *args,
34
+ RESET,
35
+ **kwargs
36
+ )
@@ -0,0 +1,46 @@
1
+ from .core import Live2D, Live2DGLWrapper
2
+ from .core import log as __log
3
+ from .framework import Live2DFramework
4
+ from .lapp_define import MotionGroup, MotionPriority, HitArea
5
+ from .lapp_model import LAppModel
6
+ from .params import Parameter, StandardParams
7
+ from .platform_manager import PlatformManager
8
+
9
+
10
+ def init():
11
+ Live2D.init()
12
+ Live2DFramework.setPlatformManager(PlatformManager())
13
+
14
+
15
+ def clearBuffer(r=0.0, g=0.0, b=0.0, a=0.0):
16
+ Live2DGLWrapper.clearColor(r, g, b, a)
17
+ Live2DGLWrapper.clear(Live2DGLWrapper.COLOR_BUFFER_BIT)
18
+
19
+
20
+ def setLogEnable(enable: bool):
21
+ __log.setLogEnable(enable)
22
+
23
+
24
+ def logEnable() -> bool:
25
+ return __log.logEnable()
26
+
27
+
28
+ def glewInit():
29
+ pass
30
+
31
+
32
+ def dispose():
33
+ pass
34
+
35
+
36
+ LIVE2D_VERSION = 2
37
+
38
+ __all__ = ['LAppModel',
39
+ 'MotionPriority',
40
+ 'MotionGroup',
41
+ "HitArea",
42
+ "StandardParams",
43
+ "init",
44
+ "glewInit",
45
+ "clearBuffer",
46
+ "dispose"]
@@ -0,0 +1,15 @@
1
+ VERTEX_TYPE_OFFSET0_STEP2: int = 1
2
+ VERTEX_TYPE_OFFSET2_STEP5: int = 2
3
+ VERTEX_OFFSET: int = 0
4
+ VERTEX_STEP: int = 2
5
+ VERTEX_TYPE: int = VERTEX_TYPE_OFFSET0_STEP2
6
+ REVERSE_TEXTURE_T: bool = True
7
+ MAX_INTERPOLATION: int = 5
8
+ PIVOT_TABLE_SIZE: int = 65
9
+ GOSA: float = 0.0001
10
+
11
+ LIVE2D_FORMAT_VERSION_V2_8_TEX_OPTION: int = 8
12
+ LIVE2D_FORMAT_VERSION_V2_10_SDK2: int = 10
13
+ LIVE2D_FORMAT_VERSION_V2_11_SDK2_1: int = 11
14
+ LIVE2D_FORMAT_VERSION_AVAILABLE: int = LIVE2D_FORMAT_VERSION_V2_11_SDK2_1
15
+ OBJECT_REF = 33
@@ -0,0 +1,9 @@
1
+ from .alive2d_model import ALive2DModel
2
+ from .live2d_gl_wrapper import Live2DGLWrapper
3
+ from .live2d_model_opengl import Live2DModelOpenGL
4
+ from .live2d import Live2D
5
+ from .util import log, UtSystem
6
+ from .motion import Live2DMotion, AMotion, MotionQueueManager
7
+ from .physics import PhysicsHair
8
+ from .id import Id
9
+ from .type import Array