Skip to main content

pysndfile 提供 PySndfile,这是一个 Cython 包装类,用于使用 libsndfile 读取/写入声音文件

项目描述

pysndfile 是一个提供PySndfile的 python 包,PySndfile 是一个围绕libsndfileCython包装类 。PySndfile 提供了在各种平台上读取和写入各种声音文件格式的方法。PySndfile 提供了对 libsndfile 中可用的不同声音文件操作选项的相当完整的访问。

由于使用了 libsndfile,几乎所有的声音文件格式(除了 mp3 和派生格式)都可以用 PySndfile 读写。

该接口的设计使得可以使用 libsndfile 的相当大的功能子集,尤其是将字符串读取和写入支持这些的声音文件格式,以及一些允许控制 libsndfile 读取和写入方式的 sf_commands样品。其中最重要的一项是使用剪辑命令。

带有 libsndfile 的透明声音文件 io

PySndfile 是IRCAM 的分析合成团队开发的,主要用于声音分析和声音转换的研究。在这种情况下,声音文件数据的读取和写入必须是透明的。

libsndfile 的裁剪模式的使用在这里很重要,因为读写声音数据不应该改变音频样本。默认情况下,当裁剪关闭时,libsndfile 在将 pcm 格式读入浮点样本或将浮点样本写入 pcm 格式时使用的缩放因子略有不同。因此,每当对声音文件应用完整的读/写周期时,即使未应用任何处理,音频样本也可能会被修改。

更准确地说,如果

  • 声音文件包含 pcm 格式,

  • 并将数据读入浮点数或双精度数,

  • 并且音频数据接近最大范围,因此缩放差异导致修改。

为了避免这个问题,PySndfile 默认将裁剪设置为开。如果您不喜欢这样,您可以使用 PySndfile 方法 set_auto_clipping(False) 将其单独设置为关闭。

执行

该实现基于与 libsndfile 一起分发的头文件 sndfile.hh 的略微修改版本。唯一的修改是添加了一个查询打开的 Sndfile 的可搜索状态的方法。

安装

通过 Anaconda 频道 roebel

Linux (x86_64) 和 Mac OS X (> 10.9) 下的Anaconda python3可使用预编译包。对于这些系统,您可以简单地通过以下方式安装 pysndfile

conda install -c roebel pysndfile

不幸的是,我没有 Windows 机器,因此我无法为 Windows 提供任何软件包。

使用 conda 构建配方编译

您可以在此处使用 conda 配方 。此构建配方将自动下载并编译 libsndfile 构建 pysndfile。

通过 pypi

pip install pysndfile

应该安装 pysndfile 和 python 依赖项。请注意,pip 无法为您安装 libsndfile,因为它不是通过 pypi 提供的。要安装 libsndfile,您应该能够使用系统的软件管理器。但是,这仅在您的软件管理器安装 libsndfile 以便 setup.py 脚本使用的编译器可以找到它时才有效。

从源代码编译

请注意,要从源代码编译,您需要在开始编译之前安装 requirements.txt 文件中列出的要求。此外,您需要按照上一节中的说明安装 libsndfile。

如果 libsndfile(头文件和库)未安装在默认编译器搜索路径中,则必须指定要添加到此搜索路径的库和包含目录。为此,您可以使用可用于 build_ext 命令的命令行选项 –sndfile-libdir 和 –sndfile-incdir,或者在 setup.cfg 文件中指定这两个参数。

视窗

从 1.3.4 版本开始添加了在 windows 下使用 pysndfile 的实验性支持。有关更多评论,请参见 此处以及 sveinse 提供的构建脚本。请注意,我没有任何 Windows 机器,也无法提供任何帮助来完成这项工作。

文档

请在 此处查看开发人员文档。

变化

版本_1.4.4 (2022-03-11)

  • 修复了 win32:改进了 PyUnicode_AsWideCharString 的错误处理(感谢 Andrey Bienkowski)

版本_1.4.3 (2020-01-20)

  • 将 sndio 函数更改为全部使用 PySndfile 作为上下文管理器。这解决了当错误发生时 sndfile 保持打开状态的问题,如果尝试在异常处理程序中重写 sndfile 可能会导致不一致。

版本_1.4.2 (2019-12-18)

  • 修复了 PySndfile.read_frames 方法以正确处理部分阅读帧(之前的修复不完整)

版本_1.4.1 (2019-12-18)

  • 扩展支持的命令以在编写 flac 和 ogg 文件时更改压缩级别

  • 修复了 PySndfile.read_frames 和 sndio.read 方法以正确处理从文件中间读取帧

版本_1.4.0 (2019-12-17)

  • 扩展 PySndfile 类:

    • 支持用作上下文管理器

    • 添加了对 wve、ogg、MPC2000 采样器和 RF64 wav 文件的支持

    • 添加了对强制返回二维数组的支持,即使是单声道文件

    • 添加了关闭文件并释放所有资源的方法。

    • 支持对文件末尾之后的所有值使用 fill_value 读取比文件中存在的帧更多的帧

版本_1.3.8 (2019-10-22)

  • (功能没有变化)

  • 向分布式文件添加了文档

  • 将丢失的许可证文件添加到分发中

  • 感谢@toddrme2178 的补丁。

版本_1.3.7 (2019-08-01)

  • 从 requirements.txt 中删除了 cython(构建要求)

  • 避免 cython 警告并修复 .pyx 源代码中的语言级别

  • 在版本号中添加和支持预发布标签

  • 使用 hashlib 计算 README 校验和。

  • 修复了对自 1.3.4 以来已损坏的 python 2.7 的支持

