它使用arduino mega作为微处理器,目前与我编写的用于串行通信的处理程序接口。从那里,OSC消息被发送到我的合作伙伴编写的Max / MSP程序以创建Midi数据流。
所以:
我的物理界面-> Arduino Mega->串行I / O->处理-> OSC-> Max / MSP-> Midi(->音乐应用程序)
我之所以选择此路径,部分原因是它不够聪明,无法删除任何步骤,而且还能够适应我们想要的方式来更新物理接口,能够使物理接口具有多种用途(推子,旋钮和语音选择按钮),并能够确保关键任务的定时和节奏修改(也称为“摇摆”)。
我的串行消息设置如下:
PL,1; // transport control: play
PL,0; // transport control: stop
SW,30; // swing value 30
TM,130; // tempo value 130
SD,1,8,04,0; // Step sequencer data, pattern 1, voice 8 (of 8), step 04 (of 16), off
MU,8,1; // Mute, voice 8 (of 8), on
SO,4,0; // Solo, voice 4 (of 8), off
VL,3,127; // Velocity, voice 3 (of 8), value 127
CC,1,127; // Midi CC, controller 1, value 127
NN,1,36; // Note number, voice 1 (of 8), value 36 (usually a kick drum)
因此,您可以看到基于每个分号的逗号数量,我可以确定如何在处理程序中解析来自arduino的串行数据。通过处理,这些类型的消息将转换为OSC,如下所示:
/beatseqr/play 1
/beatseqr/play 0
/beatseqr/swing 30
/beatseqr/tempo 130
/beatseqr/matrix/1/8/04 0
/beatseqr/mute/8 1
/beatseqr/solo/4 0
/beatseqr/velocity/3 127
/beatseqr/midicc/1 127
/beatseqr/midinn/1 36
一切正常,但感觉效率很低。我真的需要中间的处理应用程序吗?
现在,我试图将处理和OSC部分从等式中剔除,但是我缺少有关串行数据协议设计的一些知识。
我知道udpreceive
Max 中有一个对象。那行得通,我猜呢?也许我用错了。
有一次,我已经将所有的arduino代码切换为在每条串行消息的末尾不发送换行符,因为这并不意味着Max的udpreceive
对象有什么特别的地方。实际上,如果我没记错的话,它将只接受第一个换行符之前的第一个消息,然后它将停止处理数据。因此,为了解决这个问题,我取出所有换行符,然后将其连续喷入max / msp中。
然后,此方法的下一个问题是udpreceive
对象一次只能接受一个字符。因此,我试图使用js
javascript对象来连接传入的字符,然后将其解析为分号和逗号。我遇到的问题是它是不可预测的且不稳定的。字符将丢失,并且消息将不可处理。因此,这真的让我怀疑是否应该将串行数据协议更改为更强大的功能?或者,如果我只是完全做错了?
我是否应该全部清除并使用Firmata固件从头开始?我看过一些将Firmata与Max / MSP结合使用的教程,我想我可以重新审视包装盒上的代码在做什么以及是否需要这样做。固件可以接受引脚上的字符串数据以发送到板载串行LCD吗?如果我可以通过max / msp控制LCD,那可能行得通。
有什么建议吗?
OMGWTF
按钮,但也经过深思熟虑和详尽的问题!