Dev.to AI 🤖 Ai 👁 0 📖 4 min read

Signal2Speech: one app, a final round of testing, and our submission (Update 6)

This is our sixth update on Signal2Speech, our Hack the Nest 2026 project that lets someone answer questions with an EEG headset. The app suggests replies, the wearer picks one with a P300 response (a brain signal that s

This is our sixth update on Signal2Speech, our Hack the Nest 2026 project that lets someone answer questions with an EEG headset. The app suggests replies, the wearer picks one with a P300 response (a brain signal that shows up about 300 milliseconds after the card you're watching flashes), and they confirm by closing their eyes. Nothing is spoken until they confirm. In our last post, we covered testing a PiEEG board on two people and finding no usable brain signal, so the app now runs on real human EEG that g.tec recorded on their own amplifier. Since then, we have submitted our project on Devpost. This post covers the last few hours before the deadline.

One app instead of two

Up to now, the AI replies and the NASA air-quality demo were two separate windows. Signal2Speech is now one app. The main screen is a question box and two reply cards, and the top of the window says what the app is and the three steps to use it. The NASA question is now an example inside the app. Clicking "Example: NASA air quality" brings up the map in the side panel, and the conversation shows the rest of the time. Nothing about choosing, previewing, confirming, or speaking changed, only the layout and the way in.

We made this change because the conversation is the actual product. A person who can't speak needs to answer any question, not just one about air quality. The NASA example shows that the app can also do something on screen, but it shouldn't be the first thing someone sees. The reply screen can also run on g.tec's recorded brain data now, so recorded EEG picks between Claude's replies the same way it picks between the NASA options.

Testing the parts we couldn't see

Soak test: We wanted to know the app would hold up for a full judging hour, so we built a soak test that runs the demo by itself for 60 minutes. It runs through the same crash-safe launcher we use at the table and kills the app once on purpose. The first full run passed with 169 confirms and 169 spoken lines, zero doubles, zero crashes, and the app back within 1.1 seconds after the kill. The selection time was 3.1 seconds at the start and 3.2 seconds at the end, so the app didn't slow down over time. This ran on simulated input, not live EEG.

OSCAR on real EEG: OSCAR is g.tec's artifact removal (cleaning out noise from blinks and muscle movement). We measured it on all five of g.tec's recorded people. The biggest blink and movement swings got 14 to 65% smaller while the rest of the signal barely changed, and classification stayed the same or improved, with one person going from 0.72 to 0.81. We also found something we didn't expect. OSCAR delays the signal by about a third of a second, but g.Pype doesn't shift the flash markers to match. Because of this, the classifier ends up looking at the wrong part of the response after each flash, which can cost up to 0.14 accuracy. We documented how to handle it, and it is something the live headset path will have to check.

A last-minute voice bug

About half an hour before the deadline, we found that some fresh spoken lines were silent on the judging laptop. Qt's audio player reported the clips as playing, so the app thought everything had been said, but nothing came out of the speakers. In an app that speaks for someone, that is a serious problem. The wearer would confirm a reply, the screen would say it was spoken, and the person they're talking to would never hear it. We switched clip playback to the Windows WAV player and added tests that cover both players.

Smaller things

  • Restart key: Between judges, pressing R brings back a fresh first question from wherever the app is, without saying anything. It uses the same rules as a normal cancel, so a brain decision still in progress from before the restart is thrown away instead of picking something on the new question.
  • Team briefing: We wrote one page every teammate read before judging. It covers what is real and what is scripted, the numbers to know, and straight answers to the questions judges were likely to ask, like "Is this live?" and "Is the choice faked?" It also says to never call anything live unless the screen says Live EEG.

Where things stand

Our Devpost submission is in. The official submission for the DEV writing challenge will come once the hackathon is over. For anyone reading the repo, we have tried to keep it honest about what we actually tested. The EEG and the classifier's picks in the demo are real, recorded by g.tec on five people. Which card counts as "looked at" is scripted, the eye-closure confirm is simulated, and the live headset path has only passed on simulated signals. We never got to run Signal2Speech on a live wearer, and that is the first thing we want to do once we have a g.tec headset.

Repo: https://github.com/Order-of-the-Golden-Eagles/Signal2Speech

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.