声音
播放声音最常见的方式是使用 sampler 项目来播放音频文件,或者使用 synth 项目来播放简单的蜂鸣声等。
sampler
sampler 播放单个声音文件,通常来自文件池。
声音文件始终以 OpenSesame sampler 后端所使用的采样率播放。如果你的采样听起来像是被加速了(高音调)或减速了(低音调),你可以在声音编辑器中调整声音文件的采样率,或者更改 OpenSesame sampler 后端使用的采样率(在“常规”选项卡中的“显示后端设置和信息”下)。
sampler 有几个选项:
- 声音文件 表示要播放的文件。
- 音量 介于 0(静音)和 1(正常音量)之间。
- 声像 会降低右声道(负值)或左声道(正值)的音量。要进行完全偏向,请输入“left”或“right”。
- 音高 表示播放速度,其中 1 对应原始速度。
- 在……后停止 表示声音文件应播放多长时间。例如,值为 100 ms 表示无论声音文件有多长,播放都会在 100 ms 后停止。值为 0 ms 表示声音文件将完整播放。
- 淡入 表示声音文件的淡入时间。例如,值为 100 ms 表示声音文件将从静音开始,并在 100 ms 内逐渐增大到最大值。
- 持续时间 表示 sampler 项目在呈现下一个项目之前的持续时间。这不需要与声音文件的长度匹配。例如,如果 sampler 的持续时间设置为 0 ms,OpenSesame 将直接前进到紧随 sampler 之后的项目(例如,一个 sketchpad),同时声音文件继续在后台播放。除了数值之外,你还可以将持续时间设置为:
- “keypress” 以等待按键
- “mouseclick” 以等待鼠标点击
- “sound” 以等待 sampler 播放完成。
synth
synth 是一个基础的声音合成器。
你可以指定若干选项:
- 波形 可以设置为正弦波、锯齿波、方波或白噪声
- 起音 是声音达到最大音量所需的时间(即淡入)。
- 衰减 是声音消失所需的时间(即淡出)。请注意,衰减发生在声音长度之内。
- 音量 介于 0 和 100% 之间
- 声像 会降低右声道(负值)或左声道(正值)的音量。将声像设置为 -20 或 20 会分别完全静音右声道或左声道。
- 长度 表示声音的长度(以毫秒为单位)。
- 持续时间 表示 synth 项目在呈现下一个项目之前的持续时间。这不需要与声音的长度匹配。例如,可以将 synth 的持续时间设置为 0 ms,以便直接前进到下一个项目(例如,一个 sketchpad),同时声音继续在后台播放。除了数值之外,你还可以将持续时间设置为 “keypress” 以等待键盘按下,“mouseclick” 以等待鼠标点击,或 “sound” 以等待 synth 播放完成。
sampler 和 synth 中的声音时序
在 OpenSesame 中播放声音涉及两个彼此独立的控制:一个决定声音本身播放多长时间,另一个决定实验在当前项目停留多长时间后再继续。理解这两个控制之间的区别,对于精确的刺激时序至关重要。
两个独立的控制
声音长度
| 项目 | 参数 | 说明 |
|---|---|---|
| Sampler | Stop after | 在给定的毫秒数后截短音频文件。设置为 0 以让文件自然播放到结束。 |
| Synth | Length | 直接设置生成音调持续多长时间(以毫秒为单位)。除了指定的值之外,没有自然结束点。 |
项目时序
sampler 和 synth 共享 Duration 参数,该参数控制实验在移动到下一个项目之前在当前项目上停留多长时间。它不会直接影响声音本身。
| Duration 值 | 行为 |
|---|---|
0 |
立即继续 |
| 数字 (ms) | 等待给定的毫秒数,然后继续 |
sound |
等待直到声音播放结束 |
一般规则
令 sound length 指:
- sampler 的 Stop after,或者如果 Stop after 为 0,则为文件的自然长度
- synth 的 Length
则适用以下规则:
| 条件 | 结果 |
|---|---|
| Duration < sound length | 该项目在声音结束前结束,因此声音会继续到下一个项目中 |
Duration = sound |
实验会等待直到声音结束 |
| Duration ≥ sound length | 该项目持续时间长于声音,因此在下一个项目开始前播放已经结束 |
说明
- 对于 sampler,实际播放时间是文件的自然长度,除非 Stop after 大于
0,在这种情况下播放会在指定时长后停止。 - 对于 synth,实际播放时间始终等于 Length。
- 当 Duration =
sound时,实验会等待实际播放时间;对于 sampler,这会将 Stop after 考虑在内。
声音继续到下一个项目中
如果 Duration 短于实际播放时间,那么当前项目结束后声音仍可继续播放。这有时是有意的,例如当你希望在显示下一个项目时让声音在后台继续播放。但如果 Duration 比预期更短,也可能会无意中发生,在这种情况下声音可能会延续到下一个试次元素中。
在 Python 中播放声音
你可以使用 sampler 对象和 synth 函数在 Python 中呈现视觉刺激:
- https://osdoc.cogsci.nl/4.1/zh/manual/python/sampler
- https://osdoc.cogsci.nl/4.1/zh/manual/python/common
Audio Low Latency 插件
由 Bob Rosbag 开发的 Audio Low Latency 插件的主要目标,是以最小且可预测的延迟来播放和录制音频,从而实现高准确性和高精度。使用 Linux ALSA 音频系统的 PyAlsaAudio 软件包在 Python 中提供了最好的结果。PortAudio 和 sounddevice 是跨平台的,在 Windows 和 Linux 上都可用。
这些插件默认未安装,但可以通过 pip 安装:
pip install opensesame-plugin-audio-low-latency
另见:
