跳转到主要内容

PortAudio的环形缓冲区Python封装

项目描述

通常,环形缓冲区功能不包括在PortAudio的二进制发行版中,因此大多数Python封装也不包括它。

pa_ringbuffer模块仅提供Python封装,实际的PortAudio环形缓冲区代码需要单独编译,见用法。它可以在任何提供CFFI的Python版本中使用。

此模块旨在与sounddevice模块(它也可能与其他模块一起工作)一起使用,以在主Python程序和用C或某些其他编译语言实现的音频回调函数之间进行非阻塞数据传输。

用法

此模块不应单独使用,它仅在与使用CFFI的另一个Python模块合作时才有用。例如,请参阅https://github.com/spatialaudio/python-rtmixer

您可以从PyPI获取Python代码,例如在您的setup.py文件中(在以下示例中,您的模块将被命名为mycffimodule

from setuptools import setup

setup(
    name=...,
    version=...,
    author=...,
    ...,
    cffi_modules=['mycffimodule_build.py:ffibuilder'],
    setup_requires=['CFFI', 'pa_ringbuffer'],
    install_requires=['pa_ringbuffer'],
    ...,
)

或者,您可以直接将文件src/pa_ringbuffer.py复制到您自己的源目录中,并从中导入它。

您可以根据http://cffi.readthedocs.io/en/latest/cdef.html中的说明构建自己的CFFI模块,只需在mycffimodule_build.py中添加一些额外的代码即可。

from cffi import FFI
import pa_ringbuffer

ffibuilder = FFI()
ffibuilder.cdef(pa_ringbuffer.cdef())
ffibuilder.cdef("""

/* my own declarations */

""")
ffibuilder.set_source(
    '_mycffimodule',
    '/* my implementation */',
    sources=['portaudio/src/common/pa_ringbuffer.c'],
)

if __name__ == '__main__':
    ffibuilder.compile(verbose=True)

请注意,以下文件必须对编译器可用

对于您自己的C代码,您可能需要从主PortAudio头文件中获取一些定义

一旦您编译了您的扩展模块(在CFFI的帮助下),您可以在自己的模块中使用以下内容来获取对RingBuffer类的访问权限

import pa_ringbuffer
from _mycffimodule import ffi, lib

RingBuffer = pa_ringbuffer.init(ffi, lib)

API参考

只有两个函数

pa_ringbuffer.cdef()

此函数返回一个字符串,包含来自文件pa_ringbuffer.h的C声明,可以用作CFFI的cdef()函数的参数(参见上面的使用)。请注意,在macOS/Darwin系统上调用时返回的声明略有不同。

pa_ringbuffer.init(ffi, lib)

此函数返回与CFFI实例关联的RingBuffer类,该实例由ffilib提供。

创建文档

RingBuffer类的文档不单独提供。如果您使用Sphinx,您可以无缝地将RingBuffer类的文档包含到您的文档中。一个示例可以在https://github.com/spatialaudio/python-rtmixer找到,生成的文档可在http://python-rtmixer.readthedocs.io/#rtmixer.RingBuffer找到。

您需要激活autodoc扩展在您的conf.py

extensions = [
    ...,
    'sphinx.ext.autodoc',
    ...,
]

在模块文档中,您应该添加以下内容

.. autoclass:: RingBuffer
   :inherited-members:

在此之前,您可能需要使用currentmodule指令来选择您自己的模块。使用automodule也应该可以。

如果您想使用Sphinx的nitpicky设置,您必须向nitpick_ignore添加一些内容

nitpicky = True
nitpick_ignore = [
    ('py:class', 'optional'),
    ('py:class', 'buffer'),
    ('py:class', 'CData pointer'),
]

版本历史

0.1.4 (2020-08-27):
  • 次要文档更新

0.1.3 (2018-06-02):
  • 没有新功能,只是次要的文档更新

0.1.2 (2017-10-21):
  • 没有新功能,只是修复了错误

0.1.1 (2017-09-04):
  • 添加buffer参数

0.1.0 (2017-08-08):

初始版本

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

pa-ringbuffer-0.1.4.tar.gz (7.8 kB 查看哈希值)

上传于 源代码

构建分发

pa_ringbuffer-0.1.4-py2.py3-none-any.whl (6.9 kB 查看哈希值)

上传于 Python 2 Python 3

支持