How to Use Flydigi Apex 4 Adaptive triggers AND ReWASD together
▲ 11 r/rewasd+1 crossposts

How to Use Flydigi Apex 4 Adaptive triggers AND ReWASD together

I went down the rabbit hole of getting the most out of my apex 4 controller features and rewasd. Let me say this in advance. This is incredibly JANK. the fact that this works is the only reason its not pathetic enough to not be documented. TLDR method is at the bottom of my schizo rambling

Flydigi Spacestation is an incredibly frustrating software for a controller that is genuinely my favorite controller ever.

I bought rewasd specifically so i dont have to deal with spacestation even though rewasd and spacestation dont want to work together. Also, ReWASD will NOT emulate a virtual DualSense. This causes issues where i want to use the full feature set of the Apex 4 in ReWASD but i Cant. So i went on this journey and i think i have found a way to trick both SpaceStation and reWASD into tricking windows into showing both a DualSense and an Apex 4 controller at the same time. then I use rewasd to switch which controller i want to actively use and when. yes its so dumb. you trick 3 district softwares to trick the game you want to play.

https://preview.redd.it/8ypxxofevtdh1.png?width=300&format=png&auto=webp&s=a398d1a3394dccb29ae4e9c8fd4d004ca1afe9a3

Anyway, i am basing this off of the info u/Living_Remove_762 posted a while ago here

I really hope ReWASD and Flydigi dont come together to ruin my setup in the next update. Please rewasd team dont do it. Im begging you.

what i found in my research:

- SpaceStation is configured to have adaptive trigger (AT) support for very specific games.

- it does this my "emulating" a DualSense when (a) a recognized exe of a supported game is running (b) the user toggles on the adaptive trigger mode specifically for each supported game

- for some reason (might be legal?) FlyDigi has NOT given the users a way to just switch to DualSense mode cleanly and globally for the controllers. The emulation ONLY happens when a recognized exe is running essentially and you as the user enabled adaptive triggers for it. it stops that emulation when you close that exe

- ReWasd does not like space station running. So it closes itself if it detects SpaceStation. But this does not happen with SpaceStation v4 meaning you can finally have both softwares open at the same time. Please rewasd team do not patch this out

- You can trick SpaceStation to think a compatible game (for AT) is running by having a dummy exe running that does nothing and costs no performance in the background.

- When you trick SpaceStation like this it will continue to emulate a DualSense controller globally

- This makes ReWASD detect a DualSense controller AND an APEX 4

- You can then launch any game (with your dummy program running in the background) and as long as it supports a DualSense it will show you DualSense glyphs and even support AT if it supports it.

- if two supported games are running at the same time. In my experience if you quit one of them while DualSense is being emulated, SpaceStation will stop the emulation and then you can not use DualSense features in the first game either.

The method:

- If you have rewasd already quit the app from the tray

- install SpaceStation version 4 (launch it, update it, etc)

- connect your apex 4 ( i connected using dongle)

- HIGHLY recommended: change the settings of the controller to NEVER turn off on inactivity. The controlelr turning off on inactivity caused so many issues while i was debugging.

- Go to Adaptive trigger section, look for a game that (a) supports "DS Mode" (b) THAT IS NOT the game you want to play . This will be refered to as the "Dummy Game" from here. i chose GTA 5 enhanced but i think it also works OverWatch and some other game i just didnt bother checking.

- enable the adaptive trigger toggle for the dummy game

- DO NOT enable it for any other game . if you do then DualSense stops working if you quit any supported game. meaning if you chose GTA5 enhanced as the "dummy" and enabled the AT for it and say you wanted to play Cyberpunk and ALSO enabled the AT for it, when you launch both dummy program and cyberpunk the dual sense emulation will work but it will stop when you close Cyberpunk. even if dummy program is still running. when you relaunch cyberpunk after that you will not have DualSense in game.

- Find out what the exe is called for the "dummy" game. for GTA 5 enhanced it is "GTA5_Enhanced.exe"

- find an exe that is harmless, useless and you wont mind changing. Rename it to the exe from previous step. in this example that's "GTA5_Enhanced.exe" . ( I have read that copying over "notepad.exe" or "msinfo32.exe" and renaming it works but i couldnt get it working. I had to write my own little dummy program. you can download it and get it working if you would like)

- launch your dummy exe and you should notice that Steam now reads Apex 4 AND a DualSense

- launch rewasd and you should see two controllers at the bottom now, one should be apex 4 and one should be dualsense.

https://preview.redd.it/vx6lccuwntdh1.png?width=2985&format=png&auto=webp&s=b43fceca43ba41990c65c808490f2e3791f06172

