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

PyCharm中Psychopy调用sound.Sound.play()报错:'NoneType'无start属性

解决Psychopy PTB后端播放WAV音频时的AttributeError问题

问题根源

直接将numpy数组转为bytes传入sound.Sound,PTB后端无法正确解析该格式,导致内部的self.track对象初始化失败为None,调用play()时触发'NoneType' object has no attribute 'start'错误。

修复方案

方案1:直接通过文件路径初始化Sound(推荐)

Psychopy的Sound类支持直接传入音频文件路径,PTB后端会自动完成加载、解码和格式适配,无需手动处理音频数据:

from psychopy import prefs
prefs.hardware['audioLib'] = ['PTB']
from psychopy import sound

AMP = 0.1

audio_path = r'*PATH*/IRN_61.7354Hz.wav'
# 直接传入文件路径,通过volume参数设置音量
acoustic_stim = sound.Sound(audio_path, volume=AMP)
acoustic_stim.play(when=1)

方案2:正确传递手动处理后的音频数据

若必须手动读取并处理音频数据,需确保数据格式符合PTB后端要求,再传入Sound:

import numpy as np
from scipy.io.wavfile import read
from psychopy import prefs
prefs.hardware['audioLib'] = ['PTB']
from psychopy import sound

AMP = 0.1

audio_path = r'*PATH*/IRN_61.7354Hz.wav'
sr, data = read(audio_path)

# 将音频数据归一化到[-1,1]区间,转为PTB兼容的float32类型
data_norm = (data / np.max(np.abs(data)) * AMP).astype(np.float32)

# 传入处理后的数组、采样率,自动识别声道数
acoustic_stim = sound.Sound(value=data_norm, sampleRate=sr, stereo=(data.ndim == 2))
acoustic_stim.play(when=1)

额外注意事项

  • 确保PTB后端依赖完整:首次使用PTB时,Psychopy会提示安装PortAudio等依赖,需按提示完成安装。
  • 不要将音频数据转为bytes类型传入Sound,PTB后端仅接受numpy数组或文件路径。
  • 若需同步fMRI触发信号,可将when参数设置为实验时钟的精确时间点,保证时序准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:24:26