Skip to content

Commit 9b9ebe7

Browse files
committed
Improve logging in Porcupine launch
1 parent 3c6dc77 commit 9b9ebe7

File tree

1 file changed

+66
-10
lines changed

1 file changed

+66
-10
lines changed

coffee_ws/src/coffee_voice_agent/scripts/agents/coffee_barista_agent.py

Lines changed: 66 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,34 +285,90 @@ async def start_wake_word_detection(self, room):
285285
logger.info("No Porcupine access key found, skipping wake word detection")
286286
return
287287

288+
logger.info("🎤 Starting wake word detection initialization...")
289+
logger.info(f"🔑 Porcupine access key: {'***' + self.porcupine_access_key[-4:] if len(self.porcupine_access_key) > 4 else 'SHORT_KEY'}")
290+
288291
try:
292+
# Check available audio devices first
293+
logger.info("🎤 Checking available audio devices...")
294+
try:
295+
available_devices = PvRecorder.get_available_devices()
296+
logger.info(f"🎤 Available audio devices: {available_devices}")
297+
if not available_devices:
298+
logger.warning("⚠️ No audio devices found!")
299+
except Exception as device_error:
300+
logger.error(f"❌ Failed to get audio devices: {device_error}")
301+
289302
# Initialize Porcupine with "hey barista" wake word
290-
self.porcupine = pvporcupine.create(
291-
access_key=self.porcupine_access_key,
292-
keywords=["hey barista"]
293-
)
303+
logger.info("🎤 Initializing Porcupine wake word engine...")
304+
try:
305+
# Try with a built-in wake word first for testing
306+
# Available built-in keywords: ["alexa", "americano", "blueberry", "bumblebee",
307+
# "computer", "grapefruit", "grasshopper", "hey google", "hey siri", "jarvis",
308+
# "ok google", "picovoice", "porcupine", "terminator"]
309+
self.porcupine = pvporcupine.create(
310+
access_key=self.porcupine_access_key,
311+
keywords=["hey barista"] # Using built-in wake word for testing
312+
)
313+
logger.info("✅ Porcupine initialized successfully")
314+
logger.info(f"🎤 Frame length: {self.porcupine.frame_length}")
315+
logger.info(f"🎤 Sample rate: {self.porcupine.sample_rate}")
316+
except Exception as porcupine_error:
317+
logger.error(f"❌ Porcupine initialization failed: {porcupine_error}")
318+
logger.error(f"❌ Error type: {type(porcupine_error).__name__}")
319+
raise
294320

295321
# Initialize recorder
296-
self.recorder = PvRecorder(
297-
device_index=-1, # default device
298-
frame_length=self.porcupine.frame_length
299-
)
322+
logger.info("🎤 Initializing audio recorder...")
323+
try:
324+
self.recorder = PvRecorder(
325+
device_index=-1, # default device
326+
frame_length=self.porcupine.frame_length
327+
)
328+
logger.info("✅ Audio recorder initialized successfully")
329+
except Exception as recorder_error:
330+
logger.error(f"❌ Audio recorder initialization failed: {recorder_error}")
331+
logger.error(f"❌ Error type: {type(recorder_error).__name__}")
332+
# Clean up porcupine if recorder fails
333+
if self.porcupine:
334+
self.porcupine.delete()
335+
self.porcupine = None
336+
raise
300337

301338
self.wake_word_active = True
302339
self.event_loop = asyncio.get_event_loop()
303340

304341
# Start wake word detection in separate thread
342+
logger.info("🎤 Starting wake word detection thread...")
305343
self.wake_word_thread = threading.Thread(
306344
target=self._wake_word_detection_loop,
307345
args=(room,),
308346
daemon=True
309347
)
310348
self.wake_word_thread.start()
311349

312-
logger.info("Wake word detection started - listening for 'hey barista'")
350+
logger.info("Wake word detection started - listening for 'hey barista'")
313351

314352
except Exception as e:
315-
logger.error(f"Failed to start wake word detection: {e}")
353+
logger.error(f"❌ Failed to start wake word detection: {e}")
354+
logger.error(f"❌ Error type: {type(e).__name__}")
355+
import traceback
356+
logger.error(f"❌ Full traceback:\n{traceback.format_exc()}")
357+
358+
# Clean up any partially initialized resources
359+
if hasattr(self, 'recorder') and self.recorder:
360+
try:
361+
self.recorder.delete()
362+
except:
363+
pass
364+
self.recorder = None
365+
366+
if hasattr(self, 'porcupine') and self.porcupine:
367+
try:
368+
self.porcupine.delete()
369+
except:
370+
pass
371+
self.porcupine = None
316372

317373
def _wake_word_detection_loop(self, room):
318374
"""Wake word detection loop running in separate thread"""

0 commit comments

Comments
 (0)