SayAll (无线麦): turning a Xiaomi Bluetooth remote into a Mac dictation microphone
无线麦(SayAll.app):支持小米蓝牙遥控器 2 和 2 Pro,变成 Mac 语音输入设备
At a glance
- What is it?
- SayAll is a SwiftUI macOS app that pairs a Xiaomi Bluetooth Remote 2 or 2 Pro with a virtual loopback microphone so you can hold a button and dictate into any app. It is a narrow tool for Apple Silicon and Intel Macs, and the README is unusually candid about which features are still being validated.
- Who is it for?
- SayAll is worth adopting if you already own a Xiaomi Bluetooth Remote 2 or 2 Pro, run an Apple Silicon Mac on macOS 14 or an Intel Mac on macOS 13, and want hold-to-talk dictation without changing your default input device. Skip it if you expect an iPhone or Android phone to act as the microphone, if you need cloud or cross-device sync of your dictation history, or if you cannot install a loopback audio driver.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 18, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What SayAll actually solves, and who it is for
The project targets one specific annoyance: dictation on a Mac usually means either a keyboard shortcut you have to remember or a microphone that hijacks your system default input. SayAll takes a Xiaomi Bluetooth Remote 2 or 2 Pro, a cheap TV-style remote with a voice button, and maps that button to a push-to-talk session. Hold the voice key, speak, release. The README states that SayAll does not modify the Mac's default input or output device for the sake of voice input, which is the part that matters if you are already using a headset or an audio interface.
The audience is narrower than the tagline suggests. You need an Apple Silicon Mac on macOS 14 or later, or an Intel Mac on macOS 13 or later, plus one of those two remote models. The README does not list support for other Bluetooth remotes, and the voice-key section notes that RC003, iPhone, Apple Watch and the web version all share the same paired press/release logic, which implies those are separate input paths rather than replacements for the remote. If you do not own a Xiaomi remote, this app has nothing to attach to.
How the remote, the loopback driver and the app fit together
The architecture has three moving parts. The remote connects over Bluetooth and identifies itself as `MI RC`, `Xiaomi Bluetooth Remote 2`, `Xiaomi Bluetooth Remote 2 Pro` or the Chinese equivalent. SayAll runs as a menu bar app with a Dock icon, listens for the voice key, and routes audio through a virtual loopback device. The installer checks for an existing `MiRemoteV 2ch` device: if it is healthy and compatible it is left alone, and only if it is missing or unusable does the installer add or update it. The README also accepts BlackHole 2ch or another loopback device you already have, which is why an App-only ZIP exists.
The data flow for dictation is: hold the remote voice key, the app opens the audio session on the selected loopback device, you speak, release, and the session ends. The target app (Doubao, WeChat, Typeless, or anything else) must be configured to use that same loopback device as its microphone. Nothing is transcribed by SayAll itself. It is a transport layer between a physical button and whatever dictation engine you already run. That is a deliberate boundary, and it explains why the README spends so much space on which apps expect Fn long-press versus Fn tap.
Installing SayAll and getting one dictation through
Apple Silicon users can pull the current stable build from the fixed Cloudflare CDN entry point, which the README says serves only the Apple Silicon package and does not need to be updated per release. Intel users have to go to GitHub Releases and find the newest pre-release DMG with `Intel` in the name until an Intel build is promoted to stable. The two packages are not interchangeable. The README gives the stable entry point as https://download.sayall.app/mac, and the Apple Silicon package is named `Remote-Mic-<版本>.dmg` while the Intel package is named `Remote-Mic-<版本>-Intel.dmg`.
After downloading, open the DMG and double-click the single installer. On Apple Silicon that is `Install SayAll.pkg`; on Intel it is `Install SayAll Intel.pkg`. The installer places the app at `/Applications/SayAll.app`. The README states that the checksum file `Remote-Mic-<版本>.dmg.sha256` in the same GitHub Release lists both architectures by filename, so you can verify the download against it. Since v1.3.0 the README states release packages are signed with an Apple Developer ID and notarized.
Pairing comes before the app. Turn Bluetooth on in System Settings, hold the remote's Home and Menu keys together until it enters pairing mode, then connect the device on the Mac. Launch SayAll and grant Bluetooth access when prompted. Only if you want to remap ordinary buttons do you also need Input Monitoring and Accessibility, and the README is explicit that you should fully quit and reopen the app after granting those.
Then set up voice input on the Connection and Voice page: click refresh audio devices, select `MiRemoteV 2ch` or your own loopback device, and set that same device as the microphone inside the dictation app. Click the target text field, hold the remote voice key, speak, release. If you want to sanity-check the audio path first, the README suggests the one-second test tone button or watching input levels in QuickTime Player's new audio recording window.
The voice key is the least flexible part of the design
SayAll does not let you bind the voice key to anything arbitrary. The README says the current version does not support an arbitrary custom voice key, and gives the reason: the target dictation app has to be configured with the same key, and RC003, iPhone, Apple Watch, the web version, permissions and input-source switching all have to share one paired press/release path. You choose between Fn/globe, left Command long-press, right Command long-press, or right Option long-press. Fn keeps the old behavior; the modifier modes need Accessibility permission and press the modifier at voice start and release it at voice end.
That constraint has real consequences. Many apps merge left and right modifiers into a generic modifier, so the README tells you to test in the target app rather than assume. Pressing other keys during the hold can fire modifier shortcuts. And the voice key never carries click, double-click or long-press actions; it only starts and ends a live session. If you wanted the same button to toggle a recording and also trigger a shortcut, this is the wrong tool.
Typeless users get a partial workaround: a toggle that makes SayAll emit an Fn tap at voice start and at drain end. The README is blunt that this is still hold-to-talk, because the remote firmware stops sending microphone audio once the voice key is released. It is not continuous or hands-free recording, and the toggle defaults to off and disables itself if permissions or the HID mapping are incomplete.
Record and MCP features that the README itself flags as unvalidated
The most interesting capabilities are the ones carrying caveats in the README. The one-key multi-step actions are labeled as newly added and under real-world validation. Per-app key mapping profiles with automatic app matching are labeled as a candidate capability still being validated against real remotes and third-party apps. The record feature, which saves only text that was entered through SayAll and stably appeared, is described as awaiting full real-voice acceptance.
Read those labels literally. This is not a project hiding behind marketing copy; it is a project telling you which surfaces may move under you. The record feature is off by default, saves no audio, does not read full conversations or surrounding context, and offers no cloud or cross-device sync. Local Agent access is also off by default and issues per-client, revocable, read-only MCP grants over local `stdio`, with no HTTP or TCP listener.
One boundary is stated plainly rather than softened: SayAll does not upload records on its own, but a third-party AI client reading them through MCP may send what it reads to its own cloud model. That is a property of the client, not of SayAll, and it is the kind of thing most READMEs omit.
Where SayAll is the wrong choice, and what to use instead
The clearest mismatch is the phone-as-microphone use case. Searches like "remote mic app for iphone" and "can I use my phone as a mic" describe a different category of tool, and SayAll is not in it. It requires a Xiaomi Bluetooth Remote 2 or 2 Pro as the physical input. An iPhone can connect to SayAll according to the README, but the app's purpose is still the remote-driven dictation flow, not turning a phone into a general-purpose wireless microphone for a PC.
WO Mic is the honest alternative for that other job. It turns a phone into a microphone for a computer over a client-server transport, which is the opposite approach: the phone is the capture device and the desktop is the receiver. SayAll reverses the roles, using a dedicated hardware remote as the button and a loopback driver as the virtual capture device, and it never leaves the Mac. If your goal is "my laptop has a bad mic and my phone is better," WO Mic-style tools address it. If your goal is "I want a physical button that starts dictation without stealing my audio device," that is what SayAll is built for.
A second wrong-fit case is anyone unwilling to install a loopback audio driver. The App-only ZIP exists for advanced users who already run BlackHole 2ch or similar, but without some loopback device the dictation path has nowhere to route. And anyone who needs their dictation history synced across machines should stop here: the README states there is no cloud or cross-device sync.
Maintenance, updates and the GPL-3.0 licence
The repository is not archived and the last push was on 2026-09-17, with v1.9.21 released on 2026-09-03. That is a recent cadence, though the README's own caveats about features under validation suggest the release numbers move faster than the feature set stabilizes.
Updates run through Sparkle. The app checks once a day and asks before installing; it does not silently download or install. The About page and the context menu both offer a manual check, and a separate "check pre-release versions" toggle defaults to off. Sparkle updates only the app bundle, while the compatible microphone driver stays under the control of the DMG installer. If an older copy still lives at `Remote Mic.app` or `无线麦.app`, in-app updates follow that original path; migrating to the standard `SayAll.app` filename requires running the new installer PKG once. That is a real upgrade cost worth knowing before you have two copies on disk.
The project is GPL-3.0. If you redistribute a modified build, the licence's source-availability terms apply, and the repository carries separate `COPYRIGHT.md` and `LOGO-LICENSE.md` files, so the logo is not covered by the same terms as the code. This is a description of what the repository states, not legal advice; read the licence text yourself if you plan to ship a fork.
Editorial conclusion
SayAll is worth adopting if you already own a Xiaomi Bluetooth Remote 2 or 2 Pro, run an Apple Silicon Mac on macOS 14 or an Intel Mac on macOS 13, and want hold-to-talk dictation without changing your default input device. Skip it if you expect an iPhone or Android phone to act as the microphone, if you need cloud or cross-device sync of your dictation history, or if you cannot install a loopback audio driver. Before installing, verify your remote model, confirm whether you need the App-only ZIP instead of the full PKG, and read the Onboarding product spec if you plan to touch the first-run flow.
Frequently asked questions
What is the best app to control my microphone?
There is no single best answer, and SayAll does not control a microphone in the general sense. It maps a Xiaomi Bluetooth Remote 2 or 2 Pro voice key to a push-to-talk session routed through a loopback device, and the README states it does not change your Mac's default input or output device.
Can I use my phone as a mic with SayAll?
SayAll is built around a Xiaomi Bluetooth Remote 2 or 2 Pro, not a phone. The README mentions iPhone and Apple Watch as input paths that share the same paired press/release logic, but the app's purpose is remote-driven dictation on a Mac, not turning a phone into a general wireless microphone.
What app can I use to turn my phone into a microphone?
That is a different category from SayAll, which requires a Xiaomi Bluetooth Remote 2 or 2 Pro as the capture trigger. Tools such as WO Mic use the phone as the capture device and a desktop client as the receiver, which is the opposite arrangement from SayAll's loopback-driver approach.
What apps to use for wireless microphone with SayAll?
SayAll does not transcribe audio itself, so the dictation app is your choice as long as it can select the same loopback device. The README documents compatibility notes for Doubao and WeChat input methods and a Typeless mode that emits Fn taps.
Community notes