audio_state taps the microphone and the speaker monitor with parec and publishes levels, a speaking/listening/quiet activity, and trigger-locked waveform windows; audio itself stays out of ROS. The activity detector calibrates its noise floor at start-up and absorbs steady noise, so a room at -43 dBFS does not read as "listening" forever, and it ignores the mic while the robot speaks. The face arbitrates the state it shows: sleeping (agent side only, so room sound never wakes a face that means "no agent connected") > speaking > listening > thinking > idle, and draws the mouth from the real samples while fresh scope data exists, auto-scaled so a quiet voice is still visible. Checked: a tone played to the sink shows as `speaking` with the mic ignored. The microphone-to-mouth path with a live voice is not yet confirmed. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
25 lines
701 B
Python
25 lines
701 B
Python
from setuptools import find_packages, setup
|
|
|
|
package_name = 'hermes_audio'
|
|
|
|
setup(
|
|
name=package_name,
|
|
version='0.1.0',
|
|
packages=find_packages(exclude=['test']),
|
|
data_files=[
|
|
('share/ament_index/resource_index/packages', ['resource/' + package_name]),
|
|
('share/' + package_name, ['package.xml']),
|
|
],
|
|
install_requires=['setuptools'],
|
|
zip_safe=True,
|
|
maintainer='K. Isom',
|
|
maintainer_email='noreply@example.com',
|
|
description='Audio levels and speaking/listening state for the Hermes robot.',
|
|
license='UNLICENSED',
|
|
entry_points={
|
|
'console_scripts': [
|
|
'audio_state = hermes_audio.audio_state_node:main',
|
|
],
|
|
},
|
|
)
|