Posted on cohost Jul 23 2023
Just some additional misc things.
XSOverlay
Is what I use to see and interact with desktop windows in VR. The other option I know of is OVR Toolkit. Both cost about $10 on steam, and when I was researching it last year, XSOverlay seemed like the better option. Pretty much just taking someones word its less crashy and better performant, but I haven't had problems with it. It also lets you save layouts which I find useful.
Recently I've started positioning these windows so I'll be facing the camera when looking at them instead of directly behind me.
SAMMI
One of the things I use XSOverlay for while streaming is a SAMMI deck. I'm not doing anything fancy with it, but Its way easier to hit big sammi deck buttons in VR than a small target in a regular window. So I have one for toggling mute on my mic, and one for copying the bsr codes I've found ahead of stream into chat.
The Mute button works through "Source Toggle Mute" in obs actions.
I mute whenever I take a drink 'cause it is sometimes picked up by the mic and some people really don't like any eating/drinking sounds.
The bsr code one is a little more complicated, but takes advantage of the .csv file functions SAMMI has to pull a random line from a single column .csv file, and I just copy bsr codes into there as I see other folks play interesting songs, or just my own searching before stream. I don't think it's something a lot of people would want, but Including the JSON in an expandable section below just in case.
Copy bsr codes SAMMI button JSON
{ "color": 12632256.0, "persistent": 1.0, "text": "bsr", "release_duration": 0.0, "queueable": 0.0, "command_list": [ { "b1": "[csv File path]", "cmd": 202.0, "obsid": "Main", "pos": 0.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr" }, { "b1": "count", "cmd": 216.0, "obsid": "Main", "pos": 1.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr", "v0": 0.0 }, { "b53": "", "b5": "", "b13": "==", "v14": 0.0, "b36": "", "b38": "", "v10": 0.0, "b32": "", "b19": "==", "b57": "", "b59": "", "b17": "", "b1": ">", "v18": 0.0, "v16": 0.0, "b34": "==", "b7": "==", "b11": "", "b9": "", "b51": "", "b15": "", "b3": "", "b55": "==", "v12": 0.0, "cmd": 7.0, "b30": "", "b43": "==", "v21": 0.0, "v1": 0.0, "b26": "", "b28": "==", "obsid": "Main", "b22": "==", "pos": 2.0, "v5": 0.0, "b47": "", "b49": "==", "v3": 0.0, "vis": 1.0, "b24": "", "ms": 0.0, "b41": "", "sel": 0.0, "b45": "", "v9": 0.0, "dis": 0.0, "xpan": 0.0, "b20": "", "v7": 0.0, "b33": "", "v11": 0.0, "b16": "==", "b0": "count", "b58": "==", "b56": "", "b18": "", "b4": "==", "b12": "", "b52": "==", "b39": "", "b37": "==", "v15": 0.0, "b54": "", "b14": "", "b2": "0", "b31": "==", "v13": 0.0, "b35": "", "v17": 0.0, "v19": 0.0, "b50": "", "b8": "", "b6": "", "b10": "==", "b23": "", "v4": 0.0, "b48": "", "b46": "==", "v20": 0.0, "b42": "", "b29": "", "v0": 6.0, "b27": "", "b44": "", "b21": "", "v6": 0.0, "v8": 0.0, "v2": 1.0, "b25": "==", "b40": "==", "v22": 0.0 }, { "b1": "0", "cmd": 77.0, "obsid": "Main", "pos": 3.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "row", "b2": "(count-1)", "v0": 0.0 }, { "b1": "0", "b3": "bsrid", "cmd": 206.0, "obsid": "Main", "pos": 4.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr", "b2": "row" }, { "cmd": 142.0, "obsid": "Main", "pos": 5.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 41.0, "b0": "\/$bsrid$\/" }, { "b1": "", "cmd": 148.0, "obsid": "Main", "pos": 6.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "\/$bsrid$\/" }, { "b1": "row", "cmd": 209.0, "obsid": "Main", "pos": 7.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr" }, { "b1": "[csv File path]", "cmd": 201.0, "obsid": "Main", "pos": 8.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr" }, { "cmd": 211.0, "obsid": "Main", "pos": 9.0, "vis": 1.0, "ms": 0.0, "sel": 0.0, "dis": 0.0, "xpan": 0.0, "b0": "bsr" } ], "press_type": 0.0, "x": 0.40000000000000002220446049250313, "border": 2.0, "image": "", "triggers": [ ], "group_id": "", "overlappable": 0.0, "init_variable": "", "deck": 0.0, "width": 0.5, "button_id": "ID2", "button_duration": 0.0, "y": 0.0, "switch_deck": "", "height": 0.5, "release_list": [ ], "functions": 65.0, "stretch": 0.0 }
Mic Stuff
I found for the valve index mic at least you need some kind of noise handling: Initially I used just a noise gate, which cut out my regular breathing sounds.
The last few streams I added on NVIDIA broadcast noise suppression, which works well to cut out the heavier breathing I do while actually playing(except when I'm breathing really heavy, but that's rarer)