使用 Pyo 在 Python 中播放声音

Posted

技术标签:

【中文标题】使用 Pyo 在 Python 中播放声音【英文标题】:Playing sound in Python using Pyo 【发布时间】:2016-11-23 21:35:42 【问题描述】:

我正在尝试使用 pyo 库播放声音。

以下代码:

from psychopy import sound, logging, core
logging.console.setLevel(logging.DEBUG)
from pyo import *

s = Server()
s.setInputDevice(4)
s.setOutputDevice(4)
s.boot()
s.start()

print "output", pa_get_output_devices()
print "input", pa_get_input_devices()

play_audio1 = sound.SoundPyo(value = 'LRsound.wav', stereo = True)
play_audio1.play()
core.wait(1) # wait so the sound can play  

返回这个输出:

pyo 0.8.0 版(使用单精度)

Portmidi 警告:无法打开 midi 输出 0 (Microsoft MIDI Mapper):PortMidi: `Host error'

输出(['Microsoft Sound Mapper - 输出','扬声器/耳机 (Realtek '、'Primary Sound Driver'、'Speakers / Headphones (Realtek High Definition Audio)”、“Realtek ASIO”、“扬声器/耳机” (Realtek 高保真音频)'], [0, 1, 2, 3, 4, 5])

输入(['Realtek ASIO'],[4])

服务器未启动。 服务器必须启动! Pa_OpenStream 中的 portaudio 错误:I/O 设备的非法组合 Portaudio 错误:I/O 设备的非法组合 Pa_AbortStream 中的portaudio 错误:流指针无效 Pa_CloseStream 中的 portaudio 错误:流指针无效

从代码和输出中可以看出,我试图确保输入和输出设备相同。

这是由于有关 I/O 设备非法组合的消息。当然,你也可以看到我的尝试失败了。无论有无 Server() 代码块,都会出现相同的错误消息。

我在 PsychoPy 中运行了上述代码。当我在 Spyder 中运行相同的代码时,它实际上从未通过:

play_audio1 = sound.SoundPyo(value = 'LRsound.wav', stereo = True)

它只是挂起什么都不做。

知道为什么 pyo 没有按应有的方式玩 python 吗?关于如何修复它的任何想法?

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

你必须先boot()Server,然后再做其他事情,所以你的台词应该是:

import pyo

s = pyo.Server()
s.boot()
s.start()
s.setInputDevice(4)
s.setOutputDevice(4)

然后您可以使用pyo 中的SfPlayer 类来播放声音文件:

play_audio1 = pyo.SfPlayer(path="LRsound.wav", speed=[1, 1])
play_audio1.out()

并运行 gui 界面:

s.gui(locals(), exit=False)

【讨论】:

我曾尝试过该解决方案,但没有奏效。我最终使用 PyGame 来满足我的音频需求。不过感谢您的建议。【参考方案2】:

我最终放弃了 pyo 库并成功地使用 PyGame 在 PsychoPy 中播放声音,方法是在从 Psychopy 导入 sound 之前执行以下操作:

from psychopy import prefs
prefs.general['audioLib'] = ['pygame']

...

sound.Sound(value = soundfile)

我发现 Pyo 在使用 Windows 7 Pro 时简直就是一场噩梦。希望 PyGame 的这项工作会有所帮助。

【讨论】:

以上是关于使用 Pyo 在 Python 中播放声音的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中播放声音文件的跨平台方式是啥?

从存储在 Python 变量中的数据中播放声音

如何在 Debian Python 中播放声音文件?

在没有外部模块的情况下在 Python 中播放声音?

如何在 Python 中播放声音?

用 Python 播放声音 [重复]