My replacement hardware (so far) for VPE

I’ve been experimenting a lot, 3D printing a lot, trying different speakers, trying linux vs esphome. I’d like to offer a point in time snapshot that is fairly easy to make, and works pretty well including both mic’s and speakers. On the audio output side it’s better than a google home mini. On the mic side it’s more sensitive than a google mini, but less discerning if there is competing noise in the room notably TV voices. But it’s not awful, especially if you add an automation in HA to mute the TV when it hears the wake word.

It is not cheap, exactly, but it doesn’t break the bank.

The main part is a Seeed Studio reSpeaker XVF3800 with ESP32-S3 (the round one not the linear one I think is called plus). About $70 us.

That does not come with a speaker, and I paired it with this: Speaker on Amazon

There are a lot of smaller speakers, and I built a couple with them, but a little more “umph” helped a lot. That’s about $15.

What helped even more was a speaker “cabinet” I 3D printed and stuffed with polyfill. The result gives a more more faithful tone from it, and disperses it around the room. 3D printed needed and some design skills if you want to change, but about $3 in filament give or take.

The design looks like this (cross section). The speaker goes into the larger chamber facing down. Down-facing also works best with the noise cancellation built into the reSpeaker. The speaker goes on top of that top ring (and save the shipping circular foam to get a bit of padding under it). The cutouts are for USB connector and mute button. In the side view shot you can get the idea. The cutout showing here on the front doesn’t have a USB plug as that reSpeaker is modified, but the normal ones come with a USB on front and back (as seen from the edge), one for the mic array, one for the ESP32.

This mounting exposes the top light ring which gives useful feedback on progress – it points to the source of voice (indicating its “beam forming” for noise cancellation in other directions is working), and it has various indicators of thinking and responses, and failure modes. A right angle USB C works nicely to power it.

It’s physically large, about like a Google Home (the original non-mini just called "home), and has similar speaker volume.

Basically for a bit under $100 I get something about like a Google Home (non-mini), not quite the voice recognition (yet, software is improving), and all local control.

The case is in Fusion if anyone wants the model (and I can figure out how to attach it here) you are welcome. It’s fully parameterized so with some measurements you could redesign for a different speaker (well, smaller, if you go much better you need to change how it holds the puck). On a P1S it’s about a 4-5 hour print with PLA and standard quality.

For software I tried linux (on a raspberry pi, not the esp32) and that worked well with the standard Home Assistant (experimental) code. That did not control some aspects of the reSpeaker (locking beam forming for example), but was quicker at wake word recognition. The esp32 is much more convenient (well, no separate rPi box) and does lock beam forming. I am using formatBCE’s github code for the software into which he put massive effort and it’s quite good.

Note that Future proof’s Satellite 1.1 also has a 4 mic array, but as of this writing it can only use 2 of them. So other companies are working on mic arrays for better voice, but Seeed seems a step ahead. Without the esp32 (or with the firmware that does not use it even if present), this is a standalone USB mic so any voice satellite software that accepts a USB mic (like the linux I mentioned) works with it. The puck also has a 3.5mm audio out, but I used its jst plug which supports up to a 5w speaker without separate amp (plus the 3.5mm jack is on the edge and I wanted to come out of the bottom to the speaker).

this firmware supports 4 mic beamforming on the respeaker and sat1

nice little design you have there

I need to spend some time eventually working through just what “tater” is. I bumped into it a few times, and each time I started looking and there are so very many pieces I wasn’t even sure what would remain of Home Assistant’s pipeline (I don’t mean that as a negative, just that I haven’t put the work into understanding it).

It’s good to know the option is there. Any chance you might share an opinion how the mic performance on the reSpeaker with your firmware compares to Seeed’s firmware? Or do you use their mic related firmware and just provide the esp32 surrounding software as a satellite like formatBCE’s esphome version does?

I’m very pleased with my current sensitivity but not so much pulling one voice out of ambient noise e.g. TV. The other problem I really want to solve is that almost every command is heard by multiple satellites, and frequently the wrong one answers (due to random wifi delay being greater than speed-of-sound delays).

yeah formatBCE’s is basically the same, only difference is it uses ESPHome and its Home Assistant API. Tater is native ESP-IDF firmware with its own wake, audio, OTA, provisioning, and Tater/Home Assistant protocol. The microphone front end is broadly the same

formatBCE actually is the one that got me playing with the respeaker

how is the sound on the enclosure you made?

I’m really quite happy with it. The VPE in comparison is crap in terms of sound. It’s not home theater quality of course, but mono music played over it does not make me cringe. I’d say it is roughly on par with the Google Home (not the mini, the middle size one, if they even still sell them).

The speaker itself lying on the table was rather tinny – still probably better than the VPE, but not great. Put it inside a box like this and it’s much better. Much. I tried various sizes and spacing and filler and it seems more about getting a semi-air-tight box around it rather than specific size. And I do think the cone helps disperse the sound, though variations on angle and height also did not change much (my poor P1S printer cringes when I go into the room, I think).

But for a bit of filament and a $15 speaker, well worth it.

The other thing of note is I gave up on wake-word-sound (i.e. it making a sound to indicate it heard the wake word). Too often the next word was cut off. That means the only indication it heard is the LED light. Buried in a black stand the lights stand out, and I wanted something that did not look awful as I want to put them on tables and such where they can be seen for functional reasons. FWIW the linux version was better at that – it processed the wake word about 150-200ms faster than the esp32 (it was a Pi 4B) which largely fixed the missing word. But at the cost of a $100 pi and need to put it somewhere (and it also gave up locking the beam forming).

As to audio quality:

It occurred to me I have all these and can set them side by side. Apparently I can’t post an audio file here, but I can post a youtube link. These are recorded with a Pixel 10 XL’s regular camera and regular phone mic.

The first is Google Home (it starts a bit late as I couldn’t record me activating it with my google phone for obvious reasons). The volume is not quite comparable as I realized after the fact that the google mini was set at 100% volume, the VPE and reSpeaker that came next are at 89%. So listen for quality not loudness.

https://youtu.be/87Q7P37T3Ko

(Any ads are youtube themselves, I am not a paid creator, so apologies if they show any).

And yes, the reSpeaker missed my wake word at first, not sure why, that’s not very common, but I was too lazy to do it all again. Besides, that’s the nature of the beast with these things.

PS. These will have “Okay, Nabu” and “Hey Mycroft” in them so mute your satellites if relevant.