frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: Perfect Bluetooth MIDI for Windows

27•mayerwin•1h ago
Hi HN, I'm Erwin. I built a small free open-source utility that bridges Bluetooth LE MIDI keyboards into the new Windows MIDI Services stack so any DAW or Web MIDI app can use them as if they were wired.

I bought a Roland FP-90X piano partly because it had Bluetooth MIDI. On my Windows 11 PC, pairing succeeded, but my DAW couldn't see the keyboard, and notes I sent from the PC never made the piano sing. After a regrettable number of evenings, I'd separated this into three independent bugs stacked on top of each other.

The first one is the famous one: Windows only natively exposes BLE-MIDI through the WinRT API, which almost no DAW polls. So even when pairing succeeds, MIDI apps still don't see the device. The usual workaround is MIDIberry + loopMIDI, but I couldn't get that combination to work reliably in my case, and I wanted a single-app solution. The new Windows MIDI Services stack ships with a feature called loopback endpoints: anything written to one comes out the other, and any winmm/WinRT/WMS app sees them as normal MIDI ports. So the app does WinRT BLE-MIDI in, WMS loopback out. That solved direction one, piano to PC.

Direction two, PC to piano, still didn't work. NoteOn writes were getting ATT-acked, but the piano stayed silent. I tried both write modes (some BLE-MIDI firmware silently drops one or the other), poked the proprietary ISSC characteristic. Every variant ATT-acked, every variant produced silence. So the bytes were reaching the piano. Something above the GATT layer was discarding them.

