|
4 | 4 | Jack Armitage |
5 | 5 | Intelligent Instruments Lab 2022 |
6 | 6 | """ |
7 | | -# TODO: convert to iipyper |
8 | 7 |
|
9 | | -# import asyncio |
10 | | -# import fire |
11 | 8 | from notepredictor import NotePredictor |
12 | | -# from osc import OSC |
13 | 9 |
|
14 | 10 | from iipyper import OSC, run |
15 | 11 |
|
16 | | -# def predictor_handler(address, *args): |
17 | | -# """ |
18 | | -# Handle OSC messages to Predictor |
19 | | -# """ |
20 | | -# address = address.split("/") |
21 | | - |
22 | | -# if(address[2] == "load"): |
23 | | -# print(f"/load {args}") |
24 | | -# global predictor |
25 | | -# predictor = NotePredictor.from_checkpoint(*args) |
26 | | -# predictor.eval() |
27 | | - |
28 | | -# elif(address[2] == "predict"): |
29 | | -# print(f"/predict {args}") |
30 | | -# r = predictor.predict(*args) |
31 | | -# msg = (r['pitch'], r['time']) |
32 | | -# # print(msg) |
33 | | -# osc.send_message('/prediction', msg) |
34 | | - |
35 | | -# elif(address[2] == "reset"): |
36 | | -# print(f"/reset {args}") |
37 | | -# predictor.reset(*args) |
38 | | - |
39 | | -# else: |
40 | | -# print(f"PitchPredictor: Unrecognised OSC {address} with {args}") |
41 | | - |
42 | | -# async def loop(): |
43 | | -# """ |
44 | | -# Separate async loop. |
45 | | -# """ |
46 | | -# i = 0 |
47 | | -# while True: |
48 | | -# i += 1 |
49 | | -# # osc.send_message("/hello", i) |
50 | | -# await asyncio.sleep(1) |
51 | | - |
52 | | -# async def init_main(): |
53 | | -# await osc.create_server(asyncio.get_event_loop()) |
54 | | -# osc.add_handler("/predictor/*", predictor_handler) |
55 | | -# osc.create_client() |
56 | | - |
57 | | -# await loop() |
58 | | - |
59 | | -# osc.close_server() |
60 | | - |
61 | | -# def main(ip="127.0.0.1", send=57120, receive=9999, checkpoint=None): |
62 | 12 | def main(host="127.0.0.1", port=9999, checkpoint=None): |
63 | | - # global osc, predictor |
64 | | - |
65 | | - # osc = OSC(ip, send, receive) |
66 | 13 | osc = OSC(host, port) |
67 | 14 |
|
68 | | - predictor = None |
| 15 | + global predictor |
69 | 16 | if checkpoint is not None: |
70 | 17 | predictor = NotePredictor.from_checkpoint(checkpoint) |
71 | 18 | predictor.eval() |
72 | | - |
73 | | - # asyncio.run(init_main()) |
74 | | - |
75 | | - @osc.args('/predictor/*') |
76 | | - def predictor_handler(address, *args): |
| 19 | + else: |
| 20 | + predictor = None |
| 21 | + |
| 22 | + @osc.kwargs('/predictor/*') |
| 23 | + def _(address, **kw): |
77 | 24 | """ |
78 | 25 | Handle OSC messages to Predictor |
79 | 26 | """ |
| 27 | + global predictor |
| 28 | + print(f"{address} {kw}") |
| 29 | + |
80 | 30 | address = address.split("/") |
81 | 31 | cmd = address[2] |
82 | 32 |
|
83 | 33 | if cmd=="load": |
84 | | - print(f"/load {args}") |
85 | | - # global predictor |
86 | | - predictor = NotePredictor.from_checkpoint(*args) |
| 34 | + predictor = NotePredictor.from_checkpoint(**kw) |
87 | 35 | predictor.eval() |
88 | 36 |
|
89 | 37 | elif cmd=="predict": |
90 | | - print(f"/predict {args}") |
91 | | - r = predictor.predict(*args) |
92 | | - return '/prediction', r['pitch'], r['time'] |
| 38 | + if predictor is None: |
| 39 | + print('no model loaded') |
| 40 | + else: |
| 41 | + r = predictor.predict(**kw) |
| 42 | + return '/prediction', r['pitch'], r['time'] |
93 | 43 |
|
94 | 44 | elif cmd=="reset": |
95 | | - print(f"/reset {args}") |
96 | | - predictor.reset(*args) |
| 45 | + if predictor is None: |
| 46 | + print('no model loaded') |
| 47 | + else: |
| 48 | + predictor.reset(**kw) |
97 | 49 |
|
98 | 50 | else: |
99 | | - print(f"PitchPredictor: Unrecognised OSC {address} with {args}") |
| 51 | + print(f"PitchPredictor: Unrecognised OSC {address} with {kw}") |
100 | 52 |
|
101 | 53 | if __name__=='__main__': |
102 | | - # fire.Fire(main) |
103 | 54 | run(main) |
0 commit comments