1
+ import tkinter as tk
2
+ from tkinter import ttk
3
+ from pythonosc import udp_client
4
+
5
+ class OSCSliderApp :
6
+ def __init__ (self , root , num_sliders ):
7
+ self .root = root
8
+ self .num_sliders = num_sliders
9
+ self .clients = [None ] * num_sliders
10
+
11
+ self .osc_addresses = [tk .StringVar (value = "127.0.0.1:8999" ) for _ in range (num_sliders )]
12
+ self .osc_paths = [tk .StringVar (value = f"/BFI/MLAction/Action{ i } " ) for i in range (num_sliders )]
13
+ self .sliders = []
14
+
15
+ self .setup_ui ()
16
+
17
+ def setup_ui (self ):
18
+ for i in range (self .num_sliders ):
19
+ frame = ttk .Frame (self .root )
20
+ frame .pack (pady = 10 , fill = tk .X )
21
+
22
+ # OSC Address input for each slider
23
+ ttk .Label (frame , text = f"OSC Address for Slider { i + 1 } (ip:port):" ).pack (side = tk .LEFT )
24
+ ttk .Entry (frame , textvariable = self .osc_addresses [i ]).pack (side = tk .LEFT )
25
+
26
+ # OSC Path input for each slider
27
+ ttk .Label (frame , text = f"OSC Path for Slider { i + 1 } :" ).pack (side = tk .LEFT )
28
+ ttk .Entry (frame , textvariable = self .osc_paths [i ]).pack (side = tk .LEFT )
29
+
30
+ # Slider
31
+ slider = tk .Scale (frame , from_ = 0 , to = 1 , resolution = 0.01 , orient = tk .HORIZONTAL , command = lambda val , idx = i : self .send_osc_message (idx , val ))
32
+ slider .pack (fill = tk .X , padx = 10 , pady = 5 )
33
+ self .sliders .append (slider )
34
+
35
+ def send_osc_message (self , slider_index , value ):
36
+ address = self .osc_addresses [slider_index ].get ()
37
+ path = self .osc_paths [slider_index ].get ()
38
+ if not address or not path :
39
+ print (f"OSC address or path for slider { slider_index + 1 } is not set." )
40
+ return
41
+
42
+ if self .clients [slider_index ] is None :
43
+ try :
44
+ ip , port = address .split (':' )
45
+ self .clients [slider_index ] = udp_client .SimpleUDPClient (ip , int (port ))
46
+ except ValueError :
47
+ print (f"Invalid OSC address format for slider { slider_index + 1 } . Expected format is ip:port." )
48
+ return
49
+
50
+ osc_path = path
51
+ self .clients [slider_index ].send_message (osc_path , float (value ))
52
+ print (f"Sent { value } to { osc_path } " )
53
+
54
+ if __name__ == "__main__" :
55
+ root = tk .Tk ()
56
+ root .title ("OSC Slider App" )
57
+ app = OSCSliderApp (root , num_sliders = 8 ) # Change the number of sliders as needed
58
+ root .mainloop ()
0 commit comments