当前位置: 首页 > wzjs >正文

厦门哪里有教网站建设开福区网站建设论坛

厦门哪里有教网站建设,开福区网站建设论坛,我们的爱情网站制作,专业做网站建设公Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…

Psychopy音频的使用

本文主要解决以下问题:

  1. 指定音频引擎与设备;
  2. 播放音频文件

本文所使用的环境:

Python3.10

numpy==2.2.6
psychopy==2025.1.1
psychtoolbox==3.0.19.14

一、音频配置

Psychopy文档链接为Sound - for audio playback — PsychoPy v2025.1.1。

1. 指定音频引擎

Psychopy支持多种音频引擎,包括:

  • SoundPTB

  • SoundDevice

  • SoundPyo

  • SoundPygame

但由于种种原因,现在仅对ptb支持较好。因此建议使用ptb作为音频引擎。

配置方式如下:

from psychopy import prefs
prefs.hardware["audioLib"] = ["ptb"]  # 强制使用 ptb 后端

当然,默认的引擎就是ptb,上面的代码也可以忽略不写。

需要指出的是,对于音频的配置,最好在导入sound组件前进行

原因:因为一旦导入sound模块,并创建了sound对象,后端和设备可能就已经确定了。如果在导入sound模块之后更改prefs,可能不会影响已经创建的音频流。

特别地,sound.init()方法或许可以解决这个问题

2. 指定音频设备

2.1 获取所有音频设备

指定音频设备的前提是我们知道哪些音频设备可以使用,下面的程序实现了这个效果:

import psychtoolbox.audio
devices = psychtoolbox.audio.get_devices()
for dev in devices:print(dev)

运行结果如下图所示:

每一个都是一个字典,结构如下所示:

 {'DefaultSampleRate': 48000.0,'DeviceIndex': 5.0,'DeviceName': 'DELL S3423DWC (NVIDIA High Definition Audio)','HighInputLatency': 0.0,'HighOutputLatency': 0.01,'HostAudioAPIId': 13.0,'HostAudioAPIName': 'Windows WASAPI','LowInputLatency': 0.0,'LowOutputLatency': 0.003,'NrInputChannels': 0.0,'NrOutputChannels': 2.0},

 我这里准备使用的音频设备就是DELL S3423DWC (NVIDIA High Definition Audio),即DeviceName的值。

2.2 指定音频设备

如下所示,与指定音频引擎相类似:

prefs.hardware["audioDevice"] = 'DELL S3423DWC (NVIDIA High Definition Audio)'

注意导入prefs。

2.3 总结

推荐把上述内容写成函数:

def init_audio(device_name: str):prefs.hardware["audioLib"] = ["ptb"]devices = psychtoolbox.audio.get_devices()exists = any(dev['DeviceName'] == device_name for dev in devices)if not exists:raise ValueError(f"音频设备 {device_name} 不存在")prefs.hardware["audioDevice"] = device_name  # 设置音频设备

二、播放音频文件

1. 读取音频文件

下面代码用于读取音频文件:

import os
from psychopy import sound
wav_path = os.path.join(base_path, "sound_click_1000Hz.wav")
tone = sound.Sound(wav_path, stereo=True, hamming=False)

需要注意的是,psychopy对部分主流音频文件格式没有支持,例如mp3等都无法使用。推荐的音频文件格式是.wav

对部分属性说明如下:

  • volume:音量,浮点数取值0~1.0,默认为1.0。
  • stereo:是否使用立体声播放,True表示自动开启立体声,False表示单声道,默认值为True。
  • loops:循环播放次数,0表示只播放1次,-1表示一直循环,默认值为0。
  • hamming:用于控制是否对声音应用汉明窗,默认为True。

这里对汉明窗做特别说明:加窗是信号分析与处理中的常见操作,这里不再赘述,只简单概述结论。

汉明窗对信号有平滑的作用,对于需要精确控制声音波形的场景已预处理的声音或其他特殊情况,可以选择关闭汉明窗,否则最好默认开启。

文档中对这一部分的解释是

boolean (default True) to indicate if the sound should be apodized (i.e., the onset and offset smoothly ramped up from down to zero).

其中apodized表示变迹。

此外还有一点需要说明:

The function apodize uses a Hanning window, but arguments named ‘hamming’ are preserved so that existing code is not broken by the change from Hamming to Hanning internally. Not applied to sounds from files. 

可见使用的其实是汉宁窗,而不是汉明。 

2. 播放音频

音频的播放非常简单,如下所示:

tone.play()

3. 音频播放状态

这个Sound有两个属性,可以反应音频是否在播放中或已经播放完毕

  • isPlaying
  • isFinished

下面的代码就起到了等待音频播放完毕的效果:

# 等待音频播放完毕
while tone.isFinished == False:pass

4. 获取音频时长

有时候我们希望音频播放完毕后等待一段时间,这里提供了一种写法:

duration = tone.getDuration()
tone.play()
core.wait(1.5*duration)

播放后等待1.5个duration,也即播放后等待0.5个duration。

http://www.dtcms.com/wzjs/548649.html

相关文章:

  • 相亲网站做推广的照片是谁陕西交通建设集团西镇分公司网站
  • 没有网站可以做cpc吗店铺logo图片免费生成软件
  • 绥化做网站做网站和微信公众号如何招生
  • 网站改版提交 百度网站建设情况检查报告
  • 卫龙模仿iphone做网站上海服装网站建设
  • asp网站 没有数据库 管理员密码什么叫网站名称
  • 基于lamp网站建设实例个人网站建设平台
  • 汕头网页设计网站方案建站系统和构建系统
  • 纯前端网站怎么做rest建设银行河北招聘网站
  • 做网站的客户需求报告答案做环保网站案例
  • 建网站有什么要注意的怀化买房网站
  • seo网站诊断流程广西建设工程协会网站
  • 做水果网站特点分析河南县网站建设公司
  • WordPress部署商城优化网站制作公司好吗
  • 网站内容栏目北京网站建设有哪些公司
  • 做海淘的网站wordpress手机后台版
  • 赣州哪里可以做网站外贸推广平台哪个好
  • 帝国网站采集管理怎么做肇庆网站制作
  • 聚美优品一个专注于做特价的网站亚马逊欧洲站vat怎么申请
  • 郑州东区做网站电话加盟网站做推广怎么收费
  • 网页建站怎么设置企业官网和小程序的商城版本的区别
  • 网站建设需要注意些什么dedecms能做什么网站
  • 网站制作的英文多语言站点 wordpress
  • 旅游网站开发的背景及意义60天做网站
  • 网站主机地址织梦怎么做网站地图
  • 大连网站建设功能服务器上如何建设多个网站
  • 虚拟机上做网站在电商网站上做推广的技巧
  • 学做吃的网站无极网站站怎么有的下不了
  • 做国际贸易需要网站吗做外贸要做什么网站
  • 网站集约化建设流程交换友情链接前后必须要注意的几点