python-oscで0がFalseになってしまう時の対処方法

概要

python-oscOscMessageBuilderを使ったOSCクライアントからメッセージ引数で0を送受信すると、Type TagがiではなくFすなわちFalseになってしまい、相手のアプリが正しく動かないなどの不具合が発生することがあります。
SimpleUDPClientsend_message()でも同様の問題が起きているようなので、以下の例が参考になれば幸いです。

実例

以下に実例を掲載します。

まず、0Falseになってしまう駄目な場合。

from pythonosc import osc_message_builder
from pythonosc import udp_client

if __name__ == "__main__":
    client = udp_client.UDPClient("127.0.0.1", 5005)

    msg = osc_message_builder.OscMessageBuilder(address="/my_address")
    msg.add_arg(0)
    msg = msg.build()

    client.send(msg)

これを意図通りに0intになるようにするには次のようにします。

from pythonosc import osc_message_builder
from pythonosc import udp_client

if __name__ == "__main__":
    client = udp_client.UDPClient("127.0.0.1", 5005)

    msg = osc_message_builder.OscMessageBuilder(address="/my_address")
    msg.add_arg(0, osc_message_builder.OscMessageBuilder.ARG_TYPE_INT)
    msg = msg.build()

    client.send(msg)

まとめ

このようにadd_argの第二引数にosc_message_builder.OscMessageBuilder.ARG_TYPE_INTを加えることで、0intとして送ることが出来るようになります。
ちなみに、osc_message_builder.OscMessageBuilder.ARG_TYPE_INTの代わりにosc_message_builder.OscMessageBuilder.ARG_TYPE_FLOATを指定すれば、0floatの値として送ることも出来ます。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.