@@ -19,26 +19,38 @@ def __init__(self):
1919 super ().__init__ ('tts_node' )
2020 self .get_logger ().info ("TTS node initialized" )
2121
22+ # Declare parameters
23+ self .declare_parameter ('voice_id' , "KTPVrSVAEUSJRClDzBw7" ) # Default voice ID
24+ self .declare_parameter ('model_id' , "eleven_multilingual_v2" ) # Default model
25+ self .declare_parameter ('api_key' , '' ) # Empty by default, will check env var
26+ self .declare_parameter ('cooldown_duration' , 1.0 ) # Cooldown in seconds
27+ self .declare_parameter ('output_format' , 'pcm_24000' ) # Audio output format
28+
29+ # Get parameters
30+ self .voice_id = self .get_parameter ('voice_id' ).value
31+ self .model_id = self .get_parameter ('model_id' ).value
32+ self .COOLDOWN_DURATION = self .get_parameter ('cooldown_duration' ).value
33+ self .output_format = self .get_parameter ('output_format' ).value
34+
2235 self .service_group = MutuallyExclusiveCallbackGroup ()
2336 self .timer_group = MutuallyExclusiveCallbackGroup ()
2437
2538 # Cooldown settings
2639 self .cooldown_timer = None
2740 self .in_cooldown = False
28- self .COOLDOWN_DURATION = 1.0 # seconds
2941
3042 # Initialize Eleven Labs SDK client
31- api_key = os .environ .get ('ELEVEN_LABS_API_KEY' )
43+ api_key = self .get_parameter ('api_key' ).value
44+ if not api_key :
45+ api_key = os .environ .get ('ELEVEN_LABS_API_KEY' )
46+
3247 if not api_key :
33- self .get_logger ().error ("ELEVEN_LABS_API_KEY environment variable not set" )
34- raise ValueError ("ELEVEN_LABS_API_KEY environment variable is required, refer to the README for more information" )
48+ self .get_logger ().error ("ELEVEN_LABS_API_KEY not set in parameter or environment variable " )
49+ raise ValueError ("ELEVEN_LABS_API_KEY is required. Set it as a ROS2 parameter or environment variable. Refer to the README for more information" )
3550
3651 self .eleven_labs_client = ElevenLabs (api_key = api_key )
3752
38- self .voice_id = "KTPVrSVAEUSJRClDzBw7" # https://elevenlabs.io/app/voice-library/collections/HXn5AetPOJgAHd2D60mP?voiceId=KTPVrSVAEUSJRClDzBw7
39- self .model_id = "eleven_multilingual_v2"
40-
41- self .get_logger ().info ("Eleven Labs SDK initialized" )
53+ self .get_logger ().info (f"Eleven Labs SDK initialized with voice: { self .voice_id } , model: { self .model_id } " )
4254
4355 self .audio_player = pyaudio .PyAudio ()
4456
@@ -75,7 +87,11 @@ def __init__(self):
7587 def publish_status (self ):
7688 """Publish current status information"""
7789 status = {
78- "health" : "ok"
90+ "health" : "ok" ,
91+ "voice_id" : self .voice_id ,
92+ "model_id" : self .model_id ,
93+ "is_playing" : self .is_playing ,
94+ "in_cooldown" : self .in_cooldown
7995 }
8096
8197 msg = String ()
@@ -120,7 +136,7 @@ def stream_audio_playback(self, text):
120136
121137 # Request PCM audio format (raw audio data)
122138 # pcm_16000 = 16kHz sample rate, pcm_24000 = 24kHz sample rate
123- output_format = "pcm_24000"
139+ output_format = self . output_format
124140
125141 self .get_logger ().info (f"Starting audio streaming with format: { output_format } " )
126142
0 commit comments