You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.10.4下使用PyAudio生成正弦波脚本报错:SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats

解决Python 3.10中pyaudio的PY_SSIZE_T_CLEAN错误

这个错误是因为你使用的pyaudio版本和Python 3.10不兼容导致的——Python 3.10开始要求在使用某些C API格式前定义PY_SSIZE_T_CLEAN宏,而旧版pyaudio没有适配这个变更。下面给你两种可行的解决办法:

方法一:安装适配Python 3.10的pyaudio版本

最简单的方式是安装针对Python 3.10编译的预编译pyaudio包:

  • 如果是Windows系统,可以先安装pipwin(它会自动匹配系统和Python版本的预编译包):
    pip install pipwin
    pipwin install pyaudio
    
  • 如果是Linux/macOS,可以尝试从源码编译安装(需要先安装 portaudio 依赖):
    对于Ubuntu/Debian:
    sudo apt-get install portaudio19-dev python3-dev
    pip install --no-binary :all: pyaudio
    
    对于macOS(用Homebrew):
    brew install portaudio
    pip install --no-binary :all: pyaudio
    

方法二:改用sounddevice库替代pyaudio

sounddevice是一个更现代的音频处理库,对新版本Python的支持更好,用法也类似。你可以这样修改你的脚本:
首先安装sounddevice:

pip install sounddevice numpy

然后修改后的代码:

import sounddevice as sd
import numpy as np

volume = 0.5  # range [0.0, 1.0]
fs = 44100    # sampling rate, Hz
duration = 1.0# in seconds
f = 440.0     # sine frequency, Hz

# Generate sine wave samples
samples = (np.sin(2 * np.pi * np.arange(fs * duration) * f / fs)).astype(np.float32)

# Play the audio
sd.play(volume * samples, samplerate=fs)
sd.wait()  # Wait until playback is finished

两种方法都能解决你的问题,如果你不想更换库,优先选方法一;如果希望长期避免这类版本兼容问题,方法二更推荐。

内容的提问来源于stack exchange,提问作者jimbob97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:07:45