Ich bräuchte mall etwas Rat zu OSC Open-Sound-Controll

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Liebe Mitprogrammierer,
Ich würde gerne verschiedene Anwendungen ( Music Grafik: Iannix, Suppercollider, Processing, Blender )
über OSC verbinden.
Was ich schon habe ist alles nur nicht Blender.
Blender benutzt ja als Script Sprache Python.
Was ich also suche ist so ne Art OSC Bridge für Python
die ich auch leicht in Blender übernehmen kann.

Hab auch schon 6 Stunde im Netz gesucht.
Hab aber nicht das richtige gefunden.
Somit wäre es nett mir einen Schuhlöffel zu geben,
also so ne Art Introduction to OSC in Python for dummies.
Kann da bitte jemand von euch helfen.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was heisst denn nicht das richtige? Wenn ich "python osc" in google eingebe, kommt

https://pypi.org/project/python-osc/

dabei rum. Als erster Link. Was ist daran falsch?
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ja, die Seite hatte ich auch gefunden.
Ich hatte hier schon die Library: python-osc
geladen.
Aber dass dort angegebene Script für den Server gibt folgende Fehlermeldung zurück.:

Traceback (most recent call last):
File "client.py", line 25, in <module>
client.send_message("/filter", random.random())
File "/home/creco/.local/lib/python2.7/site-packages/pythonosc/udp_client.py", line 42, in send_message
msg = builder.build()
File "/home/creco/.local/lib/python2.7/site-packages/pythonosc/osc_message_builder.py", line 164, in build
return osc_message.OscMessage(dgram)
File "/home/creco/.local/lib/python2.7/site-packages/pythonosc/osc_message.py", line 22, in __init__
self._parse_datagram()
File "/home/creco/.local/lib/python2.7/site-packages/pythonosc/osc_message.py", line 78, in _parse_datagram
raise ParseError('Found incorrect datagram, ignoring it', pe)
pythonosc.osc_message.ParseError: ('Found incorrect datagram, ignoring it', ParseError('Could not parse datagram string index out of range',))

also mach ich irgend etwas falsch. Vielleicht bin ich blöde, und du wirst Lachen. Aber ich verstehe leider nicht was ich falsch mache ???
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Mungo1981: Die PyPI-Seite behauptet das Package sei für Python 3 (der Text 3.4+), laut Deinem Traceback verwendest Du aber Python 2.7.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und python3 ist auch das python in Blender. Solltest du also eh benutzen. Du musst das auch *in* Blender installieren. Ich hab das mal gemacht, aber huiiii... das ist ne Weile her.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ok, wie ich etwas in python2 installiere ist klar, aber wie soll ich die OSC-Library in Python3 installieren. Den pip istaliert bei mir nur scheinbar in Python2. Denn wenn ich dieser Anleitung folge soll ich eingeben:
$ pip install python-osc
das hab ich eigentlich auch schon gemacht.
Nur kommt in Python 3:
$ python3 client.py
Traceback (most recent call last):
File "client.py", line 10, in <module>
from pythonosc import osc_message_builder
ModuleNotFoundError: No module named 'pythonosc'
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ok, Ich nehmes es zurück. Hab gerade mein Hirn hochgefahren. Ich muss einfach pip3 installieren und $ pip3 install python-osc eingeben.
Jetzt läuft auch das Script.
Noch einmal Danke.

Nur die Daten werden scheinbar nicht von Iannix ausgehend, in Python nicht erkannt.
Was muss ich ändern hier mein geändertes Script:

Code: Alles auswählen

"""Small example OSC server

This program listens to several addresses, and prints some information about
received packets.
"""
import argparse
import math

from pythonosc import dispatcher
from pythonosc import osc_server

def print_volume_handler(unused_addr, args, volume):
  print("[{0}] ~ {1}".format(args[0], volume))

def print_compute_handler(unused_addr, args, volume):
  try:
    print("[{0}] ~ {1}".format(args[0], args[1](volume)))
  except ValueError: pass

