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:
对于macOS(用Homebrew):sudo apt-get install portaudio19-dev python3-dev pip install --no-binary :all: pyaudiobrew 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
相关产品推荐
相关产品推荐