- Click on the DualSense, then click on Add game profile, name it, and now you should see a mapping window like you would for any controller in rewasd. Click on the magic wand and choose physical dualsense. This will map your configuration automatically . (if you get an error saying something like 'cannot map physical dualsense mapping required' or something like that just click on any button like the circle and choose the circle option from the dropdown it should pick it up after that)

https://preview.redd.it/dvk75fzbotdh1.png?width=1940&format=png&auto=webp&s=d6f1156c32b53bd0a793ecc3d8d480f431f173df

- apply that to slot 1. change it to your liking if needed. this alone should do it and you should be able to use this mapping on any DualSense supported game

- however now you will have two controllers showing for the same apex 4. this can cause weird issues and sometimes a game will default to the Apex 4 config instead even if you do have the dummy program running. You will have to quit the game, quit the dummy, wait for space station to detect the dummy is closed and start all over again. So look at bonus section

Bonus:

- if you are like me you will be very annoyed when you have to switch between profiles for a game that does not support DualSense or if you want to play a game with your apex 4 config instead. Or just easily switch to it

- what you can do is , in rewasd, while your dummy program is running and you have the DualSense emulated device showing, Group the Apex 4 and DualSense together in rewasd. IDK what this does i had a hard time understanding it. but this seemed to resolve any conflicts i had in game while in cyberpunk where even tho i could see the dualsense in reasd, cyberpunk would still default to the apex 4 mapping. Also this allows for a quick swap between the DS and Apex 4 mapping

Click on group button and choose apex 4 and DualSense

https://preview.redd.it/qkkxvnq6rtdh1.png?width=1744&format=png&auto=webp&s=980420f85923ab85b036486ba5bc9b6a09697b90

- from here make sure your mappings are to your linking then click on the playstation glyph towards the top here

https://preview.redd.it/uygs5x1hrtdh1.png?width=2089&format=png&auto=webp&s=f5181cbca019650a1e08339552cccf51962cd4d3

then click on apply to slot 1

then click on the apex 4 glyph right next to it

https://preview.redd.it/896sv00nrtdh1.png?width=2152&format=png&auto=webp&s=fe04841a3aead04d69ed6e25f24969a0c5cb4c7a

and then click on apply to slot 2

- then make your way to the settings menu > then click on "Slots" > choose the group with the apex 4 and the DualSense and apply a mapping switch shortcut for each Slot we setup in the previous step

https://preview.redd.it/psojjh73stdh1.png?width=2320&format=png&auto=webp&s=5b0c0092c186709b44467a1f0c534f7a4aa0656d

Notice how you can use the back buttons AND the DualSense Face buttons in this combo. This is only possible because we grouped the two controllers together.

- Doing all these steps allows you to seamlessly switch from one config to the other if youre switching games. This is kind of needed for when your DualSense is showing in rewasd but the game is defaulting to the Apex 4 mapping. use the slot switcher button combo and the game should detect the mapping again.

Doing this allows me to launch Cyberpunk and just use all the features of a DualSense on the Apex 4, Rewasd running, space station running. I can even switch to Slot 2 and play with a xbox mapping if i want to, and use my mapping on the back buttons on the Apex 4 very cleanly. When i drive the car the right trigger has a vibration mapped very cleanly to the acceleration and transmission of the car. When in combat the right trigger has resistance that the game tries to replicate for a gun trigger.

I can even switch to a game that does not support the dualsense and just switch to my Apex 4 mapping on the fly while my dummy program is running.

The Only issue i cant figure out right now is that even after switching to the Apex 4, the last adaptive trigger profile (for a car or combat in game) is still applied. I am trying to figure that out.

If mt explanation is weird im sorry. ill do my best to explain in comments. feel free to ask

TLDR:

- install latest version of SpaceStation v4

- enable adaptive trigger in DS Mode for one game you dont intend to play. And no other game

- find a dummy exe program you dont care about. rename to the same exe for the game you chose in previous step

- run the exe

- install rewasd

- map the dual sense

- group it with Apex 4

- setup Slots.

- enjoy

reddit.com
u/doodooheadpoopoohead — 9 days ago

ChloroFrame Update: Made some minor updates to streamline audio and keyboard/trackpad input over the weekend

Last week I posted about ChloroFrame, a native macOS Moonlight-style streaming client I’ve been working on. It’s still alpha, and this v1.1-alpha release is mostly a smaller audio/input update.

The main audio change is a more resilient CoreAudio pipeline for Wi-Fi jitter on my Mac setup. In Moonlight PC’s SDL audio path, the client keeps the audio side shallow: it avoids queueing decoded audio when Moonlight’s pending audio queue is already over about 30 ms. That keeps latency low, but when Wi-Fi delivery comes in bursts, the client has to choose between growing latency and dropping/skipping audio. Those missing samples can show up as clicks, pops, or brief stutters. And on MacOS this problem is annoyingly common, like every few seconds.

In ChloroFrame, this release adds an adaptive audio buffer. It starts around 60 ms, grows when underruns show the buffer is running too thin, and then slowly shrinks back down based on observed buffer drawdown. The adaptive target tops out around 95 ms, with a hard playback clamp around 125 ms. That is more latency than I’d ideally want, and on unstable Wi-Fi you may notice audio sitting a little behind video if you have a sharp eye, but in my testing it produces far fewer clicks and pops.

This update also includes keyboard/mouse input fixes and modifier remapping work. Which basically means you can rebind the modifers around or even diable the if you would like. You can also view stream control keybinds in the main app and by holding ctrl + option + cmd. I also added a way to send function commands from mac on to the host.

Controller support is next on my todo list.

Release: https://github.com/AmanBhardwaj25/ChloroFrame/releases/tag/v1.1-alpha

u/doodooheadpoopoohead — 1 month ago
▲ 8 r/MoonlightStreaming+1 crossposts

I made a MacOS native Swift/metal based moonlight client: ChloroFrame

Hey everyone,

I just published the first alpha of ChloroFrame, a native macOS client for Apollo (the Sunshine fork), and wanted to share it here since this is where all of this work originates. I understand this might be very niche lol

Release: https://github.com/AmanBhardwaj25/ChloroFrame/releases/tag/v1.0-alpha
Repo: https://github.com/AmanBhardwaj25/ChloroFrame

Alpha warning, please read first

This is alpha/experimental software. It is not a Moonlight replacement and shouldn't be your daily driver. Expect bugs, crashes, stream instability, and edge cases that haven't been tested across different apple hardware, hosts, displays, and networks. If you need something reliable today, use Moonlight!

Honest disclosure about AI

I used AI heavily while building this. I'm a backend-heavy full-stack dev with no prior professional experience in real-time streaming, codecs, FEC, or low-latency transport . I started this to learn Swift/macOS development. If AI-assisted code is a dealbreaker for you, that's a completely fair position, and I'd rather you know upfront. Treat the codebase as experimental: read it, test carefully, assume there are mistakes and PLEASE REPORT THEM UNDER THE ISSUES SECTION ON THE GITHUB

What it is

A Swift client built around Apple's media stack: SwiftUI for the app, VideoToolbox for decode, Metal for rendering, Network.framework + POSIX sockets for transport, and CoreAudio + libopus for audio. Much of the core protocol work is a direct Swift translation/adaptation of moonlight-common-c:RTSP negotiation, RTP handling, FEC behavior, ENet control messages, and a lot of hard-earned protocol details within moonlight-common-c which are battle-tested

