obsws 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/obsws/req.rb ADDED
@@ -0,0 +1,888 @@
1
+ require "waitutil"
2
+
3
+ require_relative "base"
4
+ require_relative "error"
5
+ require_relative "util"
6
+ require_relative "mixin"
7
+
8
+ module OBSWS
9
+ module Requests
10
+ class Client
11
+ include Error
12
+ include Mixin::TearDown
13
+ include Mixin::OPCodes
14
+
15
+ def initialize(**kwargs)
16
+ @base_client = Base.new(**kwargs)
17
+ @base_client.add_observer(self)
18
+ @response = { requestId: 0 }
19
+ end
20
+
21
+ def run
22
+ yield
23
+ ensure
24
+ close
25
+ WaitUtil.wait_for_condition(
26
+ "driver has closed",
27
+ delay_sec: 0.01,
28
+ timeout_sec: 1
29
+ ) { @base_client.closed }
30
+ end
31
+
32
+ def update(op_code, data)
33
+ @response = data if op_code == Mixin::OPCodes::REQUESTRESPONSE
34
+ end
35
+
36
+ def call(req, data = nil)
37
+ id = rand(1..1000)
38
+ @base_client.req(id, req, data)
39
+ WaitUtil.wait_for_condition(
40
+ "reponse id matches request id",
41
+ delay_sec: 0.001,
42
+ timeout_sec: 3
43
+ ) { @response[:requestId] == id }
44
+ if !@response[:requestStatus][:result]
45
+ error = [
46
+ "Request #{@response[:requestType]} returned code #{@response[:requestStatus][:code]}"
47
+ ]
48
+ if @response[:requestStatus].key?(:comment)
49
+ error += ["With message: #{@response[:requestStatus][:comment]}"]
50
+ end
51
+ raise OBSWSError.new(error.join("\n"))
52
+ end
53
+ @response[:responseData]
54
+ end
55
+
56
+ def get_version
57
+ resp = call("GetVersion")
58
+ Mixin::Response.new(resp, resp.keys)
59
+ end
60
+
61
+ def get_stats
62
+ resp = call("GetStats")
63
+ Mixin::Response.new(resp, resp.keys)
64
+ end
65
+
66
+ def broadcast_custom_event(data)
67
+ call("BroadcastCustomEvent", data)
68
+ end
69
+
70
+ def call_vendor_request(name, type_, data = nil)
71
+ call(requestType, requestData)
72
+ end
73
+
74
+ def get_hotkey_list
75
+ resp = call("GetHotkeyList")
76
+ Mixin::Response.new(resp, resp.keys)
77
+ end
78
+
79
+ def trigger_hotkey_by_name(name)
80
+ payload = { hotkeyName: name }
81
+ call("TriggerHotkeyByName", payload)
82
+ end
83
+
84
+ def trigger_hotkey_by_key_sequence(
85
+ key_id,
86
+ press_shift,
87
+ press_ctrl,
88
+ press_alt,
89
+ press_cmd
90
+ )
91
+ payload = {
92
+ keyId: key_id,
93
+ keyModifiers: {
94
+ shift: press_shift,
95
+ control: press_ctrl,
96
+ alt: press_alt,
97
+ cmd: press_cmd
98
+ }
99
+ }
100
+ call("TriggerHotkeyByKeySequence", payload)
101
+ end
102
+
103
+ def sleep(sleep_millis = nil, sleep_frames = nil)
104
+ payload = { sleepMillis: sleep_millis, sleepFrames: sleep_frames }
105
+ call("Sleep", payload)
106
+ end
107
+
108
+ def get_persistent_data(realm, slot_name)
109
+ payload = { realm: realm, slotName: slot_name }
110
+ resp = call("GetPersistentData", payload)
111
+ Mixin::Response.new(resp, resp.keys)
112
+ end
113
+
114
+ def set_persistent_data(realm, slot_name, slot_value)
115
+ payload = { realm: realm, slotName: slot_name, slotValue: slot_value }
116
+ call("SetPersistentData", payload)
117
+ end
118
+
119
+ def get_scene_collection_list
120
+ resp = call("GetSceneCollectionList")
121
+ Mixin::Response.new(resp, resp.keys)
122
+ end
123
+
124
+ def set_current_scene_collection(name)
125
+ payload = { sceneCollectionName: name }
126
+ call("SetCurrentSceneCollection", payload)
127
+ end
128
+
129
+ def create_scene_collection(name)
130
+ payload = { sceneCollectionName: name }
131
+ call("CreateSceneCollection", payload)
132
+ end
133
+
134
+ def get_profile_list
135
+ resp = call("GetProfileList")
136
+ Mixin::Response.new(resp, resp.keys)
137
+ end
138
+
139
+ def set_current_profile(name)
140
+ payload = { profileName: name }
141
+ call("SetCurrentProfile", payload)
142
+ end
143
+
144
+ def create_profile(name)
145
+ payload = { profileName: name }
146
+ call("CreateProfile", payload)
147
+ end
148
+
149
+ def remove_profile(name)
150
+ payload = { profileName: name }
151
+ call("RemoveProfile", payload)
152
+ end
153
+
154
+ def get_profile_parameter(category, name)
155
+ payload = { parameterCategory: category, parameterName: name }
156
+ resp = call("GetProfileParameter", payload)
157
+ Mixin::Response.new(resp, resp.keys)
158
+ end
159
+
160
+ def set_profile_parameter(category, name, value)
161
+ payload = {
162
+ parameterCategory: category,
163
+ parameterName: name,
164
+ parameterValue: value
165
+ }
166
+ call("SetProfileParameter", payload)
167
+ end
168
+
169
+ def get_video_settings
170
+ resp = call("GetVideoSettings")
171
+ Mixin::Response.new(resp, resp.keys)
172
+ end
173
+
174
+ def set_video_settings(
175
+ numerator,
176
+ denominator,
177
+ base_width,
178
+ base_height,
179
+ out_width,
180
+ out_height
181
+ )
182
+ payload = {
183
+ fpsNumerator: numerator,
184
+ fpsDenominator: denominator,
185
+ baseWidth: base_width,
186
+ baseHeight: base_height,
187
+ outputWidth: out_width,
188
+ outputHeight: out_height
189
+ }
190
+ call("SetVideoSettings", payload)
191
+ end
192
+
193
+ def get_stream_service_settings
194
+ resp = call("GetStreamServiceSettings")
195
+ Mixin::Response.new(resp, resp.keys)
196
+ end
197
+
198
+ def set_stream_service_settings(ss_type, ss_settings)
199
+ payload = {
200
+ streamServiceType: ss_type,
201
+ streamServiceSettings: ss_settings
202
+ }
203
+ call("SetStreamServiceSettings", payload)
204
+ end
205
+
206
+ def get_record_directory
207
+ resp = call("GetRecordDirectory")
208
+ Mixin::Response.new(resp, resp.keys)
209
+ end
210
+
211
+ def get_source_active(name)
212
+ payload = { sourceName: name }
213
+ resp = call("GetSourceActive", payload)
214
+ Mixin::Response.new(resp, resp.keys)
215
+ end
216
+
217
+ def get_source_screenshot(name, img_format, width, height, quality)
218
+ payload = {
219
+ sourceName: name,
220
+ imageFormat: img_format,
221
+ imageWidth: width,
222
+ imageHeight: height,
223
+ imageCompressionQuality: quality
224
+ }
225
+ resp = call("GetSourceScreenshot", payload)
226
+ Mixin::Response.new(resp, resp.keys)
227
+ end
228
+
229
+ def save_source_screenshot(
230
+ name,
231
+ img_format,
232
+ file_path,
233
+ width,
234
+ height,
235
+ quality
236
+ )
237
+ payload = {
238
+ sourceName: name,
239
+ imageFormat: img_format,
240
+ imageFilePath: file_path,
241
+ imageWidth: width,
242
+ imageHeight: height,
243
+ imageCompressionQuality: quality
244
+ }
245
+ resp = call("SaveSourceScreenshot", payload)
246
+ Mixin::Response.new(resp, resp.keys)
247
+ end
248
+
249
+ def get_scene_list
250
+ resp = call("GetSceneList")
251
+ Mixin::Response.new(resp, resp.keys)
252
+ end
253
+
254
+ def get_group_list
255
+ resp = call("GetSceneList")
256
+ Mixin::Response.new(resp, resp.keys)
257
+ end
258
+
259
+ def get_current_program_scene
260
+ resp = call("GetCurrentProgramScene")
261
+ Mixin::Response.new(resp, resp.keys)
262
+ end
263
+
264
+ def set_current_program_scene(name)
265
+ payload = { sceneName: name }
266
+ call("SetCurrentProgramScene", payload)
267
+ end
268
+
269
+ def get_current_preview_scene
270
+ resp = call("GetCurrentPreviewScene")
271
+ Mixin::Response.new(resp, resp.keys)
272
+ end
273
+
274
+ def set_current_preview_scene(name)
275
+ payload = { sceneName: name }
276
+ call("SetCurrentPreviewScene", payload)
277
+ end
278
+
279
+ def create_scene(name)
280
+ payload = { sceneName: name }
281
+ call("CreateScene", payload)
282
+ end
283
+
284
+ def remove_scene(name)
285
+ payload = { sceneName: name }
286
+ call("RemoveScene", payload)
287
+ end
288
+
289
+ def set_scene_name(old_name, new_name)
290
+ payload = { sceneName: old_name, newSceneName: new_name }
291
+ call("SetSceneName", payload)
292
+ end
293
+
294
+ def get_scene_scene_transition_override(name)
295
+ payload = { sceneName: name }
296
+ resp = call("GetSceneSceneTransitionOverride", payload)
297
+ Mixin::Response.new(resp, resp.keys)
298
+ end
299
+
300
+ def set_scene_scene_transition_override(scene_name, tr_name, tr_duration)
301
+ payload = {
302
+ sceneName: scene_name,
303
+ transitionName: tr_name,
304
+ transitionDuration: tr_duration
305
+ }
306
+ call("SetSceneSceneTransitionOverride", payload)
307
+ end
308
+
309
+ def get_input_list(kind = nil)
310
+ payload = { inputKind: kind }
311
+ resp = call("GetInputList", payload)
312
+ Mixin::Response.new(resp, resp.keys)
313
+ end
314
+
315
+ def get_input_kind_list(unversioned)
316
+ payload = { unversioned: unversioned }
317
+ resp = call("GetInputKindList", payload)
318
+ Mixin::Response.new(resp, resp.keys)
319
+ end
320
+
321
+ def get_special_inputs
322
+ resp = call("GetSpecialInputs")
323
+ end
324
+
325
+ def create_input(
326
+ scene_name,
327
+ input_name,
328
+ input_kind,
329
+ input_settings,
330
+ scene_item_enabled
331
+ )
332
+ payload = {
333
+ sceneName: scene_name,
334
+ inputName: input_name,
335
+ inputKind: input_kind,
336
+ inputSettings: input_settings,
337
+ sceneItemEnabled: scene_item_enabled
338
+ }
339
+ resp = call("CreateInput", payload)
340
+ end
341
+
342
+ def remove_input(name)
343
+ payload = { inputName: name }
344
+ call("RemoveInput", payload)
345
+ end
346
+
347
+ def set_input_name(old_name, new_name)
348
+ payload = { inputName: old_name, newInputName: new_name }
349
+ call("SetInputName", payload)
350
+ end
351
+
352
+ def get_input_default_settings(kind)
353
+ payload = { inputKind: kind }
354
+ resp = call("GetInputDefaultSettings", payload)
355
+ Mixin::Response.new(resp, resp.keys)
356
+ end
357
+
358
+ def get_input_settings(name)
359
+ payload = { inputName: name }
360
+ resp = call("GetInputSettings", payload)
361
+ Mixin::Response.new(resp, resp.keys)
362
+ end
363
+
364
+ def set_input_settings(name, settings, overlay)
365
+ payload = { inputName: name, inputSettings: settings, overlay: overlay }
366
+ call("SetInputSettings", payload)
367
+ end
368
+
369
+ def get_input_mute(name)
370
+ payload = { inputName: name }
371
+ resp = call("GetInputMute", payload)
372
+ Mixin::Response.new(resp, resp.keys)
373
+ end
374
+
375
+ def set_input_mute(name, muted)
376
+ payload = { inputName: name, inputMuted: muted }
377
+ call("SetInputMute", payload)
378
+ end
379
+
380
+ def toggle_input_mute(name)
381
+ payload = { inputName: name }
382
+ resp = call("ToggleInputMute", payload)
383
+ Mixin::Response.new(resp, resp.keys)
384
+ end
385
+
386
+ def get_input_volume(name)
387
+ payload = { inputName: name }
388
+ resp = call("GetInputVolume", payload)
389
+ Mixin::Response.new(resp, resp.keys)
390
+ end
391
+
392
+ def set_input_volume(name, vol_mul = nil, vol_db = nil)
393
+ payload = {
394
+ inputName: name,
395
+ inputVolumeMul: vol_mul,
396
+ inputVolumeDb: vol_db
397
+ }
398
+ call("SetInputVolume", payload)
399
+ end
400
+
401
+ def get_input_audio_balance(name)
402
+ payload = { inputName: name }
403
+ resp = call("GetInputAudioBalance", payload)
404
+ Mixin::Response.new(resp, resp.keys)
405
+ end
406
+
407
+ def set_input_audio_balance(name, balance)
408
+ payload = { inputName: name, inputAudioBalance: balance }
409
+ call("SetInputAudioBalance", payload)
410
+ end
411
+
412
+ def get_input_audio_sync_offset(name)
413
+ payload = { inputName: name }
414
+ resp = call("GetInputAudioSyncOffset", payload)
415
+ Mixin::Response.new(resp, resp.keys)
416
+ end
417
+
418
+ def set_input_audio_sync_offset(name, offset)
419
+ payload = { inputName: name, inputAudioSyncOffset: offset }
420
+ call("SetInputAudioSyncOffset", payload)
421
+ end
422
+
423
+ def get_input_audio_monitor_type(name)
424
+ payload = { inputName: name }
425
+ resp = call("GetInputAudioMonitorType", payload)
426
+ Mixin::Response.new(resp, resp.keys)
427
+ end
428
+
429
+ def set_input_audio_monitor_type(name, mon_type)
430
+ payload = { inputName: name, monitorType: mon_type }
431
+ call("SetInputAudioMonitorType", payload)
432
+ end
433
+
434
+ def get_input_audio_tracks(name)
435
+ payload = { inputName: name }
436
+ resp = call("GetInputAudioTracks", payload)
437
+ Mixin::Response.new(resp, resp.keys)
438
+ end
439
+
440
+ def set_input_audio_tracks(name, track)
441
+ payload = { inputName: name, inputAudioTracks: track }
442
+ call("SetInputAudioTracks", payload)
443
+ end
444
+
445
+ def get_input_properties_list_property_items(input_name, prop_name)
446
+ payload = { inputName: input_name, propertyName: prop_name }
447
+ resp = call("GetInputPropertiesListPropertyItems", payload)
448
+ Mixin::Response.new(resp, resp.keys)
449
+ end
450
+
451
+ def press_input_properties_button(input_name, prop_name)
452
+ payload = { inputName: input_name, propertyName: prop_name }
453
+ call("PressInputPropertiesButton", payload)
454
+ end
455
+
456
+ def get_transition_kind_list
457
+ resp = call("GetTransitionKindList")
458
+ Mixin::Response.new(resp, resp.keys)
459
+ end
460
+
461
+ def get_scene_transition_list
462
+ resp = call("GetSceneTransitionList")
463
+ Mixin::Response.new(resp, resp.keys)
464
+ end
465
+
466
+ def get_current_scene_transition
467
+ resp = call("GetCurrentSceneTransition")
468
+ Mixin::Response.new(resp, resp.keys)
469
+ end
470
+
471
+ def set_current_scene_transition(name)
472
+ payload = { transitionName: name }
473
+ call("SetCurrentSceneTransition", payload)
474
+ end
475
+
476
+ def set_current_scene_transition_duration(duration)
477
+ payload = { transitionDuration: duration }
478
+ call("SetCurrentSceneTransitionDuration", payload)
479
+ end
480
+
481
+ def set_current_scene_transition_settings(settings, overlay = nil)
482
+ payload = { transitionSettings: settings, overlay: overlay }
483
+ call("SetCurrentSceneTransitionSettings", payload)
484
+ end
485
+
486
+ def get_current_scene_transition_cursor
487
+ resp = call("GetCurrentSceneTransitionCursor")
488
+ Mixin::Response.new(resp, resp.keys)
489
+ end
490
+
491
+ def trigger_studio_mode_transition
492
+ call("TriggerStudioModeTransition")
493
+ end
494
+
495
+ def set_t_bar_position(pos, release = nil)
496
+ payload = { position: pos, release: release }
497
+ call("SetTBarPosition", payload)
498
+ end
499
+
500
+ def get_source_filter_list(name)
501
+ payload = { sourceName: name }
502
+ resp = call("GetSourceFilterList", payload)
503
+ Mixin::Response.new(resp, resp.keys)
504
+ end
505
+
506
+ def get_source_filter_default_settings(kind)
507
+ payload = { filterKind: kind }
508
+ resp = call("GetSourceFilterDefaultSettings", payload)
509
+ Mixin::Response.new(resp, resp.keys)
510
+ end
511
+
512
+ def create_source_filter(
513
+ source_name,
514
+ filter_name,
515
+ filter_kind,
516
+ filter_settings = nil
517
+ )
518
+ payload = {
519
+ sourceName: source_name,
520
+ filterName: filter_name,
521
+ filterKind: filter_kind,
522
+ filterSettings: filter_settings
523
+ }
524
+ call("CreateSourceFilter", payload)
525
+ end
526
+
527
+ def remove_source_filter(source_name, filter_name)
528
+ payload = { sourceName: source_name, filterName: filter_name }
529
+ call("RemoveSourceFilter", payload)
530
+ end
531
+
532
+ def set_source_filter_name(source_name, old_filter_name, new_filter_name)
533
+ payload = {
534
+ sourceName: source_name,
535
+ filterName: old_filter_name,
536
+ newFilterName: new_filter_name
537
+ }
538
+ call("SetSourceFilterName", payload)
539
+ end
540
+
541
+ def get_source_filter(source_name, filter_name)
542
+ payload = { sourceName: source_name, filterName: filter_name }
543
+ resp = call("GetSourceFilter", payload)
544
+ Mixin::Response.new(resp, resp.keys)
545
+ end
546
+
547
+ def set_source_filter_index(source_name, filter_name, filter_index)
548
+ payload = {
549
+ sourceName: source_name,
550
+ filterName: filter_name,
551
+ filterIndex: filter_index
552
+ }
553
+ call("SetSourceFilterIndex", payload)
554
+ end
555
+
556
+ def set_source_filter_settings(
557
+ source_name,
558
+ filter_name,
559
+ settings,
560
+ overlay = nil
561
+ )
562
+ payload = {
563
+ sourceName: source_name,
564
+ filterName: filter_name,
565
+ filterSettings: settings,
566
+ overlay: overlay
567
+ }
568
+ call("SetSourceFilterSettings", payload)
569
+ end
570
+
571
+ def set_source_filter_enabled(source_name, filter_name, enabled)
572
+ payload = {
573
+ sourceName: source_name,
574
+ filterName: filter_name,
575
+ filterEnabled: enabled
576
+ }
577
+ call("SetSourceFilterEnabled", payload)
578
+ end
579
+
580
+ def get_scene_item_list(name)
581
+ payload = { sceneName: name }
582
+ resp = call("GetSceneItemList", payload)
583
+ Mixin::Response.new(resp, resp.keys)
584
+ end
585
+
586
+ def get_group_scene_item_list(name)
587
+ payload = { sceneName: name }
588
+ resp = call("GetGroupSceneItemList", payload)
589
+ Mixin::Response.new(resp, resp.keys)
590
+ end
591
+
592
+ def get_scene_item_id(scene_name, source_name, offset = nil)
593
+ payload = {
594
+ sceneName: scene_name,
595
+ sourceName: source_name,
596
+ searchOffset: offset
597
+ }
598
+ resp = call("GetSceneItemId", payload)
599
+ Mixin::Response.new(resp, resp.keys)
600
+ end
601
+
602
+ def create_scene_item(scene_name, source_name, enabled = nil)
603
+ payload = {
604
+ sceneName: scene_name,
605
+ sourceName: source_name,
606
+ sceneItemEnabled: enabled
607
+ }
608
+ resp = call("CreateSceneItem", payload)
609
+ Mixin::Response.new(resp, resp.keys)
610
+ end
611
+
612
+ def remove_scene_item(scene_name, item_id)
613
+ payload = { sceneName: scene_name, sceneItemId: item_id }
614
+ call("RemoveSceneItem", payload)
615
+ end
616
+
617
+ def duplicate_scene_item(scene_name, item_id, dest_scene_name = nil)
618
+ payload = {
619
+ sceneName: scene_name,
620
+ sceneItemId: item_id,
621
+ destinationSceneName: dest_scene_name
622
+ }
623
+ resp = call("DuplicateSceneItem", payload)
624
+ Mixin::Response.new(resp, resp.keys)
625
+ end
626
+
627
+ def get_scene_item_transform(scene_name, item_id)
628
+ payload = { sceneName: scene_name, sceneItemId: item_id }
629
+ resp = call("GetSceneItemTransform", payload)
630
+ Mixin::Response.new(resp, resp.keys)
631
+ end
632
+
633
+ def set_scene_item_transform(scene_name, item_id, transform)
634
+ payload = {
635
+ sceneName: scene_name,
636
+ sceneItemId: item_id,
637
+ sceneItemTransform: transform
638
+ }
639
+ call("SetSceneItemTransform", payload)
640
+ end
641
+
642
+ def get_scene_item_enabled(scene_name, item_id)
643
+ payload = { sceneName: scene_name, sceneItemId: item_id }
644
+ resp = call("GetSceneItemEnabled", payload)
645
+ Mixin::Response.new(resp, resp.keys)
646
+ end
647
+
648
+ def set_scene_item_enabled(scene_name, item_id, enabled)
649
+ payload = {
650
+ sceneName: scene_name,
651
+ sceneItemId: item_id,
652
+ sceneItemEnabled: enabled
653
+ }
654
+ call("SetSceneItemEnabled", payload)
655
+ end
656
+
657
+ def get_scene_item_locked(scene_name, item_id)
658
+ payload = { sceneName: scene_name, sceneItemId: item_id }
659
+ resp = call("GetSceneItemLocked", payload)
660
+ Mixin::Response.new(resp, resp.keys)
661
+ end
662
+
663
+ def set_scene_item_locked(scene_name, item_id, locked)
664
+ payload = {
665
+ sceneName: scene_name,
666
+ sceneItemId: item_id,
667
+ sceneItemLocked: locked
668
+ }
669
+ call("SetSceneItemLocked", payload)
670
+ end
671
+
672
+ def get_scene_item_index(scene_name, item_id)
673
+ payload = { sceneName: scene_name, sceneItemId: item_id }
674
+ resp = call("GetSceneItemIndex", payload)
675
+ Mixin::Response.new(resp, resp.keys)
676
+ end
677
+
678
+ def set_scene_item_index(scene_name, item_id, item_index)
679
+ payload = {
680
+ sceneName: scene_name,
681
+ sceneItemId: item_id,
682
+ sceneItemLocked: item_index
683
+ }
684
+ call("SetSceneItemIndex", payload)
685
+ end
686
+
687
+ def get_scene_item_blend_mode(scene_name, item_id)
688
+ payload = { sceneName: scene_name, sceneItemId: item_id }
689
+ resp = call("GetSceneItemBlendMode", payload)
690
+ Mixin::Response.new(resp, resp.keys)
691
+ end
692
+
693
+ def set_scene_item_blend_mode(scene_name, item_id, blend)
694
+ payload = {
695
+ sceneName: scene_name,
696
+ sceneItemId: item_id,
697
+ sceneItemBlendMode: blend
698
+ }
699
+ call("SetSceneItemBlendMode", payload)
700
+ end
701
+
702
+ def get_virtual_cam_status
703
+ resp = call("GetVirtualCamStatus")
704
+ Mixin::Response.new(resp, resp.keys)
705
+ end
706
+
707
+ def toggle_virtual_cam
708
+ resp = call("ToggleVirtualCam")
709
+ Mixin::Response.new(resp, resp.keys)
710
+ end
711
+
712
+ def start_virtual_cam
713
+ call("StartVirtualCam")
714
+ end
715
+
716
+ def stop_virtual_cam
717
+ call("StopVirtualCam")
718
+ end
719
+
720
+ def get_replay_buffer_status
721
+ resp = call("GetReplayBufferStatus")
722
+ Mixin::Response.new(resp, resp.keys)
723
+ end
724
+
725
+ def toggle_replay_buffer
726
+ resp = call("ToggleReplayBuffer")
727
+ Mixin::Response.new(resp, resp.keys)
728
+ end
729
+
730
+ def start_replay_buffer
731
+ call("StartReplayBuffer")
732
+ end
733
+
734
+ def stop_replay_buffer
735
+ call("StopReplayBuffer")
736
+ end
737
+
738
+ def save_replay_buffer
739
+ call("SaveReplayBuffer")
740
+ end
741
+
742
+ def get_last_replay_buffer_replay
743
+ resp = call("GetLastReplayBufferReplay")
744
+ Mixin::Response.new(resp, resp.keys)
745
+ end
746
+
747
+ def get_output_list
748
+ resp = call("GetOutputList")
749
+ Mixin::Response.new(resp, resp.keys)
750
+ end
751
+
752
+ def get_output_status(name)
753
+ payload = { outputName: name }
754
+ resp = call("GetOutputStatus", payload)
755
+ Mixin::Response.new(resp, resp.keys)
756
+ end
757
+
758
+ def toggle_output(name)
759
+ payload = { outputName: name }
760
+ resp = call("ToggleOutput", payload)
761
+ Mixin::Response.new(resp, resp.keys)
762
+ end
763
+
764
+ def start_output(name)
765
+ payload = { outputName: name }
766
+ call("StartOutput", payload)
767
+ end
768
+
769
+ def stop_output(name)
770
+ payload = { outputName: name }
771
+ call("StopOutput", payload)
772
+ end
773
+
774
+ def get_output_settings(name)
775
+ payload = { outputName: name }
776
+ resp = call("GetOutputSettings", payload)
777
+ Mixin::Response.new(resp, resp.keys)
778
+ end
779
+
780
+ def set_output_settings(name, settings)
781
+ payload = { outputName: name, outputSettings: settings }
782
+ call("SetOutputSettings", payload)
783
+ end
784
+
785
+ def get_stream_status
786
+ resp = call("GetStreamStatus")
787
+ Mixin::Response.new(resp, resp.keys)
788
+ end
789
+
790
+ def toggle_stream
791
+ resp = call("ToggleStream")
792
+ Mixin::Response.new(resp, resp.keys)
793
+ end
794
+
795
+ def start_stream
796
+ call("StartStream")
797
+ end
798
+
799
+ def stop_stream
800
+ call("StopStream")
801
+ end
802
+
803
+ def send_stream_caption(caption)
804
+ call("SendStreamCaption")
805
+ end
806
+
807
+ def get_record_status
808
+ resp = call("GetRecordStatus")
809
+ Mixin::Response.new(resp, resp.keys)
810
+ end
811
+
812
+ def toggle_record
813
+ call("ToggleRecord")
814
+ end
815
+
816
+ def start_record
817
+ call("StartRecord")
818
+ end
819
+
820
+ def stop_record
821
+ resp = call("StopRecord")
822
+ end
823
+
824
+ def toggle_record_pause
825
+ call("ToggleRecordPause")
826
+ end
827
+
828
+ def pause_record
829
+ call("PauseRecord")
830
+ end
831
+
832
+ def resume_record
833
+ call("ResumeRecord")
834
+ end
835
+
836
+ def get_media_input_status(name)
837
+ payload = { inputName: name }
838
+ resp = call("GetMediaInputStatus", payload)
839
+ Mixin::Response.new(resp, resp.keys)
840
+ end
841
+
842
+ def set_media_input_cursor(name, cursor)
843
+ payload = { inputName: name, mediaCursor: cursor }
844
+ call("SetMediaInputCursor", payload)
845
+ end
846
+
847
+ def offset_media_input_cursor(name, offset)
848
+ payload = { inputName: name, mediaCursorOffset: offset }
849
+ call("OffsetMediaInputCursor", payload)
850
+ end
851
+
852
+ def trigger_media_input_action(name, action)
853
+ payload = { inputName: name, mediaAction: action }
854
+ call("TriggerMediaInputAction", payload)
855
+ end
856
+
857
+ def get_studio_mode_enabled
858
+ resp = call("GetStudioModeEnabled")
859
+ Mixin::Response.new(resp, resp.keys)
860
+ end
861
+
862
+ def set_studio_mode_enabled(enabled)
863
+ payload = { studioModeEnabled: enabled }
864
+ call("SetStudioModeEnabled", payload)
865
+ end
866
+
867
+ def open_input_properties_dialog(name)
868
+ payload = { inputName: name }
869
+ call("OpenInputPropertiesDialog", payload)
870
+ end
871
+
872
+ def open_input_filters_dialog(name)
873
+ payload = { inputName: name }
874
+ call("OpenInputFiltersDialog", payload)
875
+ end
876
+
877
+ def open_input_interact_dialog(name)
878
+ payload = { inputName: name }
879
+ call("OpenInputInteractDialog", payload)
880
+ end
881
+
882
+ def get_monitor_list
883
+ resp = call("GetMonitorList")
884
+ Mixin::Response.new(resp, resp.keys)
885
+ end
886
+ end
887
+ end
888
+ end