跳转到主要内容

Python音频编码类 - 用于dsp和声音合成

项目描述

PyPI License

pya

分支 master develop
CI-Linux/MacOS Build Status Master Build Status Develop
CI-Windows Build status AppVeyor Build status AppVeyor
变更 GitHub commits GitHub commits
Binder Master Binder Develop Binder

什么是pya?

pya是一个用于支持使用Python创建和操作音频信号的软件包。它使用numpy数组来存储和计算音频信号。

它提供:

  • Asig - 一个通用的音频信号类
    • Ugen - Asig的子类,提供诸如正弦波、方波、锯齿波、噪声等单元发生器
  • Aserver - 用于排队和播放Asigs的音频服务器类
  • Arecorder - 音频录制类
  • Aspec - 音频频谱类,使用rfft,因为实值信号总是隐含的
  • Astft - 音频短时傅里叶变换(STFT)类
  • 一些辅助函数,例如device_info()

pya可以用作

  • 多通道音频处理
  • 听觉显示和声音合成
  • 声音合成实验
  • 一般音频应用,如游戏或GUI增强
  • 信号分析和绘图

目前,pya更适合离线渲染而不是实时。

作者和贡献者

  • 托马斯(作者,维护者)
  • 贾军(合著者,维护者)
  • 亚历山大(维护者)
  • 贡献者将被在此处认可,欢迎贡献。

安装

使用以下命令安装

pip install pya

但是,要播放和录制音频,您需要一个后端。

  • pip install pya[remote] 用于基于Web的Jupyter后端
  • pip install pya[pyaudio] 用于 portaudio 及其Python包装器 PyAudio

使用Conda

Pyaudio可以通过conda安装

conda install pyaudio

免责声明:Python 3.10+ 需要 PyAudio 0.2.12,截至2022年12月,Conda上不可用。 Conda-forge 目前只提供Linux版本。Python 3.10的用户目前应使用其他安装选项。

使用Homebrew和PIP(仅限MacOS)

brew install portaudio

然后

pip install pya

对于苹果ARM芯片,如果您安装PyAudio依赖项失败,可以按照以下指南操作: ARM芯片安装

  • 选项1:在您的家目录中创建.pydistutils.cfg,~/.pydistutils.cfg,添加

    echo "[build_ext]
    include_dirs=$(brew --prefix portaudio)/include/
    library_dirs=$(brew --prefix portaudio)/lib/" > ~/.pydistutils.cfg
    

    使用pip

    pip install pya
    

    安装后,您可以删除.pydistutils.cfg文件。

  • 选项2:使用CFLAGS

    CFLAGS="-I/opt/homebrew/include -L/opt/homebrew/lib" pip install pya
    

使用PIP(Linux)

尝试sudo apt-get install portaudio19-dev 或您发行版的等效命令,然后

pip install pya

使用PIP(Windows)

PyPI 为Windows提供包括portaudio在内的PyAudio wheels

pip install pyaudio

应该足够了。

简单示例

启动

import pya
s = pya.Aserver(bs=1024)
pya.Aserver.default = s  # to set as default server
s.boot()

创建一个Asig信号

采样率为44100 Hz的1秒/440 Hz正弦波,通道名为'left'

import numpy as np
signal_array = np.sin(2 * np.pi * 440 * np.linspace(0, 1, 44100))
atone = pya.Asig(signal_array, sr=44100, label='1s sine tone', cn=['left'])

创建Asig对象的其它方式

asig_int = pya.Asig(44100, sr=44100)  # zero array with 44100 samples
asig_float = pya.Asig(2., sr=44100)  # float argument, 2 seconds of zero array
asig_str = pya.Asig('./song.wav')  # load audio file
asig_ugen = pya.Ugen().square(freq=440, sr=44100, dur=2., amp=0.5)  # using Ugen class to create common waveforms

也可以使用文件路径来创建音频文件。 WAV 应该没有问题。 MP3 支持但可能会因为 FFmpeg 而引发错误。

如果您使用Anaconda,安装相当简单

conda install -c conda-forge ffmpeg

否则

关键属性

  • atone.sig --> 包含信号的numpy数组
  • atone.sr --> 采样率
  • atone.cn --> 自定义定义的通道名称列表
  • atone.label --> 自定义集合标识符字符串

播放信号

atone.play(server=s)  

如果未指定服务器,则play()使用Aserver.default

您也可以使用Aserver作为上下文,而不是指定一个长期存在的服务器。

with pya.Aserver(sr=48000, bs=256, channels=2) as aserver:
    atone.play(server=aserver)  # Or do: aserver.play(atone)

这项技术的优点是它将为您处理服务器的启动和关闭。但请注意,服务器的开关引入了额外的延迟。

在特定设备上播放信号

from pya import find_device
from pya import Aserver
devices = find_device() # This will return a dictionary of all devices, with their index, name, channels.
s = Aserver(sr=48000, bs=256, device=devices['name_of_your_device']['index'])

绘制信号

绘制前1000个样本

atone[:1000].plot()

绘制幅度和相位频谱

atone.plot_spectrum()

通过Aspec类绘制频谱

atone.to_spec().plot()

通过Astft类绘制频谱图

atone.to_stft().plot(ampdb)

子集选择

  • Asigs支持多通道音频(作为信号数组的列)
    • a1[:100, :3]将选择前100个样本和前3个通道
    • a1[{1.2:2}, ['left']]将使用从1开始的时间片选择名为'left'的通道

从设备录制

Arecorder允许从输入设备录制

import time

from pya import find_device
from pya import Arecorder
devices = find_device()  # Find the index of the input device
arecorder = Arecorder(device=some_index, sr=48000, bs=512)  # Or not set device to let pya find the default device 
arecorder.boot()
arecorder.record()
time.sleep(2)  # Recording is non-blocking
arecorder.stop()
last_recording = arecorder.recordings[-1]  # Each time a recorder stop, a new recording is appended to recordings

方法链式调用

Asig方法通常返回一个Asig,因此方法可以链式调用,例如

atone[{0:1.5}].fade_in(0.1).fade_out(0.8).gain(db=-6).plot(lw=0.1).play(rate=0.4, onset=1)

学习更多

  • 请查阅examples/pya-examples.ipynb以获取更多示例和详细信息。

贡献

  • 如果您想贡献,请与我们联系。我们很高兴参与新功能的讨论并接收pull请求。

项目详情


下载文件

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

源分发

pya-0.5.2.tar.gz (1.6 MB 查看哈希)

上传时间:

构建分发

pya-0.5.2-py3-none-any.whl (57.6 kB 查看哈希)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面