使用Pyo在Python中播放声音

时间:2016-11-23 21:35:43

标签: python audio portaudio pyo

我正在尝试使用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:“主机错误”

     

输出(['Microsoft Sound Mapper - 输出','扬声器/耳机   (Realtek','Primary Sound Driver','扬声器/耳机(Realtek   高清音频)','Realtek ASIO','扬声器/耳机   (Realtek高清晰度音频)'],[0,1,2,3,4,5])

     

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

     

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

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

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

我在PsychoPy中运行了上述代码。当我在Spyder中运行相同的代码时,它实际上永远不会被传递:

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

它只是无所事事。

任何想法为什么pyo不应该像python一样玩?关于我如何解决它的任何想法?

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

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

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

...

sound.Sound(value = soundfile)

在使用Windows 7 Pro时,我发现Pyo是一场噩梦。希望这个与PyGame一起使用会很有用。

答案 1 :(得分:0)

在执行任何其他操作之前,您必须boot() Server,所以您的行应该是:

import pyo

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

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

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

并运行gui界面:

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