Arduino如何一次性接收多个OSC值?Max MSP发送场景求助
解决Max MSP多值接收的问题
我之前在Max MSP里处理多值传输时也踩过类似的坑,给你几个实用的解决方法,应该能搞定你现在的问题:
方法1:用pack+unpack打包传输
这是最基础也最可靠的多值同步方式,把多个值打包成一个列表发送,接收端再拆分出来,避免单个值传输导致的错位:
- 发送端:把你的
pixelNum和pixelState输出连到pack int int对象(如果是浮点值就换成pack float float),再把pack的输出连到你的发送模块(比如send、udpsend等) - 接收端:把接收模块的输出连到
unpack int int,unpack的两个输出口会分别输出对应的pixelNum和pixelState,这时候再处理就不会出现错位了
方法2:用OSC规范传输(如果是网络/跨程序传输)
如果是通过OSC发送数据,一定要用标准的OSC消息格式打包参数:
- 发送端:用
oscformat /pixelData ii对象,把pixelNum连到第一个输入口,pixelState连到第二个输入口(ii代表两个int类型参数,可根据值类型调整),再把oscformat的输出连到udpsend - 接收端:把
udpreceive的输出连到oscparse,oscparse会输出OSC地址和对应的参数列表,你可以用unpack拆分参数,或者用route /pixelData配合参数提取来获取正确的两个值
方法3:用同步对象确保值配对
如果不想打包,也可以用collect或trigger来同步两个值,等两个值都到齐后再一起输出:
- 比如用
collect 2对象,把pixelNum和pixelState都连到collect的输入口,当它收到两个值后,会一次性输出完整的列表,之后拆分处理就没问题了 - 或者用
trigger bang bang配合gate,先触发第一个值的接收,等第二个值到了再一起释放处理
为什么你现在会出现这种输出?
从你给出的输出> pixelNum: 10 pixelState: 0 pixelNum: 1 pixelState: 0来看,应该是发送端把pixelNum和pixelState分开单独发送了,接收端每次收到一个值就触发一次输出,导致把前一组的pixelState和后一组的pixelNum错误配对,同步或打包就能解决这个问题。
内容的提问来源于stack exchange,提问作者SNos
相关产品推荐
相关产品推荐

