Psychopy音频的使用

news2025/6/12 19:54:13

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.coloradmin.cn/o/2407620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…