首页 > 解决方案 > Sonic Pi 不会从远程 Python 脚本播放声音

问题描述

Sonic Pi 3.3.1在我的 Windows PC 上使用,在我的树莓派()上使用一个Python脚本( ),它检测与超声波传感器的距离。然后,如果物体离得更远,程序会创建一个音高更高的曲调,然后这个曲调发送到 Sonic Pi。在我的 Windows PC 上启用了外部。我还检查了和地址,它们是正确的。Python3.7.2Raspbian BusterHC-SR04OSCOSCPortIP

我已经对我的电路进行了广泛的测试,我可以自信地说这不是问题的根源,并且我仅在我的帖子底部为任何感兴趣的人添加了它以用于文档目的,所以我会继续前进。

我的 Python 代码:

from gpiozero import DistanceSensor
from time import sleep

from pythonosc import osc_message_builder
from pythonosc import udp_client

sensor = DistanceSensor(echo=17, trigger=4)
sender = udp_client.SimpleUDPClient('10.0.0.119', 4560)

while True:
    pitch = round(sensor.distance * 100 + 30)
    print(pitch)
    sender.send_message('/play_this', pitch)
    sleep(0.1)

输出:

60
60
58
59

问题似乎不是我的python代码,因为它记录了正确的值并成功发送了音调,所以我将再次继续。

我的声波 Pi 代码:

live_loop :listen do
  use_real_time
  note = sync "/osc/play_this"
  play note[0]
end

输出:

索尼克派输出

Sonic Pi 正确记录了音符,但没有播放,因此数据正在接收但未播放,因此问题很可能是我尝试播放音符的方式,但我找不到正确的方法做这个


然后我尝试了这个,以测试是否sonic pi安装正确并能够播放声音

live_loop :foo do
  play 60
  sleep 1
end

Sonic Pi 确实播放了声音,因此我可以排除声音未正确安装的有缺陷的安装。


我的电路:

-超声波传感器上的Vcc引脚连接到树莓派上的电源,然后将引脚连接到板上的第 4 个连接器,然后将回波引脚连接到由电阻器和一个分压器组成的第 17 个连接器保护覆盆子免受完全损坏的电阻器。HC-SR045VTrigGPIOGPIO 330 ohm470 ohm5V

我的电路看起来像: 电路

标签: pythonpython-3.xraspberry-pi4sonic-pi

解决方案


解决方案


问题出在 Sonic Pi中,它通过连接从 sciptque path接收注释。更具体地说,它在. 同步语句缺少发件人地址,这在使用多台计算机时是必需的,这与在本地环境中不同pythonUDPsyncque pathIpPort

您可以Ip像这样明确提及地址:

live_loop :listen do
  use_real_time
  note = sync "/osc/10.0.0.80:56505/play_this "#Mention the senders Ip address and port
  play note[0]
end

或者你可以告诉它接受输入,不管发送者是这样的:

live_loop :listen do
  use_real_time
  note = sync "/osc*/play_this "#This accepts a message regardless of the sender
  play note[0]
end

我想通过感谢Sam Aaron来结束我的帖子,他在 Raspberry pi Stack Exchange 社区上让我深入了解了这个问题,这使我能够回答我的这个问题


推荐阅读