{ "audio": { "label": "Audio", "assignment-types": [0], "settings": { "A-dynamic-jitter-buffer": { "type": "checkbox", "label": "Dynamic Jitter Buffers", "help": "Dynamically buffer client audio based on perceived jitter in packet receipt timing", "default": false }, "B-static-desired-jitter-buffer-frames": { "label": "Static Desired Jitter Buffer Frames", "help": "If dynamic jitter buffers is disabled, this determines the target number of frames maintained by the AudioMixer's jitter buffers", "placeholder": "1", "default": "1" }, "C-max-frames-over-desired": { "label": "Max Frames Over Desired", "help": "The highest number of frames an AudioMixer's ringbuffer can exceed the desired jitter buffer frames by", "placeholder": "10", "default": "10" }, "D-use-stdev-for-desired-calc": { "type": "checkbox", "label": "Use Stdev for Desired Jitter Frames Calc:", "help": "If checked, Philip's method (stdev of timegaps) is used to calculate desired jitter frames. Otherwise, Fred's method (max timegap) is used", "default": false }, "E-window-starve-threshold": { "label": "Window Starve Threshold", "help": "If this many starves occur in an N-second window (N is the number in the next field), then the desired jitter frames will be re-evaluated using Window A.", "placeholder": "3", "default": "3" }, "F-window-seconds-for-desired-calc-on-too-many-starves": { "label": "Timegaps Window (A) Seconds:", "help": "Window A contains a history of timegaps. Its max timegap is used to re-evaluate the desired jitter frames when too many starves occur within it.", "placeholder": "50", "default": "50" }, "G-window-seconds-for-desired-reduction": { "label": "Timegaps Window (B) Seconds:", "help": "Window B contains a history of timegaps. Its max timegap is used as a ceiling for the desired jitter frames value.", "placeholder": "10", "default": "10" }, "H-repetition-with-fade": { "type": "checkbox", "label": "Repetition with Fade:", "help": "If enabled, dropped frames and mixing during starves will repeat the last frame, eventually fading to silence", "default": false }, "I-print-stream-stats": { "type": "checkbox", "label": "Print Stream Stats:", "help": "If enabled, audio upstream and downstream stats of each agent will be printed each second to stdout", "default": false }, "Z-unattenuated-zone": { "label": "Unattenuated Zone", "help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)", "placeholder": "no zone", "default": "" }, "J-enable-filter": { "type": "checkbox", "label": "Enable Positional Filter", "help": "If enabled, positional audio stream uses lowpass filter", "default": true } } } }