问题描述
我在 Windows PC 上使用 Sonic Pi 3.3.1
,在树莓派 (Python
) 上使用 python3.7.2
脚本(Raspbian Buster
) 检测与 {{3} 的距离} .然后,如果物体离得更远,程序会创建一个音调更高的曲调,然后这个曲调通过OSC
发送到 Sonic Pi。我的 Windows PC 上启用了外部 OSC
。我还检查了 Port
和 IP
地址,它们是正确的。
我已经对我的电路进行了广泛的测试,我可以自信地说这不是问题的根源,并且我仅在帖子底部为感兴趣的任何人添加了它以用于文档目的,所以我将继续.
我的 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
输出:
Sonic Pi 正确记录了音符但没有播放它,因此正在接收数据但没有播放所以问题很可能是我尝试播放音符的方式,但我找不到正确的做法
然后我尝试了这个,以测试 sonic pi
是否安装正确并且能够播放声音:
live_loop :foo do
play 60
sleep 1
end
Sonic Pi 确实播放了声音,因此我可以排除声音安装不正确的缺陷安装。
我的电路:
上的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 社区上让我了解了这个问题,这使我能够回答我的这个问题