pyOSCでint64が受け取れなくてはまったメモ

  • 2
    Like
  • 0
    Comment

状況

UnityOSCからクライアント(pyOSC)にUnixTimeのTickをlong型で送ろうとしたら受け取れなかった

エラーメッセージ

OSCServer: KeyError on request from localhost:49206: 'h'

環境

  • Mac OSX 10.10.5
  • Unity Pro 5.3.2f1
  • UnityOSC v1.2
  • python 2.7
  • pyOSC 0.3.5b5294

原因

pyOSCがint64の受け取りに対応してない

対応

受信メッセージに対するtypeTagの判別はdef decodeOSC(data):内で行っているが
def _readLong(data):の定義はあるのにtypeTagがhの場合に呼ばれてないので
typeTagがhの場合に_readLong()を呼ぶよう修正

具体的には

table = {"i":_readInt, "f":_readFloat, "s":_readString, "b":_readBlob, "d":_readDouble, "t":_readTimeTag}

table = {"i":_readInt, "h":_readLong, "f":_readFloat, "s":_readString, "b":_readBlob, "d":_readDouble, "t":_readTimeTag}

に修正した

その他

  • OSC仕様(和訳)
    これによると64bit整数は認識しなくても良いものみたいなので今回の問題は単純にpyOSCのバグとは言えなそう
  • とりあえずプルリク送った
  • 今回のように時刻を送りたいなら時刻タグ(typetag:t)を使ったほうが正解かも?
  • typeTag:hって何の頭文字?