After ruling out pairing, encryption, write-mode, and proprietary characteristics, the only obvious lever left was the MIDI channel itself. The FP-90X has a panel setting called Transmit Channel, default 1. Yet it turns out the FP-90X actually receives on channel 4 (and it can't be changed). Notes I sent on channel 1 were being GATT-acked and silently dropped at the synth engine because they weren't on the channel the engine was listening to. Zero feedback at any layer. The fix had to live up at the application layer, so I added a Detect button that plays N test notes ascending on each channel from 1 to 16: you count the notes you actually hear, and that number is the receive channel. Saved per BLE MAC, about 75 seconds, done forever per piano.

Tech stack: .NET 10, Avalonia for the UI (the BLE/MIDI side is Windows-only but the UI layer is portable), Microsoft.Windows.Devices.Midi2 packages for WMS, Windows.Devices.Midi (WinRT) directly for BLE rather than relying on Korg's older WinMM driver. MIT, single self-contained ~21 MB exe, no installer, no telemetry, no account.

I built it for myself and use it with my FP-90X to play through a few apps and Web MIDI sites. Pete from the Microsoft Windows MIDI Services team commented positively on the BLE integration when I shared it on r/synthesizers (https://www.reddit.com/r/synthesizers/comments/1szvuiq/comme...).

Site (with screenshots): https://mayerwin.github.io/Perfect-Bluetooth-MIDI-For-Window...

Source: https://github.com/mayerwin/Perfect-Bluetooth-MIDI-For-Windo...

Long-form technical writeup with the full debugging story: https://dev.to/mayerwin/why-your-bluetooth-midi-keyboard-sil...

Personally tested with my FP-90X only. The BLE side is generic, so other keyboards (WIDI Master, CME, Yamaha MD-BT01, Korg microKey Air, ROLI Seaboard, etc.) should work, but I haven't confirmed individually. Device test reports, issues, and PRs very welcome.

Comments

givinguflac•1h ago
Impressive work! Alas I don’t use windows but if I did I would certainly check this out.
team_zlvox•1h ago
Thanks! Totally understand – the tool’s core audience is definitely Windows users facing MIDI driver headaches. Appreciate you stopping by though!
QuantumNomad_•52m ago
> Windows only natively exposes BLE-MIDI through the WinRT API, which almost no DAW polls.

I haven’t used Windows for ages. Does this mean that almost every Windows user with any Bluetooth MIDI keyboard is unable to use it out of the box with their DAW without installing additional third-party software?

Does it apply even to latest version of the very widely used DAWs like Ableton, Pro Tools, FL Studio, Reason, and Reaper?

BonerWiener•18m ago
Wow very cool project! I will test it out later today - i have always been using cabled connection for my midi keyboard

Show HN: Perfect Bluetooth MIDI for Windows

29•mayerwin•1h ago•4 comments

Show HN: WhatCable, a tiny menu bar app for inspecting USB-C cables

https://github.com/darrylmorley/whatcable
126•sleepingNomad•2h ago•36 comments

How Mark Klein told the EFF about Room 641A [book excerpt]

https://thereader.mitpress.mit.edu/the-whistleblower-who-uncovered-the-nsas-big-brother-machine/
613•the-mitr•18h ago•207 comments

New copy of earliest poem in English, written 1,3k years ago, discovered in Rome

https://www.tcd.ie/news_events/articles/2026/caedmons-hymn-discovery/
78•giuliomagnifico•2d ago•49 comments

Grok 4.3

https://docs.x.ai/developers/models/grok-4.3
121•simianwords•3h ago•139 comments

A beginner's guide to Sourcehut (2025)

https://btxx.org/posts/beginners-guide-sourcehut/
22•bradley_taunt•1h ago•3 comments

For Linux kernel vulnerabilities, there is no heads-up to distributions

https://www.openwall.com/lists/oss-security/2026/04/30/10
516•ori_b•18h ago•404 comments

OpenWarp

https://openwarp.zerx.dev
104•zero-lab•9h ago•86 comments

Softmax, can you derive the Jacobian? And should you care?

https://idlemachines.co.uk/essays/softmax
59•smaddrellmander•3d ago•6 comments

Shai-Hulud Themed Malware Found in the PyTorch Lightning AI Training Library

https://semgrep.dev/blog/2026/malicious-dependency-in-pytorch-lightning-used-for-ai-training/
405•j12y•19h ago•146 comments

Opus 4.7 knows the real Kelsey

https://www.theargumentmag.com/p/i-can-never-talk-to-an-ai-anonymously
366•ilamont•1d ago•191 comments

The Rotary Un-Smartphone

https://skysedge.com/telecom/RUSP/index.html
32•tzury•1h ago•4 comments

If I could make my own GitHub

https://matduggan.com/if-i-could-make-my-own-github/
14•matricaria•22h ago•48 comments

Maladaptive Frugality

https://herbertlui.net/maladaptive-frugality/
113•herbertl•2d ago•91 comments

Auto Polo

https://en.wikipedia.org/wiki/Auto_polo
73•canjobear•2d ago•19 comments

How an oil refinery works

https://www.construction-physics.com/p/how-an-oil-refinery-works
436•chmaynard•21h ago•136 comments

Claude Code refuses requests or charges extra if your commits mention "OpenClaw"

https://twitter.com/theo/status/2049645973350363168
1186•elmean•21h ago•656 comments

CPanel and WHM Authentication Bypass – CVE-2026-41940

https://labs.watchtowr.com/the-internet-is-falling-down-falling-down-falling-down-cpanel-whm-auth...
116•zikani_03•12h ago•48 comments

After dissing Anthropic for limiting Mythos, OpenAI restricts access to Cyber

https://techcrunch.com/2026/04/30/after-dissing-anthropic-for-limiting-mythos-openai-restricts-ac...
45•gbourne1•1h ago•24 comments

I built a Game Boy emulator in F#

https://nickkossolapov.github.io/fame-boy/building-a-game-boy-emulator-in-fsharp/
287•elvis70•18h ago•66 comments

Can I disable all data collection from my vehicle?

https://rivian.com/support/article/can-i-disable-all-data-collection-from-my-vehicle
639•Cider9986•15h ago•265 comments

How we run iSCSI over the internet

https://scsipub.com/blog/how-we-run-iscsi-over-the-internet
23•qdotme•1d ago•9 comments

You can beat the binary search

https://lemire.me/blog/2026/04/27/you-can-beat-the-binary-search/
327•vok•3d ago•143 comments

Roboticist-Turned-Teacher Built a Life-Size Replica of Eniac

https://spectrum.ieee.org/roboticist-turned-teacher-eniac-replica
34•oldnetguy•1d ago•8 comments

Canonical/Ubuntu have been under DDoS for more than 15h

https://status.canonical.com/#/incident/KNms6QK9ewuzz-7xUsPsNylV20jEt5kyKsd8A-3ptQEHpOd8VQ40ZQs-K...
67•jtlebigot•3h ago•23 comments

New mechanical panoramic film camera from Jeff Bridges

https://wideluxx.com
153•armadsen•2d ago•71 comments

Reverse Engineering SimTower

https://phulin.me/blog/simtower
209•patrickhulin•2d ago•46 comments

Our agent found a bug with WireGuard in Google Kubernetes Engine

https://lovable.dev/blog/hunting-networking-bugs-in-kubernetes
16•vikeri•3h ago•0 comments

The Hearts of the Super Nintendo (2024)

https://fabiensanglard.net/snes_hearts/
32•droppedasbaby•9h ago•5 comments

Full-Text Search with DuckDB

https://peterdohertys.website/blog-posts/full-text-search-w-duckdb.html
149•ethagnawl•17h ago•31 comments