使用 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 中播放声音的主要内容,如果未能解决你的问题,请参考以下文章