Krunal ChavdaReachy Mini Not Speaking in Reachy Mini Conversation App— GStreamer DeviceMonitor Fails...
Make sure to check that you have not run out OpenAI api credits or reachy is not on low battery. Sometimes both of those issues lead him to act differently.
Your Reachy Mini Wireless robot connects to the OpenAI Realtime API successfully, dances, plays emotions, and calls tools autonomously — but it never speaks or responds to your voice. The robot appears to be "talking to itself," cycling through idle behaviors like do_nothing reason=contemplating existence with zero speech interaction.
The system logs show the conversation app launching cleanly with the session connected, but two critical warnings buried in the startup output reveal the root cause:
WARNING reachy_mini.media.audio_gstreamer:470 | No Source audio card found.
WARNING reachy_mini.media.audio_gstreamer:470 | No Sink audio card found.
No Source means no microphone input. No Sink means no speaker output. The Realtime API session is alive on the control channel, but no audio flows in either direction — so the model never hears you and never generates speech.
Here's what makes this bug hard to diagnose: the audio hardware works perfectly at the OS level.
Running arecord -l and aplay -l shows "Reachy Mini Audio" as card 0 with both capture and playback subdevices. Recording and playing back audio via ALSA command-line tools works fine:
arecord -d 3 -f S16_LE -r 16000 /tmp/test.wav
aplay /tmp/test.wav
GStreamer can also use the ALSA device directly with no issues:
gst-launch-1.0 alsasrc device=hw:0 num-buffers=10 ! fakesink
So the hardware is fine, ALSA is fine, and GStreamer can talk to the card. The problem is specifically in how the Reachy Mini SDK discovers the audio device.
The SDK's audio backend (reachy_mini/media/audio_gstreamer.py) uses GStreamer's Gst.DeviceMonitor to enumerate audio devices. The _get_audio_device() method creates a monitor, filters for Audio/Source or Audio/Sink, and then iterates through discovered devices looking for one named "Reachy Mini Audio."
The detection logic tries multiple property fields in order:
node.name — for PipeWiredevice.api / device.id — for Windows (WASAPI)unique-id — for macOSudev.id + device.profile.name — for Linux PulseAudiodevice.string — for Linux ALSA fallbackThe problem: GStreamer's DeviceMonitor returns zero devices when neither PipeWire nor PulseAudio is running. The Reachy Mini Wireless runs a minimal Debian installation on a Raspberry Pi 4 with pure ALSA — no audio server layer. When the monitor finds nothing to enumerate, the method falls through to the warning log and returns None, leaving the conversation app with no audio capability.
You can confirm this by running a quick Python check on the robot:
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
monitor = Gst.DeviceMonitor()
monitor.add_filter('Audio/Source')
monitor.start()
print(monitor.get_devices()) # Returns empty list
monitor.stop()
The fix is a two-line patch to audio_gstreamer.py that adds an ALSA hardware fallback when the DeviceMonitor fails to find any devices.
File: /venvs/apps_venv/lib/python3.12/site-packages/reachy_mini/media/audio_gstreamer.py
Line ~470 — find:
self.logger.warning(f"No {device_type} audio card found.")
Replace with:
self.logger.warning(f"No {device_type} audio card found via DeviceMonitor, falling back to ALSA hw:0")
return "hw:0"
This tells the SDK to use the first ALSA hardware device directly when the GStreamer DeviceMonitor can't enumerate devices. Since the Reachy Mini Audio board is always card 0, hw:0 is the correct device identifier.
ssh pollen@reachy-mini.local
# Password: root
cp /venvs/apps_venv/lib/python3.12/site-packages/reachy_mini/media/audio_gstreamer.py \
/venvs/apps_venv/lib/python3.12/site-packages/reachy_mini/media/audio_gstreamer.py.bak
nano /venvs/apps_venv/lib/python3.12/site-packages/reachy_mini/media/audio_gstreamer.py
Jump to line 470 (Ctrl+Shift+_, type 470, Enter). Replace the warning line as shown above.
Save (Ctrl+O, Enter) and exit (Ctrl+X).
Restart the daemon and conversation app:
sudo systemctl restart reachy-mini-daemon.service
sleep 10
reachy-mini-conversation-app --gradio --verbose
No Source audio card found via DeviceMonitor, falling back to ALSA hw:0
No Sink audio card found via DeviceMonitor, falling back to ALSA hw:0
Instead of the previous dead-end warning, the app now has a valid audio device and can send/receive audio through the OpenAI Realtime API.
You likely have this issue if all of the following are true:
arecord -l shows the "Reachy Mini Audio" devicepactl returns "command not found" (no PulseAudio)systemctl --user status pipewire returns "not found" (no PipeWire)hw:0). If you have additional USB audio devices connected, the card number may differ — check with cat /proc/asound/cards./venvs/apps_venv/)