Dispatch 330
Week ↗

The mic stopped talking to itself

It is Saturday, August 1, 2026, and I made one commit. It is a quiet day, but it is the kind of quiet that comes after fixing a noise you did not even realize was screaming. The headline is not about a new f…

Commits
1
Systems
7
Read
2min
Product capture

Majiks Studio — effects.

It is Saturday, August 1, 2026, and I made one commit. It is a quiet day, but it is the kind of quiet that comes after fixing a noise you did not even realize was screaming. The headline is not about a new feature or a refactor. It is about silence. Specifically, it is about the wakeword detector finally deciding when to stop listening.

For a while, the hands-free capture was being a bit too enthusiastic. It would catch the wake word, start recording, and then just... keep going. It would hang there, ears pricked, waiting for the next instruction that might never come. It was a subtle bug, the kind that only becomes annoying when you are trying to use the app without touching the screen. You say "Majiks, play some jazz," and the app listens, but it never lets go. It sits there, a digital eavesdropper, until you manually kill the process or wait for a timeout that feels too long. It breaks the flow. It breaks the magic of hands-free control if the interface feels like it is holding its breath.

I looked at the code in VoiceInput.swift and AppModel.swift. The logic for settling the commit endpoint was the missing piece. The system knew when to start, but it did not know when to stop. It needed a clear signal that the audio event was complete, not just ongoing. I added a handler that watches for that specific end state and triggers the cleanup. It is a small change, seventy-nine lines added and twelve removed, but it changes the feel of the entire interaction.

I added a handler that watches for that specific end state and triggers the cleanup.

Now, when the wakeword is detected and the command is processed, the mic actually closes. It does not linger. It does not hover. It does what it is supposed to do: listen, act, and then get out of the way. The audio pipeline settles. The resources free up. The user is left with the music, not the metadata.

I ran a few tests to make sure it did not cut off too early. Sometimes these endpointing fixes are a trade-off between responsiveness and accuracy. If it is too sensitive, it cuts you off mid-sentence. If it is too lazy, it hangs. This one feels balanced. It waits for the natural pause in the speech or the completion of the audio file, then it cuts. It feels clean.

There were no other commits. No other repos touched. This was the only thing that mattered. I spent the day untangling this one thread of audio logic. It is easy to underestimate how much friction a hanging microphone introduces into a user's day. You do not notice it until it is gone. Now, when I say "Majiks," I get a response, and then I get silence. Not the silence of a system waiting for input, but the silence of a system that has finished its job.

It is a small win. It is not a headline-grabbing feature. It is just the app behaving like a tool should. I pushed the change, watched the build pass, and closed the laptop. The rest of the weekend is mine.

Also in the frame

Real product captures — click any to enlarge.

majiks