【发布时间】:2025-11-21 14:00:01
【问题描述】:
我想安排在任意时间播放多个音频片段。从 audiomath 文档中,我认为我应该使用 PyschPortAudio 来获得最可预测的延迟。同样从文档中,我了解到我可以schedule 播放单个声音。我很好奇是否可以在准确的时间提前安排多个短段(模延迟)?另外:理想情况下,此时间表可以在播放期间更改。
【问题讨论】:
标签: audiomath
我想安排在任意时间播放多个音频片段。从 audiomath 文档中,我认为我应该使用 PyschPortAudio 来获得最可预测的延迟。同样从文档中,我了解到我可以schedule 播放单个声音。我很好奇是否可以在准确的时间提前安排多个短段(模延迟)?另外:理想情况下,此时间表可以在播放期间更改。
【问题讨论】:
标签: audiomath
是的,多个独立 PsychPortAudio 播放器的协调预调度是可能的。作为一个最小的例子,以下似乎适用于我在 Mac 上:
import audiomath as am
am.BackEnd.Load('PsychToolboxInterface')
p1 = am.Player(am.TestSound('12'))
p2 = am.Player(am.TestSound('34'))
t0 = am.Seconds()
p1.Play(when=t0 + 2.0)
p2.Play(when=t0 + 2.2) # overlaps p1, but offset by 200ms
这将不允许p1 和p2 被无缝地完全地计时——每个预定的开始时间仍然会被大约几百微秒的东西抖动。这在刺激呈现时非常好,但可能(取决于声音内容)仍然足以在声音之间创建可听的过渡伪影。这取决于你想要达到什么样的效果——最好的办法是尝试一下,看看它是否满足你的需求。根据您希望事物的声音和行为方式,可能有比 PsychPortAudio 预调度更好的策略(例如:不加载 PsychPortAudio 后端,而是在循环中播放声音然后打开 -在Player 到达它们之前即时更改Sound 数据的部分。)
【讨论】:
Stream() 实例的建议,则可以使垃圾收集问题变得更加顺畅。