Sonic Pi 不会从远程 Python 脚本播放声音

问题描述

我在 Windows PC 上使用 Sonic Pi 3.3.1,在树莓派 (Python) 上使用 python3.7.2 脚本(Raspbian Buster) 检测与 {{3} 的距离} .然后,如果物体离得更远,程序会创建一个音调更高的曲调,然后这个曲调通过OSC发送到 Sonic Pi。我的 Windows PC 上启用了外部 OSC。我还检查了 PortIP 地址,它们是正确的。

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

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

我的 sonic Pi 代码

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

输出

HC-SR04-Ultrasonic Sensor

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


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

live_loop :foo do
  play 60
  sleep 1
end

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


我的电路:

Sonic Pi Output

上的Vcc脚接树莓派上的5V电源,然后Trig脚接第4个{{1} } 电路板上的连接器,然后将回声引脚连接到第 17 个 GPIO 连接器,该连接器位于由 GPIO 电阻器和 330 ohm 电阻器组成的分压器之间,该电阻器可保护覆盆子免受完全{{ 1}}。

我的电路看起来像: HC-SR04-Ultrasonic Sensor

解决方法

解决方案


问题出在 Sonic Pi que path 中,它通过 python 连接从 UDP 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

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