版本_1.3.6 (2019-07-27)

  • pandoc的固定潜在但不希望的构建依赖关系

  • 添加了在 windows 下使用 pysndfile 的解释链接

  • 修复了在第一个输出中产生非 ASCII 字符的 pandoc 问题。

版本_1.3.5 (2019-07-27)

  • 修复了 1.3.4 中引入的两个复制粘贴错误 1.3.4 实际上根本不起作用 :-(

  • 向 makefile 添加了一个检查目标,该目标执行完整的构建/安装/测试循环以避免出现 1.3.4 中的问题

版本_1.3.4 (2019-07-23)

  • 增加了对自动安装需求的支持

  • 删除预编译的 cython 源文件并依靠 pip 要求提供 cython,以便始终可以进行 cython 编译。

  • 添加了对在 win32 上安装的实验性支持(感谢 Svein Seldal 的贡献)。

  • 使用 expanduser 替换文件名中的 ~

  • 改编 cython 源代码以避免由于不推荐使用的 numpy api 而导致的所有编译器警告

  • 删除了不再需要的 ez_setup.py 的使用。

版本_1.3.3 (2019-06-01)

  • 修复了缺少的命令 C_SFC_SET_SCALE_INT_FLOAT_WRITE(感谢 Svein Seldal 的错误报告和修复)

  • sndio.read 和 sndio.write 中更好的 sf_string-io 文档

  • 限制要写入的字符串的大小,以便始终可以使用 libsndfile 1.0.28 读回写入的文件(这对不同的格式施加了不同的约束)

  • 当通道数超过 libsndfile 施加的通道限制时,可以更好地处理错误。

  • sndio 模块现在公开字典:fileformat_name_to_id 和 fileformat_id_to_name

  • 扩展的 sndio.read 带有 force_2d 参数,可用于强制返回的数据数组始终具有 2 维,即使对于单声道文件也是如此。

版本_1.3.2 (2018-07-04)

  • sndio 模块的固定文档。

版本_1.3.1 (2018-07-04)

  • 通过添加允许从声音文件中检索嵌入标记的 enw 函数来扩展 sndio。只会为 aiff 文件检索名称标记标签。

  • 删除了 pysndfile.get_cue_mrks(self) 函数中的打印输出。

  • 文档中的固定版本号。

版本_1.3.0 (2018-07-04)

  • 添加了对从 aiff 和 wav 文件中检索提示点的支持。

版本_1.2.2 (2018-06-11)

  • 修复了无意中打乱的 c++-include 文件。

版本_1.2.1 (2018-06-11)

  • 修复了长描述和自述文件中的格式错误。

  • setup.py 显式选择长描述的格式。

版本_1.2.0 (2018-06-11)

  • 支持在 sndio 模块中读写声音文件字符串

  • 改进了模块常量映射和 PySndfile 方法的文档。

  • 添加了一种新方法,支持将字典中的所有字符串写入声音文件。

版本_1.1.1 (2018-06-10)

此更新纯粹是管理性的,没有代码更改

  • 将项目移至 IRCAM GitLab

  • 将文档移至 ReadTheDoc

  • 固定文件。

版本_1.1.0 (2018-02-13)

  • 支持从函数 sndio.get_info 返回扩展的 sndfile 信息,包括帧数和通道数。

版本_1.0.0 (2017-07-26)

  • 将版本号更新为 1.0.0:

  • pysndfile 现在已经在 python 3 下安静地使用了一段时间,大多数问题似乎都得到了修复。

  • 更改 setup.py 以避免上传过时的 LONG_DESC 文件。

版本_0.2.15 (2017-07-26)

  • 修复 get_sndfile_version 函数和测试脚本:调整字符处理以与 python 3 兼容。

版本 0.2.14 (2017-07-26)

  • 由于指针无效,修复了警告消息中显示的文件名:将 char* 替换为 std::string

版本 0.2.13 (2017-06-03)

  • 修复了使用“~”在文件名中表示 $HOME 的问题:

  • _pysndfile.pyx:使用 cython getenv 替换为 os.environ 以避免 python3 中的类型不兼容

版本 0.2.12 (2017-05-11)

  • 修复了 sndio.read 中的问题:可选择使用相应的 write 函数返回存储文件所需的完整信息

  • _pysndfile.pyx:将常量 SF_FORMAT_TYPEMASK 和 SF_FORMAT_SUBMASK、SF_FORMAT_ENDMASK 添加到 python 接口添加了用于在出现错误时获取内部 sf 日志的新功能。通过从 sndfile.h 中自动检索变量定义来提高它们的一致性

版本 0.2.11 (2015-05-17)

  • setup.py:修复了编译器不提供编译器属性 (MSVC) 的问题(感谢 Felix Hanke 报告问题)

  • _pysndfile.pyx:修复了在派生类中使用修改后的初始化参数列表从 PySndfile 派生时出现的问题(感谢 Sam Perry 的建议)。

版本 0.2.10

  • setup.py:仅在使用 sdist 方法时重建 LONG_DESC。

版本 0.2.9

  • 将丢失的文件添加到分发中。

  • 强制分发当前的 cythonized 版本。

版本 0.2.4

  • 与 python 3 的兼容性(感谢 Eduardo Moguillansky)

  • 错误修复:确保 read_frames 函数返回的向量拥有它们的数据。

作者

阿克塞尔·罗贝尔

学分

  • Erik de Castro Lopo:用于 libsndfile

  • David Cournapeau:关于我从 scikits.audiolab收集的一些想法。

  • Cython维护者在Cython 中编写接口定义的有效手段。

项目详情


下载文件

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

源分布

pysndfile-1.4.4.tar.gz (380.7 kB 查看哈希

已上传 source