if __name__ == "__main__":
  parser = argparse.ArgumentParser()
  parser.add_argument("--ip",
      default="127.0.0.1", help="The ip to listen on")
  parser.add_argument("--port",
      type=int, default=57120, help="The port to listen on")
  args = parser.parse_args()

  dispatcher = dispatcher.Dispatcher()
  dispatcher.map("/cursor", print)
  dispatcher.map("/volume", print_volume_handler, "Volume")
  dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)

  server = osc_server.ThreadingOSCUDPServer(
      (args.ip, args.port), dispatcher)
  print("Serving on {}".format(server.server_address))
  server.serve_forever()
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich benutze

https://github.com/hypebeast/OSCShark

um zu schauen, ob OSC Nachrichten verschickt werden. In dem Skript oben muessen natuerlich das Netzwerkinterface, der Port und die Pfade stimmen - wie das auzusehen hat weiss ich nicht, das ist ja dein Setup.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nachtrag: wenn du OSC benutzt, sollte dir klar sein, dass die Adresse/Pfad passen muss. Wie sieht die denn fuer deine lannix-Nachrichten aus?
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Also die Settings für Iannix ausgehende OSC-Messages sind Adr:127.0.0.1 Port: 57120. Tag: /cursor.
Würde gerne den Shark ausprobieren versuche es auch, aber mit Git kenne ich mich nicht so gut aus.
Hab es versucht qt4 fehlt aber auf meiner Maschine, versuche es zu installieren.
Hab qt4 installiert.
Kann qmake nicht zum laufen bringen: Kein qmake scheint vorhanden zu sein.
Zuletzt geändert von Mungo1981 am Mittwoch 12. Dezember 2018, 16:58, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst das ja auch als ZIP runterladen. Danach mit Qt5 development tools installiert (sollte es in deiner Paketverwaltung geben)

qmake OSCShark.pro && make

ausfuehren, dann sollte da irgendwo ein OSCShark-exectuable rumliegen.

Alternativ kannst du natuerlich auch einfach wireshark selbst benutzen, und dir da anschauen, welchen UDP-Traffic es zB auf deinem System gibt.

Letztlich kann dir da keiner helfen bei der Frage nach /cursor etc - wir haben lannix ja nicht am laufen. Das musst du schon selbst rausfummeln.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Vielleicht können wir uns den Käse auch sparen. Denn in Processing und Supercollider, hab ich guten Empfang mit diesen Seetings.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich weiss jetzt nicht genau welchen Kaese du dir sparen willst, aber mach ruhig 🤷‍♂️
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ich wollt nur sagen. Iannix sendet brav unter diesen Einstellungen. In Processing und Supercollider kann ich unter diesen Einstellungen sehr gut Empfangen. Nur Python3 will jetzt nicht so recht auf Empfang gehen.
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann - debugger angeschmissen und geschaut, wo das problem anfaengt. Erreichen die datagramme schon den server nicht? Oder werden sie spaeter nicht weitergeleitet?

Und du solltest ggf. auch mal alle anderen Senken fuer deine OSC messages (supercollider etc) deaktivieren, damit du nur eine hast. Nicht, dass es da einfach ein Problem mit nicht-reuse-address-sockets oder so gibt.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Ok, ich glaub ich hab das Ei des Columbus gefunden.
Ich habe einfach etwas mit dem Quellcode herum gespielt. Und jetzt funktioniert auch meine Verbindung.
Ich weis zwar noch nicht genau wo das Problem lag, aber immerhin läuft es jetzt.
Vielleicht habe ich noch etwas Probleme mit den Variablen, ansonsten klappt es aber.
Eine Tat die doch eigentlich einen besonderen Tropfen Wert ist.
Bei mir aber kein Asbachuralt sondern etwas Limo.

Ein hoch erfreuter

Thomas Lahme
aka Mungo1981
CreCo
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Hallo,
Hab etwas mit dem Quellcode herum gespielt.
Jetzt läuft alles prima.
Noch einmal Danke für die Tips

Thomas Lahme
aka Mungo1981
CreCo
Antworten