Sonic Pi 不会播放来自远程 Python 脚本的声音

Sonic Pi won't play sound from remote Python script

我正在使用 Sonic Pi 3.3.1 on my Windows PC and a Python script(Python3.7.2) on my raspberry pi(Raspbian Buster) that detects distance from an HC-SR04-Ultrasonic Sensor。然后程序会创建一个音调,如果物体距离较远,音调范围会更高,然后将此音调通过 OSC 发送到 Sonic Pi。我的 windows PC 上启用了外部 OSCPortIP 地址我也检查了,它们是正确的。

我已经对我的电路进行了广泛的测试,我可以自信地说这不是问题的根源,我只是出于文档目的将其添加到 post 的底部,供有兴趣的人使用,所以我会继续。

我的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 代码,因为它记录了正确的值并成功发送了音调,所以我将再次继续。

我的声波派代码:

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 确实播放了声音,所以我可以排除声音安装不正确的有缺陷的安装。


我的电路:

HC-SR04-Ultrasonic Sensor上的Vcc脚接raspberry pi上的5V电源,然后Trig脚接raspberry pi上的5V电源电路板上的第 4 个 GPIO 连接器,回声引脚然后连接到第 17 个 GPIO 连接器,分压器由 330 ohm 电阻和保护覆盆子的 470 ohm 电阻组成来自完整的 5V.

我的电路是这样的:

解决方案


问题出在 Sonic Pi que path,它通过 UDP connection.More 从 python scipt 接收注释,特别是在 sync 语句 que path。同步语句缺少发件人 Ip 地址和 Port 这在使用多台计算机时是必需的,这与在本地环境中不同

您可以像这样明确提及 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

我想在结束我的 post 之前感谢 Sam Aaron,他在 Raspberry pi Stack Exchange 社区上给了我关于这个问题的见解,使我能够回答这个问题