What works today (still alpha):

  • Pairing with Apollo hosts and launching apps
  • H.264 and HEVC decode through VideoToolbox
  • HDR10/PQ streaming (HEVC, with a supported host app and HDR-capable display.
  • Metal rendering with NV12/P010 zero-copy paths and display-link frame pacing
  • RTP video assembly with FEC recovery (a Swift translation of moonlight-common-c's logic). For the Reed-Solomon math itself there's a toggle between a vendored C implementation and a pure-Swift translation of it. Both based on nanors, the same RS library moonlight-common-c uses. The C path is the default; I haven't scientifically benchmarked the two but the C path appears faster
  • Opus audio via libopus and CoreAudio pull playback. I originally tried Apple's built-in Opus decoder (AudioToolbox's AudioConverter with kAudioFormatOpus), but based on my debugging it silently truncates 5 ms CELT packets to 2.5 ms, you lose half the samples and get robotic, choppy audio. libopus decodes every frame size correctly, so I vendored that instead. Might revisit AudioConverter in the future when i better understand it
  • Keyboard and mouse input over the encrypted control channel

What's missing / coming:

  • Gamepad, touch, and pen input: not implemented yet (I know, big one to miss). This is because I am trying to understand the input pipeline for game controllers and I want to see if there is any way we can support modern controllers with all the extra buttons and features. Currently on Apollo/ Sunshine side an xbox360/dualshock controller is emulated regardless of what you have paired on moonlight. This is because ViGEmBus, the software used for controller support ended support a very long time ago. So this whole chain needs a little innovation. Thats why I did not want to commit to the existing way of doing things controller wise. For now, if you need to use a controller, consider connecting it directly to the host
  • The color scheme is super ugly lol. I know it. you are thinking it. I am not much of a creative designer as you can tell. I am going to ask my wife to help me redesign it when she has time.
  • Audio resilience: packet reorder handling, packet-loss concealment, adaptive jitter buffering, clock-drift correction. I am learning about how webrtc handles audio jitter and I am going to use their math for handling AWDL/wifi related jitter issues in audio
  • mDNS/Bonjour host discovery (currently a placeholder you have to do a manual IP entry)
  • AWDL suppression is broken right now, it is a TODO
  • Upstream Sunshine is untested. I develop against Apollo only. It may work where the protocols match, but no promises

Requirements: Apple Silicon Mac (no Intel support) and an Apollo host on the local network. Although, if you have sunshine installed on host im curious to know how it performs.

Testing help wanted: if you're the type who enjoys tinkering and can tolerate alpha-quality bugs, I'd genuinely appreciate GitHub issues. Reports with Mac model, macOS version, Apollo version, codec/HDR settings, and logs are gold.

Finally, a huge thank-you to the Moonlight team. This project simply would not exist without the years of difficult protocol and compatibility work the Moonlight and moonlight-qt developers have done in public. Please understand, this isn't a dig at moonlight-qt or a claim that it doesn't work. Moonlight is the mature client people should use when they need reliability. ChloroFrame is a learning experiment in what an Apple-native client could look like, built directly on the foundation they laid. Thank you!

u/doodooheadpoopoohead — 1 month ago

Does anyone have clarity on SDE 3 and up hiring process at Google USA who can help me? Not asking for entry level roles.

I feel like I’m in the twilight zone with Google right now. I apply for jobs, a recruiter from randstad reaches out asking to fill out a questionnaire, I do , they say they will keep me posted. Two days later I get a rejection.

First two times I didn’t think much of it I figured the position closed or maybe the hiring manager already had enough resumes or they didn’t like mine . But this has happened 5 times now. From 5 different recruiters for 5 different roles . In the last 6 months. At this point I have to be the one doing something wrong. Any insights?

reddit.com
u/doodooheadpoopoohead — 2 months ago
▲ 15 r/MoonlightStreaming+1 crossposts

Fix for audio crackling and micro-stutters on Apple Silicon Moonlight

TLDR: if you are having issues with micro stutters and/or audio stutters on mac silicon based macbooks, please give this moonlight version a try: find the release here and let me know what you think

If you are using mac silicon (M1,M2 and above) for moonlight you might have come across micro stutters and audio glitches/crackles/pops/stutters which make it annoying to stream on moonlight.

One of the moonlight devs have created a fork of the main moonlight-qt client which is written to be a native macos app. I tried it and it did wonders for the visual microstutters. but i still got audio crackles and pops every few seconds and if i stayed on stream for a long time i got visual jitters and micro stuttering too. So I forked that repo to debug these issues. So basically this is a fork of a fork.

One cause of all this as you may know is AWDL. It is the thing that controls airdrop, sidecar and some other features on apple devices. You used to be able to do one command in console and suppress it but these days in macos it just kind of brings itself back after a while. You might have come across some scripts to keep it down while you stream. This works but it is definitely annoying to keep track of. Another solution is to change your 5 gig wifi channel to 149 but that never worked for me. So i forked the code and implemented a script that comes baked in with the moonlight client that suppresses awdl automatically while you stream. when you quit out of moonlight stream it resumes awdl so you dont have to keep track of it.

The other thing that I had a very hard time finding info on was the annoying audio crackling and popping. it is hard to find info on, because when i google it, google thinks im talking about visual micro stutters so every search result was about visual micro stutters. Anyway, I was finally able to figure out why this audio crackle/stutter was happening, I forked the code for the native macos app and implemented a fix. the default value in the code was 30 ms. You can up this to 90 and the audio crackles should go away for the most part. this will introduce and imperceptible amount of audio latency. (well at least to me its imperceptible)

Very brief on why this crackle happens: the original moonlight client drops decoded audio frames whenever more than 30 ms of audio is queued in the pre-decode buffer. On a congested or variable-latency wireless connection this fires constantly, producing crackling and micro-stuttering that is unrelated to the video pipeline. I have implemented a slider to adjust this to a higher value so that the stream is more tolerant of network jitter. This is rooted in a fundamental issue with how macos handles audio. This is why this issue never happens on other clients like steam deck. because how the audio works on those clients is just different.

If you have this issue and dont mind testing:

You can find the release here

u/doodooheadpoopoohead — 2 months ago

Code in interview coding pad didn’t work and kept printing undefined . Copied the whole thing to clip board before code pad ended, after the interview pasted it in vs code and it worked. How’s your recruitment process going?

I think the universe is just entirely genuinely TRYING to frick me over. I spend 20 to 30 hours a week on prep. It’s really hard not to have a defeatist attitude right now.

reddit.com
u/doodooheadpoopoohead — 2 months ago