portaudio的环形缓冲区的python包装器

pa-ringbuffer的Python项目详细描述


ring buffer functionality通常不包含在二进制文件中 PortAudio的发行版,因此大多数Python包装器都不包含它, 或者。

pa_ringbuffer模块只提供一个python包装器,实际的 portaudio环缓冲区代码必须单独编译,请参见Usage。 它可以用于任何有CFFI可用的python版本。

此模块设计为与sounddevice模块一起使用(它 也可以与其他模块一起使用)在 主Python程序和一个用C语言实现的音频回调函数 或者其他编译语言。

用法

这个模块不是单独使用的,它只在合作中有用 另一个使用cffi的python模块。 例如,查看https://github.com/spatialaudio/python-rtmixer

可以从PyPI获取python代码,例如在setup.py文件中 (在下面的示例中,您的模块将被称为mycffimodule):

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

或者,只需将文件src/pa_ringbuffer.py复制到您自己的 源目录并从那里导入。

您可以构建自己的CFFI模块,如中所述 http://cffi.readthedocs.io/en/latest/cdef.html,只是在 您的mycffimodule_build.py

fromcffiimportFFIimportpa_ringbufferffibuilder=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 班级:

importpa_ringbufferfrom_mycffimoduleimportffi,libRingBuffer=pa_ringbuffer.init(ffi,lib)

API参考

只有两个功能:

pa_ringbuffer.cdef()

此函数返回一个字符串,该字符串包含文件中的C声明 pa_ringbuffer.h,可以用作cffi的cdef()函数的参数 (见上面的Usage)。注意,返回的声明略有不同 在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购买

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

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

在模块文档中的某个地方,您应该添加以下内容:

..autoclass:: RingBuffer
   :inherited-members:

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

版本历史记录

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):
初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ApachePOI如何通过java从excel文件中删除空白列?   linux到后台Java服务应用程序的简单发送/接收接口   java ActionBarPullToRefresh什么都没发生   java从millis获取错误的整数天   java相同的代码在两个不同的包上表现不同   java将每个新的char元素写入一个文件(如果被覆盖)   mysql如何在Java中通过外键链接的多个表中插入数据   java环境下mysql网络文件访问   java当使用构建器模式时,为什么我不应该重用builderobject来访问对象配置?   java jQueryServlet post异常失败   java应该使用什么逻辑来创建像《愤怒的小鸟》中那样的锁屏   java Android:在不滑动的情况下更改ViewPager中的片段   java在使用我的程序逻辑时获得空输出