pilk-nogil


Namepilk-nogil JSON
Version 0.3.2 PyPI version JSON
download
home_pagehttps://github.com/MelodyYuuka/pilk-nogil
Summarypython silk voice library
upload_time2024-03-24 16:04:14
maintainerMelodyYuuka
docs_urlNone
authorfoyou + MelodyYuuka
requires_python>=3.6
licenseNone
keywords silk voice python extension wechat qq tencent xposed c/c++
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # pilk-nogil

fork from [foyoux/pilk](https://github.com/foyoux/pilk),在编解码过程中释放了GIL,适合多线程处理

python silk codec binding 支持微信语音编解码

pilk: python + silk

关联项目: [weixin-wxposed-silk-voice](https://github.com/foyoux/weixin-wxposed-silk-voice)

## 安装

[![python version](https://img.shields.io/pypi/pyversions/pilk-nogil)](https://pypi.org/project/pilk-nogil/)  [![downloads](https://static.pepy.tech/personalized-badge/pilk-nogil?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads)](https://pepy.tech/project/pilk-nogil)

```bash
pip install pilk-nogil
```

## 介绍与说明

[**SILK**](https://en.wikipedia.org/wiki/SILK) 是一种语音编码格式,由 [**Skype**](https://en.wikipedia.org/wiki/Skype_Technologies)
公司研发,网上可找到的最新版本是 2012 发布的。

**SILK** 原始代码已上传到 [Release](https://github.com/foyoux/pilk/releases/tag/v0.0.1) , 包含规范文档

**Tencent** 系语音支持来自 [silk-v3-decoder](https://github.com/kn007/silk-v3-decoder)

[Release](https://github.com/foyoux/pilk/releases/tag/v0.0.1)
中也包含 [silk-v3-decoder](https://github.com/kn007/silk-v3-decoder) 重编译的 **x64-win**
版本,支持中文,[源代码](https://github.com/foyoux/silk-codec)

### **SILK** 编码格式 和 **Tencent** 系语音的关系

> 此处 **Tencent** 系语音,仅以微信语音为例

1. 标准 **SILK** 文件以 `b'#!SILK_V3'` 开始,以 `b'\xFF\xFF'` 结束,中间为语音数据
2. 微信语音文件在标准 **SILK** 文件的开头插入了 `b'\x02'`,去除了结尾的 `b'\xFF\xFF'`,中间不变

> 已下统称为语音文件

### 语音数据

语音数据分为很多个独立 **frame**,每个 **frame** 开头两字节存储剩余 **frame** 数据的大小,每个 **frame** 默认存储 **20ms** 的音频数据

据此可写出获取 **语音文件** 持续时间(duration) 的函数(此函数 **pilk** 中已包含)

```python
def get_duration(silk_path: str, frame_ms: int = 20) -> int:
    """获取 silk 文件持续时间,单位:ms"""
    with open(silk_path, 'rb') as silk:
        tencent = False
        if silk.read(1) == b'\x02':
            tencent = True
        silk.seek(0)
        if tencent:
            silk.seek(10)
        else:
            silk.seek(9)
        i = 0
        while True:
            size = silk.read(2)
            if len(size) != 2:
                break
            size = size[0] + size[1] << 8
            if not tencent and size == 0xffff:
                break
            i += 1
            silk.seek(silk.tell() + size)
        return i * frame_ms
```

根据 **SILK** 格式规范,**frame_ms** 可为 `20, 40, 60, 80, 100`

## 快速入门

> 详情请在 IDE 中查看 API 文档注释

在使用 **pilk** 之前,你还需清楚 **音频文件 `mp3, aac, m4a, flac, wav, ...`** 与 **语音文件** 之间的转换是借助 [**PCM raw
data**](https://en.wikipedia.org/wiki/Pulse-code_modulation) 完成的

具体转换关系:音频文件 ⇔ PCM ⇔ 语音文件

1. 音(视)频文件 ➜ PCM
   > 借助 ffmpeg,你当然需要先有 [ffmpeg](https://www.ffmpeg.org/download.html)

    ```bat
    ffmpeg -y -i <音(视)频输入文件> -vn -ar <采样率> -ac 1 -f s16le <PCM输出文件>
    ```

    1. `-y`: 可加可不加,表示 <PCM输出文件> 已存在时不询问,直接覆盖
    2. `-i`: 没啥好说的,固定的,后接 <音(视)频输入文件>
    3. `-vn`: 表示不处理视频数据,建议添加,虽然不加也不会处理视频数据(视频数据不存在转PCM的说法),但可能会打印警告
    4. `-ar`: 设置采样率,可选的值是 [8000, 12000, 16000, 24000, 32000, 44100, 48000], 这里你可以直接理解为声音质量
    5. `-ac`: 设置声道数,在这里必须为 **1**,这是由 **SILK** 决定的
    6. `-f`: 表示强制转换为指定的格式,一般来说必须为 **s16le**, 表示 `16-bit short integer Little-Endian data`
    7. example1: `ffmpeg -y -i mv.mp4 -vn -ar 44100 -ac 1 -f s16le mv.pcm`
    8. example2: `ffmpeg -y -i music.mp3 -ar 44100 -ac 1 -f s16le music.pcm`

2. PCM ➜ 音频文件

    ```bat
    ffmpeg -y -f s16le -i <PCM输入文件> -ar <采样率> -ac <声道数> <音频输出文件>
    ```

    1. `-f`: 这里必须为 `s16le`, 同样也是由 **SILK** 决定的
    2. `-ar`: 同上
    3. `-ac`: 含义同上,值随意
    4. `<音频输出文件>`: 扩展名要准确,没有指定格式时,**ffmpeg** 会根据给定的输出文件扩展名来判断需要输出的格式
    5. example3: `ffmpeg -y -f s16le -i test.pcm test.mp3`

> ffmpeg 也可以使用 python ffmpeg binding 替换,推荐 [PyAV](https://github.com/PyAV-Org/PyAV) 大家自行研究,这里不再啰嗦。

讲完了 音频文件 ⇔ PCM,接下来就是用 **pilk** 进行 PCM ⇔ 语音文件 互转

### silk 编码

```python
import pilk_nogil

# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
duration = pilk_nogil.encode("test.pcm", "test.silk", pcm_rate=44100, tencent=True)

print("语音时间为:", duration)
```

### silk 解码

```python
import pilk_nogil

# pcm_rate 参数必须和 使用 ffmpeg 转 音频 到 PCM 文件时,使用的 `-ar` 参数一致
duration = pilk_nogil.decode("test.silk", "test.pcm")

print("语音时间为:", duration)
```

## 使用 Python 转任意媒体文件到 SILK

使用 [pudub](https://github.com/jiaaro/pydub) 依赖 [ffmpeg](https://www.ffmpeg.org/)

```python
import os, pilk_nogil
from pydub import AudioSegment


def convert_to_silk(media_path: str) -> str:
    """将输入的媒体文件转出为 silk, 并返回silk路径"""
    media = AudioSegment.from_file(media_path)
    pcm_path = os.path.basename(media_path)
    pcm_path = os.path.splitext(pcm_path)[0]
    silk_path = pcm_path + '.silk'
    pcm_path += '.pcm'
    media.export(pcm_path, 's16le', parameters=['-ar', str(media.frame_rate), '-ac', '1']).close()
    pilk_nogil.encode(pcm_path, silk_path, pcm_rate=media.frame_rate, tencent=True)
    return silk_path
```

使用 [pyav](https://github.com/PyAV-Org/PyAV) **推荐**

```python
import os

import av

import pilk_nogil


def to_pcm(in_path: str) -> tuple[str, int]:
    """任意媒体文件转 pcm"""
    out_path = os.path.splitext(in_path)[0] + '.pcm'
    with av.open(in_path) as in_container:
        in_stream = in_container.streams.audio[0]
        sample_rate = in_stream.codec_context.sample_rate
        with av.open(out_path, 'w', 's16le') as out_container:
            out_stream = out_container.add_stream(
                'pcm_s16le',
                rate=sample_rate,
                layout='mono'
            )
            try:
               for frame in in_container.decode(in_stream):
                  frame.pts = None
                  for packet in out_stream.encode(frame):
                     out_container.mux(packet)
            except:
               pass
    return out_path, sample_rate


def convert_to_silk(media_path: str) -> str:
    """任意媒体文件转 silk, 返回silk路径"""
    pcm_path, sample_rate = to_pcm(media_path)
    silk_path = os.path.splitext(pcm_path)[0] + '.silk'
    pilk_nogil.encode(pcm_path, silk_path, pcm_rate=sample_rate, tencent=True)
    os.remove(pcm_path)
    return silk_path
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/MelodyYuuka/pilk-nogil",
    "name": "pilk-nogil",
    "maintainer": "MelodyYuuka",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "a876987@126.com",
    "keywords": "silk, voice, python, extension, wechat, qq, tencent, xposed, c/c++",
    "author": "foyou + MelodyYuuka",
    "author_email": "yimi.0822@qq.com + a876987@126.com",
    "download_url": "https://files.pythonhosted.org/packages/75/d5/7cf9be486441fd92e9b2579ff1a93069cff5bd88e5e4bd3f7225af612c82/pilk-nogil-0.3.2.tar.gz",
    "platform": null,
    "description": "# pilk-nogil\n\nfork from [foyoux/pilk](https://github.com/foyoux/pilk)\uff0c\u5728\u7f16\u89e3\u7801\u8fc7\u7a0b\u4e2d\u91ca\u653e\u4e86GIL\uff0c\u9002\u5408\u591a\u7ebf\u7a0b\u5904\u7406\n\npython silk codec binding \u652f\u6301\u5fae\u4fe1\u8bed\u97f3\u7f16\u89e3\u7801\n\npilk: python + silk\n\n\u5173\u8054\u9879\u76ee: [weixin-wxposed-silk-voice](https://github.com/foyoux/weixin-wxposed-silk-voice)\n\n## \u5b89\u88c5\n\n[![python version](https://img.shields.io/pypi/pyversions/pilk-nogil)](https://pypi.org/project/pilk-nogil/)  [![downloads](https://static.pepy.tech/personalized-badge/pilk-nogil?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads)](https://pepy.tech/project/pilk-nogil)\n\n```bash\npip install pilk-nogil\n```\n\n## \u4ecb\u7ecd\u4e0e\u8bf4\u660e\n\n[**SILK**](https://en.wikipedia.org/wiki/SILK) \u662f\u4e00\u79cd\u8bed\u97f3\u7f16\u7801\u683c\u5f0f\uff0c\u7531 [**Skype**](https://en.wikipedia.org/wiki/Skype_Technologies)\n\u516c\u53f8\u7814\u53d1\uff0c\u7f51\u4e0a\u53ef\u627e\u5230\u7684\u6700\u65b0\u7248\u672c\u662f 2012 \u53d1\u5e03\u7684\u3002\n\n**SILK** \u539f\u59cb\u4ee3\u7801\u5df2\u4e0a\u4f20\u5230 [Release](https://github.com/foyoux/pilk/releases/tag/v0.0.1) , \u5305\u542b\u89c4\u8303\u6587\u6863\n\n**Tencent** \u7cfb\u8bed\u97f3\u652f\u6301\u6765\u81ea [silk-v3-decoder](https://github.com/kn007/silk-v3-decoder)\n\n[Release](https://github.com/foyoux/pilk/releases/tag/v0.0.1)\n\u4e2d\u4e5f\u5305\u542b [silk-v3-decoder](https://github.com/kn007/silk-v3-decoder) \u91cd\u7f16\u8bd1\u7684 **x64-win**\n\u7248\u672c\uff0c\u652f\u6301\u4e2d\u6587\uff0c[\u6e90\u4ee3\u7801](https://github.com/foyoux/silk-codec)\n\n### **SILK** \u7f16\u7801\u683c\u5f0f \u548c **Tencent** \u7cfb\u8bed\u97f3\u7684\u5173\u7cfb\n\n> \u6b64\u5904 **Tencent** \u7cfb\u8bed\u97f3\uff0c\u4ec5\u4ee5\u5fae\u4fe1\u8bed\u97f3\u4e3a\u4f8b\n\n1. \u6807\u51c6 **SILK** \u6587\u4ef6\u4ee5 `b'#!SILK_V3'` \u5f00\u59cb\uff0c\u4ee5 `b'\\xFF\\xFF'` \u7ed3\u675f\uff0c\u4e2d\u95f4\u4e3a\u8bed\u97f3\u6570\u636e\n2. \u5fae\u4fe1\u8bed\u97f3\u6587\u4ef6\u5728\u6807\u51c6 **SILK** \u6587\u4ef6\u7684\u5f00\u5934\u63d2\u5165\u4e86 `b'\\x02'`\uff0c\u53bb\u9664\u4e86\u7ed3\u5c3e\u7684 `b'\\xFF\\xFF'`\uff0c\u4e2d\u95f4\u4e0d\u53d8\n\n> \u5df2\u4e0b\u7edf\u79f0\u4e3a\u8bed\u97f3\u6587\u4ef6\n\n### \u8bed\u97f3\u6570\u636e\n\n\u8bed\u97f3\u6570\u636e\u5206\u4e3a\u5f88\u591a\u4e2a\u72ec\u7acb **frame**\uff0c\u6bcf\u4e2a **frame** \u5f00\u5934\u4e24\u5b57\u8282\u5b58\u50a8\u5269\u4f59 **frame** \u6570\u636e\u7684\u5927\u5c0f\uff0c\u6bcf\u4e2a **frame** \u9ed8\u8ba4\u5b58\u50a8 **20ms** \u7684\u97f3\u9891\u6570\u636e\n\n\u636e\u6b64\u53ef\u5199\u51fa\u83b7\u53d6 **\u8bed\u97f3\u6587\u4ef6** \u6301\u7eed\u65f6\u95f4(duration) \u7684\u51fd\u6570\uff08\u6b64\u51fd\u6570 **pilk** \u4e2d\u5df2\u5305\u542b\uff09\n\n```python\ndef get_duration(silk_path: str, frame_ms: int = 20) -> int:\n    \"\"\"\u83b7\u53d6 silk \u6587\u4ef6\u6301\u7eed\u65f6\u95f4\uff0c\u5355\u4f4d\uff1ams\"\"\"\n    with open(silk_path, 'rb') as silk:\n        tencent = False\n        if silk.read(1) == b'\\x02':\n            tencent = True\n        silk.seek(0)\n        if tencent:\n            silk.seek(10)\n        else:\n            silk.seek(9)\n        i = 0\n        while True:\n            size = silk.read(2)\n            if len(size) != 2:\n                break\n            size = size[0] + size[1] << 8\n            if not tencent and size == 0xffff:\n                break\n            i += 1\n            silk.seek(silk.tell() + size)\n        return i * frame_ms\n```\n\n\u6839\u636e **SILK** \u683c\u5f0f\u89c4\u8303\uff0c**frame_ms** \u53ef\u4e3a `20, 40, 60, 80, 100`\n\n## \u5feb\u901f\u5165\u95e8\n\n> \u8be6\u60c5\u8bf7\u5728 IDE \u4e2d\u67e5\u770b API \u6587\u6863\u6ce8\u91ca\n\n\u5728\u4f7f\u7528 **pilk** \u4e4b\u524d\uff0c\u4f60\u8fd8\u9700\u6e05\u695a **\u97f3\u9891\u6587\u4ef6 `mp3, aac, m4a, flac, wav, ...`** \u4e0e **\u8bed\u97f3\u6587\u4ef6** \u4e4b\u95f4\u7684\u8f6c\u6362\u662f\u501f\u52a9 [**PCM raw\ndata**](https://en.wikipedia.org/wiki/Pulse-code_modulation) \u5b8c\u6210\u7684\n\n\u5177\u4f53\u8f6c\u6362\u5173\u7cfb\uff1a\u97f3\u9891\u6587\u4ef6 \u21d4 PCM \u21d4 \u8bed\u97f3\u6587\u4ef6\n\n1. \u97f3(\u89c6)\u9891\u6587\u4ef6 \u279c PCM\n   > \u501f\u52a9 ffmpeg\uff0c\u4f60\u5f53\u7136\u9700\u8981\u5148\u6709 [ffmpeg](https://www.ffmpeg.org/download.html)\n\n    ```bat\n    ffmpeg -y -i <\u97f3(\u89c6)\u9891\u8f93\u5165\u6587\u4ef6> -vn -ar <\u91c7\u6837\u7387> -ac 1 -f s16le <PCM\u8f93\u51fa\u6587\u4ef6>\n    ```\n\n    1. `-y`: \u53ef\u52a0\u53ef\u4e0d\u52a0\uff0c\u8868\u793a <PCM\u8f93\u51fa\u6587\u4ef6> \u5df2\u5b58\u5728\u65f6\u4e0d\u8be2\u95ee\uff0c\u76f4\u63a5\u8986\u76d6\n    2. `-i`: \u6ca1\u5565\u597d\u8bf4\u7684\uff0c\u56fa\u5b9a\u7684\uff0c\u540e\u63a5 <\u97f3(\u89c6)\u9891\u8f93\u5165\u6587\u4ef6>\n    3. `-vn`: \u8868\u793a\u4e0d\u5904\u7406\u89c6\u9891\u6570\u636e\uff0c\u5efa\u8bae\u6dfb\u52a0\uff0c\u867d\u7136\u4e0d\u52a0\u4e5f\u4e0d\u4f1a\u5904\u7406\u89c6\u9891\u6570\u636e\uff08\u89c6\u9891\u6570\u636e\u4e0d\u5b58\u5728\u8f6cPCM\u7684\u8bf4\u6cd5\uff09\uff0c\u4f46\u53ef\u80fd\u4f1a\u6253\u5370\u8b66\u544a\n    4. `-ar`: \u8bbe\u7f6e\u91c7\u6837\u7387\uff0c\u53ef\u9009\u7684\u503c\u662f [8000, 12000, 16000, 24000, 32000, 44100, 48000], \u8fd9\u91cc\u4f60\u53ef\u4ee5\u76f4\u63a5\u7406\u89e3\u4e3a\u58f0\u97f3\u8d28\u91cf\n    5. `-ac`: \u8bbe\u7f6e\u58f0\u9053\u6570\uff0c\u5728\u8fd9\u91cc\u5fc5\u987b\u4e3a **1**\uff0c\u8fd9\u662f\u7531 **SILK** \u51b3\u5b9a\u7684\n    6. `-f`: \u8868\u793a\u5f3a\u5236\u8f6c\u6362\u4e3a\u6307\u5b9a\u7684\u683c\u5f0f\uff0c\u4e00\u822c\u6765\u8bf4\u5fc5\u987b\u4e3a **s16le**, \u8868\u793a `16-bit short integer Little-Endian data`\n    7. example1: `ffmpeg -y -i mv.mp4 -vn -ar 44100 -ac 1 -f s16le mv.pcm`\n    8. example2: `ffmpeg -y -i music.mp3 -ar 44100 -ac 1 -f s16le music.pcm`\n\n2. PCM \u279c \u97f3\u9891\u6587\u4ef6\n\n    ```bat\n    ffmpeg -y -f s16le -i <PCM\u8f93\u5165\u6587\u4ef6> -ar <\u91c7\u6837\u7387> -ac <\u58f0\u9053\u6570> <\u97f3\u9891\u8f93\u51fa\u6587\u4ef6>\n    ```\n\n    1. `-f`: \u8fd9\u91cc\u5fc5\u987b\u4e3a `s16le`, \u540c\u6837\u4e5f\u662f\u7531 **SILK** \u51b3\u5b9a\u7684\n    2. `-ar`: \u540c\u4e0a\n    3. `-ac`: \u542b\u4e49\u540c\u4e0a\uff0c\u503c\u968f\u610f\n    4. `<\u97f3\u9891\u8f93\u51fa\u6587\u4ef6>`: \u6269\u5c55\u540d\u8981\u51c6\u786e\uff0c\u6ca1\u6709\u6307\u5b9a\u683c\u5f0f\u65f6\uff0c**ffmpeg** \u4f1a\u6839\u636e\u7ed9\u5b9a\u7684\u8f93\u51fa\u6587\u4ef6\u6269\u5c55\u540d\u6765\u5224\u65ad\u9700\u8981\u8f93\u51fa\u7684\u683c\u5f0f\n    5. example3: `ffmpeg -y -f s16le -i test.pcm test.mp3`\n\n> ffmpeg \u4e5f\u53ef\u4ee5\u4f7f\u7528 python ffmpeg binding \u66ff\u6362\uff0c\u63a8\u8350 [PyAV](https://github.com/PyAV-Org/PyAV) \u5927\u5bb6\u81ea\u884c\u7814\u7a76\uff0c\u8fd9\u91cc\u4e0d\u518d\u5570\u55e6\u3002\n\n\u8bb2\u5b8c\u4e86 \u97f3\u9891\u6587\u4ef6 \u21d4 PCM\uff0c\u63a5\u4e0b\u6765\u5c31\u662f\u7528 **pilk** \u8fdb\u884c PCM \u21d4 \u8bed\u97f3\u6587\u4ef6 \u4e92\u8f6c\n\n### silk \u7f16\u7801\n\n```python\nimport pilk_nogil\n\n# pcm_rate \u53c2\u6570\u5fc5\u987b\u548c \u4f7f\u7528 ffmpeg \u8f6c \u97f3\u9891 \u5230 PCM \u6587\u4ef6\u65f6\uff0c\u4f7f\u7528\u7684 `-ar` \u53c2\u6570\u4e00\u81f4\n# pcm_rate \u53c2\u6570\u5fc5\u987b\u548c \u4f7f\u7528 ffmpeg \u8f6c \u97f3\u9891 \u5230 PCM \u6587\u4ef6\u65f6\uff0c\u4f7f\u7528\u7684 `-ar` \u53c2\u6570\u4e00\u81f4\n# pcm_rate \u53c2\u6570\u5fc5\u987b\u548c \u4f7f\u7528 ffmpeg \u8f6c \u97f3\u9891 \u5230 PCM \u6587\u4ef6\u65f6\uff0c\u4f7f\u7528\u7684 `-ar` \u53c2\u6570\u4e00\u81f4\nduration = pilk_nogil.encode(\"test.pcm\", \"test.silk\", pcm_rate=44100, tencent=True)\n\nprint(\"\u8bed\u97f3\u65f6\u95f4\u4e3a:\", duration)\n```\n\n### silk \u89e3\u7801\n\n```python\nimport pilk_nogil\n\n# pcm_rate \u53c2\u6570\u5fc5\u987b\u548c \u4f7f\u7528 ffmpeg \u8f6c \u97f3\u9891 \u5230 PCM \u6587\u4ef6\u65f6\uff0c\u4f7f\u7528\u7684 `-ar` \u53c2\u6570\u4e00\u81f4\nduration = pilk_nogil.decode(\"test.silk\", \"test.pcm\")\n\nprint(\"\u8bed\u97f3\u65f6\u95f4\u4e3a:\", duration)\n```\n\n## \u4f7f\u7528 Python \u8f6c\u4efb\u610f\u5a92\u4f53\u6587\u4ef6\u5230 SILK\n\n\u4f7f\u7528 [pudub](https://github.com/jiaaro/pydub) \u4f9d\u8d56 [ffmpeg](https://www.ffmpeg.org/)\n\n```python\nimport os, pilk_nogil\nfrom pydub import AudioSegment\n\n\ndef convert_to_silk(media_path: str) -> str:\n    \"\"\"\u5c06\u8f93\u5165\u7684\u5a92\u4f53\u6587\u4ef6\u8f6c\u51fa\u4e3a silk, \u5e76\u8fd4\u56desilk\u8def\u5f84\"\"\"\n    media = AudioSegment.from_file(media_path)\n    pcm_path = os.path.basename(media_path)\n    pcm_path = os.path.splitext(pcm_path)[0]\n    silk_path = pcm_path + '.silk'\n    pcm_path += '.pcm'\n    media.export(pcm_path, 's16le', parameters=['-ar', str(media.frame_rate), '-ac', '1']).close()\n    pilk_nogil.encode(pcm_path, silk_path, pcm_rate=media.frame_rate, tencent=True)\n    return silk_path\n```\n\n\u4f7f\u7528 [pyav](https://github.com/PyAV-Org/PyAV) **\u63a8\u8350**\n\n```python\nimport os\n\nimport av\n\nimport pilk_nogil\n\n\ndef to_pcm(in_path: str) -> tuple[str, int]:\n    \"\"\"\u4efb\u610f\u5a92\u4f53\u6587\u4ef6\u8f6c pcm\"\"\"\n    out_path = os.path.splitext(in_path)[0] + '.pcm'\n    with av.open(in_path) as in_container:\n        in_stream = in_container.streams.audio[0]\n        sample_rate = in_stream.codec_context.sample_rate\n        with av.open(out_path, 'w', 's16le') as out_container:\n            out_stream = out_container.add_stream(\n                'pcm_s16le',\n                rate=sample_rate,\n                layout='mono'\n            )\n            try:\n               for frame in in_container.decode(in_stream):\n                  frame.pts = None\n                  for packet in out_stream.encode(frame):\n                     out_container.mux(packet)\n            except:\n               pass\n    return out_path, sample_rate\n\n\ndef convert_to_silk(media_path: str) -> str:\n    \"\"\"\u4efb\u610f\u5a92\u4f53\u6587\u4ef6\u8f6c silk, \u8fd4\u56desilk\u8def\u5f84\"\"\"\n    pcm_path, sample_rate = to_pcm(media_path)\n    silk_path = os.path.splitext(pcm_path)[0] + '.silk'\n    pilk_nogil.encode(pcm_path, silk_path, pcm_rate=sample_rate, tencent=True)\n    os.remove(pcm_path)\n    return silk_path\n```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "python silk voice library",
    "version": "0.3.2",
    "project_urls": {
        "Download": "https://github.com/MelodyYuuka/pilk-nogil/releases",
        "Homepage": "https://github.com/MelodyYuuka/pilk-nogil"
    },
    "split_keywords": [
        "silk",
        " voice",
        " python",
        " extension",
        " wechat",
        " qq",
        " tencent",
        " xposed",
        " c/c++"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "828b7f9e0828cb43cf9047a5960aa13d80d4239edb1f76e17ae63fdd26c108e5",
                "md5": "6528a95bd83e2d15b6d67fd7af101bb3",
                "sha256": "76e487b3ebb9b06da8ed7605339289caebd44b2732d4e978dd9fe2802d60612f"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6528a95bd83e2d15b6d67fd7af101bb3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.6",
            "size": 477057,
            "upload_time": "2024-03-24T16:03:31",
            "upload_time_iso_8601": "2024-03-24T16:03:31.513663Z",
            "url": "https://files.pythonhosted.org/packages/82/8b/7f9e0828cb43cf9047a5960aa13d80d4239edb1f76e17ae63fdd26c108e5/pilk_nogil-0.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb3a42f0ad11b80f1f3c8d1ab95181a18e64b0182db7c106db168f1e4b6cfc0c",
                "md5": "65572a653275d388b3d36b174330c386",
                "sha256": "03eb29d72ed5738b16ddbb45a1f0942791f65df2341e8a8d4ecbea919d1b59c2"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp310-cp310-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "65572a653275d388b3d36b174330c386",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.6",
            "size": 450021,
            "upload_time": "2024-03-24T16:03:33",
            "upload_time_iso_8601": "2024-03-24T16:03:33.086908Z",
            "url": "https://files.pythonhosted.org/packages/fb/3a/42f0ad11b80f1f3c8d1ab95181a18e64b0182db7c106db168f1e4b6cfc0c/pilk_nogil-0.3.2-cp310-cp310-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "014f9b8bf6d5767b856ff483a8d8d4b199139334264c4d2050a528ef3e5d7ce4",
                "md5": "6c3e5a493c5be1317fe27f43c18d5af6",
                "sha256": "6bcbeccfd30e7fa6071c6bb0c98c1f1a92687d1b996d5d7139e68390e6e8951b"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6c3e5a493c5be1317fe27f43c18d5af6",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.6",
            "size": 502192,
            "upload_time": "2024-03-24T16:03:34",
            "upload_time_iso_8601": "2024-03-24T16:03:34.826592Z",
            "url": "https://files.pythonhosted.org/packages/01/4f/9b8bf6d5767b856ff483a8d8d4b199139334264c4d2050a528ef3e5d7ce4/pilk_nogil-0.3.2-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cf479097fff143d494c42c8e15f6990c986e8fded1a62a7b477497943310272a",
                "md5": "2ca08a31f23f5b5acd074474b6a39044",
                "sha256": "7ae61fd18b8493296ab2efa4c15b1abfedcd3c982c9c8288d254afb5d0a560e1"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2ca08a31f23f5b5acd074474b6a39044",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.6",
            "size": 127146,
            "upload_time": "2024-03-24T16:03:36",
            "upload_time_iso_8601": "2024-03-24T16:03:36.151607Z",
            "url": "https://files.pythonhosted.org/packages/cf/47/9097fff143d494c42c8e15f6990c986e8fded1a62a7b477497943310272a/pilk_nogil-0.3.2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "985f11cd95b072fe7a696c96c998dddd96206aa9a28f760c5e9eab7327adeaa6",
                "md5": "e90efaf716ac752f3222fe74a44c3265",
                "sha256": "3b4f2b0a7d2a59f284b2d4ea6f025ca3608d9704ca7df9ebc26b8f15adce8911"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e90efaf716ac752f3222fe74a44c3265",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.6",
            "size": 477981,
            "upload_time": "2024-03-24T16:03:37",
            "upload_time_iso_8601": "2024-03-24T16:03:37.433741Z",
            "url": "https://files.pythonhosted.org/packages/98/5f/11cd95b072fe7a696c96c998dddd96206aa9a28f760c5e9eab7327adeaa6/pilk_nogil-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ada7b518fb311f99e3082b7cf408bbfa76df066165cc14ef179f53f5489ff3ff",
                "md5": "ac14019bec35ac0dfbdc44dacf190dc9",
                "sha256": "d5a8ccdb1af3b48778d9cecccaf199958f6da9bc7b52fb4810474ea410b6f7f4"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp311-cp311-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "ac14019bec35ac0dfbdc44dacf190dc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.6",
            "size": 453450,
            "upload_time": "2024-03-24T16:03:39",
            "upload_time_iso_8601": "2024-03-24T16:03:39.289334Z",
            "url": "https://files.pythonhosted.org/packages/ad/a7/b518fb311f99e3082b7cf408bbfa76df066165cc14ef179f53f5489ff3ff/pilk_nogil-0.3.2-cp311-cp311-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1c9588ac97be4f02bca009479526188b8def440b3771dc7cc2d502e706c1ecbb",
                "md5": "830b4746850b1218499f6c97e5bb1d3a",
                "sha256": "01ca0c3184f25165c8020f33b77d21619b0c1fe0243f25b34319509039f966f8"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "830b4746850b1218499f6c97e5bb1d3a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.6",
            "size": 506611,
            "upload_time": "2024-03-24T16:03:40",
            "upload_time_iso_8601": "2024-03-24T16:03:40.960635Z",
            "url": "https://files.pythonhosted.org/packages/1c/95/88ac97be4f02bca009479526188b8def440b3771dc7cc2d502e706c1ecbb/pilk_nogil-0.3.2-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "99103452e39ad870a03ca1fddfea442f53a78ee137d41fedca9cf1de48a3abda",
                "md5": "5c6149fbe2db961b77206f3f12c6bda8",
                "sha256": "0ce6f49f549e8212ccbf51b59d0385f10bbb5d2ee577ec968dc9680d7d4f0d9e"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5c6149fbe2db961b77206f3f12c6bda8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.6",
            "size": 127147,
            "upload_time": "2024-03-24T16:03:42",
            "upload_time_iso_8601": "2024-03-24T16:03:42.143850Z",
            "url": "https://files.pythonhosted.org/packages/99/10/3452e39ad870a03ca1fddfea442f53a78ee137d41fedca9cf1de48a3abda/pilk_nogil-0.3.2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4082c81248f9ccb531f15f74b3fa04e2b94c848e6bcbfd6636c272d05b82c64d",
                "md5": "7197035ccdd705c4365da4281dcf6f60",
                "sha256": "82f1ebe4425192fb087f8344ba93c26b3f4e028c41757b21073d4ef8a97f4a88"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7197035ccdd705c4365da4281dcf6f60",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.6",
            "size": 478018,
            "upload_time": "2024-03-24T16:03:43",
            "upload_time_iso_8601": "2024-03-24T16:03:43.761141Z",
            "url": "https://files.pythonhosted.org/packages/40/82/c81248f9ccb531f15f74b3fa04e2b94c848e6bcbfd6636c272d05b82c64d/pilk_nogil-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "186ab252827d1bc7b97aa68ec18b9d189ec6a1bc0ea4ebff6af197cbf9aad62b",
                "md5": "8f5154fcdd4edfce453cd87582e8aa29",
                "sha256": "d2fd49c018b6f7e3fa4af1df3775d2186eb515171033ffcced58979838aaaf60"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp312-cp312-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "8f5154fcdd4edfce453cd87582e8aa29",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.6",
            "size": 453069,
            "upload_time": "2024-03-24T16:03:44",
            "upload_time_iso_8601": "2024-03-24T16:03:44.958239Z",
            "url": "https://files.pythonhosted.org/packages/18/6a/b252827d1bc7b97aa68ec18b9d189ec6a1bc0ea4ebff6af197cbf9aad62b/pilk_nogil-0.3.2-cp312-cp312-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3d566a22ea3a2016488dbfa4393c216cac21c9e3c4309bb155c1a15353138d07",
                "md5": "320f7758701fb7883350196f2f419781",
                "sha256": "5257c7b2fb9b91ab4f1dd717acce1a3c48d29080b78fad94f2245c37cf209519"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "320f7758701fb7883350196f2f419781",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.6",
            "size": 506436,
            "upload_time": "2024-03-24T16:03:46",
            "upload_time_iso_8601": "2024-03-24T16:03:46.715328Z",
            "url": "https://files.pythonhosted.org/packages/3d/56/6a22ea3a2016488dbfa4393c216cac21c9e3c4309bb155c1a15353138d07/pilk_nogil-0.3.2-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ced6d782dfabacde99f55f3954979d2ce4bdbb15323edc5030c02e8129fe58c1",
                "md5": "596e6643f7712f8c1d243486e63e133a",
                "sha256": "95e6c8994249bee29a73e1a9cfc9ee83668c3bc5d34bf59355a7b2569d088cfe"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "596e6643f7712f8c1d243486e63e133a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.6",
            "size": 127166,
            "upload_time": "2024-03-24T16:03:48",
            "upload_time_iso_8601": "2024-03-24T16:03:48.438035Z",
            "url": "https://files.pythonhosted.org/packages/ce/d6/d782dfabacde99f55f3954979d2ce4bdbb15323edc5030c02e8129fe58c1/pilk_nogil-0.3.2-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "57d723fa3db31c8d6ea1324c118a2b867c0d4e95544fa926f1a2a4296b055709",
                "md5": "5ceb1e26c19da9226504107f5e97b73c",
                "sha256": "ad159f37ce8a8f885255313f1b77d5ac6202d33ca02cc2eb84b70cfea63423de"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5ceb1e26c19da9226504107f5e97b73c",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 480700,
            "upload_time": "2024-03-24T16:03:50",
            "upload_time_iso_8601": "2024-03-24T16:03:50.094864Z",
            "url": "https://files.pythonhosted.org/packages/57/d7/23fa3db31c8d6ea1324c118a2b867c0d4e95544fa926f1a2a4296b055709/pilk_nogil-0.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2bbba4844344b00e72e80ed0d1ee6d7ae1098435b785fc265def025959858771",
                "md5": "cc77849db51915c99b226740e996f23b",
                "sha256": "efde535370b4f48a366bc09b4864eea7b4097afb1432e75bcbd33363453c055d"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp36-cp36m-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "cc77849db51915c99b226740e996f23b",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 460518,
            "upload_time": "2024-03-24T16:03:52",
            "upload_time_iso_8601": "2024-03-24T16:03:52.023065Z",
            "url": "https://files.pythonhosted.org/packages/2b/bb/a4844344b00e72e80ed0d1ee6d7ae1098435b785fc265def025959858771/pilk_nogil-0.3.2-cp36-cp36m-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1c46c63ebed0589b847be4a8c11ba9f171c5251cae95e1d396112c28eb16f7dd",
                "md5": "23348f5371a6bd95de4555796f2db720",
                "sha256": "fb09feb528d9c290440c6bae17cf54ead3436e635a94ddff4903ab01844c65db"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp36-cp36m-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "23348f5371a6bd95de4555796f2db720",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 512094,
            "upload_time": "2024-03-24T16:03:53",
            "upload_time_iso_8601": "2024-03-24T16:03:53.762396Z",
            "url": "https://files.pythonhosted.org/packages/1c/46/c63ebed0589b847be4a8c11ba9f171c5251cae95e1d396112c28eb16f7dd/pilk_nogil-0.3.2-cp36-cp36m-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f0d541ef90ca114d6f0d9b4f37924c0f20fd3939cc5ef554a14ae7ae0991db7c",
                "md5": "d828fd159f10ce434861357769c4ff87",
                "sha256": "f618c98dcdff0529ed280c81d1eed9fa15ac87fbc7180e327ba95ae209bedb30"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp36-cp36m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d828fd159f10ce434861357769c4ff87",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": ">=3.6",
            "size": 134671,
            "upload_time": "2024-03-24T16:03:54",
            "upload_time_iso_8601": "2024-03-24T16:03:54.960432Z",
            "url": "https://files.pythonhosted.org/packages/f0/d5/41ef90ca114d6f0d9b4f37924c0f20fd3939cc5ef554a14ae7ae0991db7c/pilk_nogil-0.3.2-cp36-cp36m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "039e044be2ac96e0ff7a479244097eb84430b3b7b97a1470cf25a203870ec336",
                "md5": "fe2eeedf4c40edff2b5b08af0ad40cc9",
                "sha256": "c82b727580902d8745344a09d2bfffc9801846f31842bbaca8cfdbbc67844b5b"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fe2eeedf4c40edff2b5b08af0ad40cc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 477984,
            "upload_time": "2024-03-24T16:03:56",
            "upload_time_iso_8601": "2024-03-24T16:03:56.590655Z",
            "url": "https://files.pythonhosted.org/packages/03/9e/044be2ac96e0ff7a479244097eb84430b3b7b97a1470cf25a203870ec336/pilk_nogil-0.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e9d9c12a5a0f530364baf28ed249bd11ab92bda840ceaf1e2fec7e358b2ed547",
                "md5": "9114168f16afba9c3f11b66e4677e0f1",
                "sha256": "9e7dccb43a95195c044fc4b0ac49abb58477348ac7767b29f3c6257f84e675aa"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "9114168f16afba9c3f11b66e4677e0f1",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 450393,
            "upload_time": "2024-03-24T16:03:57",
            "upload_time_iso_8601": "2024-03-24T16:03:57.819961Z",
            "url": "https://files.pythonhosted.org/packages/e9/d9/c12a5a0f530364baf28ed249bd11ab92bda840ceaf1e2fec7e358b2ed547/pilk_nogil-0.3.2-cp37-cp37m-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a6923aa0330e2bc1ded22b63943a495629d4fb88845376e1522a02ce2f7882d8",
                "md5": "b47ed60965444c91cd7abe92e5cfa2ed",
                "sha256": "41446a1c8eae9e527c31694675c02ac7f35defdc4bda1903995ccd5db27b3e0d"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b47ed60965444c91cd7abe92e5cfa2ed",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 502792,
            "upload_time": "2024-03-24T16:03:59",
            "upload_time_iso_8601": "2024-03-24T16:03:59.173322Z",
            "url": "https://files.pythonhosted.org/packages/a6/92/3aa0330e2bc1ded22b63943a495629d4fb88845376e1522a02ce2f7882d8/pilk_nogil-0.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9e75ea98841e6a7bd2ef7a56e3926a22bbc2524200f5a7de63c827df808694a7",
                "md5": "daeb5727377c3ddc4fcbd5cb6e73a2f3",
                "sha256": "d96aa26a305d47c7eddd00bce3d73a3df1023d4942473c1e70e0ff500f0af622"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "daeb5727377c3ddc4fcbd5cb6e73a2f3",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": ">=3.6",
            "size": 127165,
            "upload_time": "2024-03-24T16:04:01",
            "upload_time_iso_8601": "2024-03-24T16:04:01.299089Z",
            "url": "https://files.pythonhosted.org/packages/9e/75/ea98841e6a7bd2ef7a56e3926a22bbc2524200f5a7de63c827df808694a7/pilk_nogil-0.3.2-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "440f9bfb051876c66b15db8c72ddc684f10a775b187c4cdef54e3e25139004ea",
                "md5": "fb2024f8eab6381b86dd00b66fd7b268",
                "sha256": "27ad72af111c7f2d45c0db3364219a2d8e49fd429d0652e54ea5c92c13b93ab9"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fb2024f8eab6381b86dd00b66fd7b268",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 477247,
            "upload_time": "2024-03-24T16:04:02",
            "upload_time_iso_8601": "2024-03-24T16:04:02.430717Z",
            "url": "https://files.pythonhosted.org/packages/44/0f/9bfb051876c66b15db8c72ddc684f10a775b187c4cdef54e3e25139004ea/pilk_nogil-0.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c2db787655ed3265522c93e04482058be55873c3e33474a132020a7560e2b322",
                "md5": "02e63a24e1f8e9f608a19a556a3c5573",
                "sha256": "62f73731803528f52d063469cbc687dcb44fc80e624203e9b1fb33b2ba875bde"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp38-cp38-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "02e63a24e1f8e9f608a19a556a3c5573",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 450148,
            "upload_time": "2024-03-24T16:04:03",
            "upload_time_iso_8601": "2024-03-24T16:04:03.645505Z",
            "url": "https://files.pythonhosted.org/packages/c2/db/787655ed3265522c93e04482058be55873c3e33474a132020a7560e2b322/pilk_nogil-0.3.2-cp38-cp38-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2afe20c88ee0a57f019271969d7e995e90f8835e786be0aef2e3a4eab875c0b3",
                "md5": "aa2967cc7b2712492ceb25d6b3fe462c",
                "sha256": "b9be09c0312781865e71f28e83cfe9b8a32cb4601027cb53e8637ef1beee27bc"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "aa2967cc7b2712492ceb25d6b3fe462c",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 502410,
            "upload_time": "2024-03-24T16:04:05",
            "upload_time_iso_8601": "2024-03-24T16:04:05.480627Z",
            "url": "https://files.pythonhosted.org/packages/2a/fe/20c88ee0a57f019271969d7e995e90f8835e786be0aef2e3a4eab875c0b3/pilk_nogil-0.3.2-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4c8dfd7f2bd9f854bc8c9c95aaa3614acfc6ee81a214dd0fb6cfe0b7633f6195",
                "md5": "ee7a6565a1e15d9ee5ea3b689130667a",
                "sha256": "d3d7f2a77357f58e749f9e1056546eadf766f08732808fb698e9f8984393b452"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ee7a6565a1e15d9ee5ea3b689130667a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.6",
            "size": 127137,
            "upload_time": "2024-03-24T16:04:07",
            "upload_time_iso_8601": "2024-03-24T16:04:07.173134Z",
            "url": "https://files.pythonhosted.org/packages/4c/8d/fd7f2bd9f854bc8c9c95aaa3614acfc6ee81a214dd0fb6cfe0b7633f6195/pilk_nogil-0.3.2-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d15bd4d03443c87923b6191fca59940d268ba4af5506eb95a93cb41fb9194245",
                "md5": "5162c7945283b2ea3800a2205e3375d6",
                "sha256": "85dfb28017dccc3ec88704ef870af8a7038911cfc12ac4296cbc4ac1cbfdbaba"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5162c7945283b2ea3800a2205e3375d6",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 476711,
            "upload_time": "2024-03-24T16:04:08",
            "upload_time_iso_8601": "2024-03-24T16:04:08.749472Z",
            "url": "https://files.pythonhosted.org/packages/d1/5b/d4d03443c87923b6191fca59940d268ba4af5506eb95a93cb41fb9194245/pilk_nogil-0.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6e6f6f23ff8d90b7e713f9c628cbee5dd0d759d6e94378a27eea3e2fbf4ee238",
                "md5": "2613fe6120896e13ff33aabc1e0d88ce",
                "sha256": "a69dda1d8e97c955cfc552e9a379013cbd0a4384c8309ec97755e993f799bfde"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp39-cp39-musllinux_1_1_i686.whl",
            "has_sig": false,
            "md5_digest": "2613fe6120896e13ff33aabc1e0d88ce",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 449708,
            "upload_time": "2024-03-24T16:04:09",
            "upload_time_iso_8601": "2024-03-24T16:04:09.888554Z",
            "url": "https://files.pythonhosted.org/packages/6e/6f/6f23ff8d90b7e713f9c628cbee5dd0d759d6e94378a27eea3e2fbf4ee238/pilk_nogil-0.3.2-cp39-cp39-musllinux_1_1_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "02a7139487a41712f3b075537f3a2ad368acb29929ddf22b7ff8b9b19a607b8a",
                "md5": "24fa66090b62a2d3b35cf15db0da1e25",
                "sha256": "e2aab67cdebb9bdcb7c222feb814014303fa98d9def88462482a102960529335"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "24fa66090b62a2d3b35cf15db0da1e25",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 501872,
            "upload_time": "2024-03-24T16:04:11",
            "upload_time_iso_8601": "2024-03-24T16:04:11.269284Z",
            "url": "https://files.pythonhosted.org/packages/02/a7/139487a41712f3b075537f3a2ad368acb29929ddf22b7ff8b9b19a607b8a/pilk_nogil-0.3.2-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "45e65f47123cf24b62d075a749ab4f8ee372a5cfd498b5f05b8a68ce0a1e64d9",
                "md5": "bf5319dd44437759879f810b419ca55f",
                "sha256": "63d2c429ccece253818e47f876b1d17fdffbe96119821bf3f1268bf5442f366e"
            },
            "downloads": -1,
            "filename": "pilk_nogil-0.3.2-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "bf5319dd44437759879f810b419ca55f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.6",
            "size": 127138,
            "upload_time": "2024-03-24T16:04:12",
            "upload_time_iso_8601": "2024-03-24T16:04:12.449205Z",
            "url": "https://files.pythonhosted.org/packages/45/e6/5f47123cf24b62d075a749ab4f8ee372a5cfd498b5f05b8a68ce0a1e64d9/pilk_nogil-0.3.2-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "75d57cf9be486441fd92e9b2579ff1a93069cff5bd88e5e4bd3f7225af612c82",
                "md5": "99cdab4da179fb0a59874ac3857f2c73",
                "sha256": "2ac5dd74a6728c040b9a112a6cb2d4a5d2da4add9cbeb4e1b7529036c4e9fd81"
            },
            "downloads": -1,
            "filename": "pilk-nogil-0.3.2.tar.gz",
            "has_sig": false,
            "md5_digest": "99cdab4da179fb0a59874ac3857f2c73",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 222995,
            "upload_time": "2024-03-24T16:04:14",
            "upload_time_iso_8601": "2024-03-24T16:04:14.123852Z",
            "url": "https://files.pythonhosted.org/packages/75/d5/7cf9be486441fd92e9b2579ff1a93069cff5bd88e5e4bd3f7225af612c82/pilk-nogil-0.3.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-24 16:04:14",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "MelodyYuuka",
    "github_project": "pilk-nogil",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "pilk-nogil"
}
        
Elapsed time: 0.21837s