diff --git a/src/audio.rs b/src/audio.rs index ece3f4f..9f48e03 100644 --- a/src/audio.rs +++ b/src/audio.rs @@ -113,8 +113,8 @@ pub async fn start_audio_input() -> (AudioInputControl, MicStream, TtsOutStream, let config = AudioConfig::load(); let (mic_audio_sink, mic_audio_src) = mpsc::channel(32); - let (tts_audio_sink, mut tts_audio_src) = mpsc::channel(32); let (sfx_audio_sink, mut sfx_audio_src) = mpsc::channel(32); + let (tts_audio_sink, mut tts_audio_src) = mpsc::channel(32); let (volume_sink, volume_src) = watch::channel(0.); let (client, _status) = jack::Client::new("Eva-Cohost", ClientOptions::default() | ClientOptions::SESSION_ID).unwrap(); @@ -123,22 +123,28 @@ pub async fn start_audio_input() -> (AudioInputControl, MicStream, TtsOutStream, let mut sfx_port = client.register_port("sfx-out", AudioOut::default()).unwrap(); let rate = client.sample_rate(); - let mic_name = mic_port.name().unwrap(); - let tts_name = tts_port.name().unwrap(); - - for port in &config.mic_in_connections { - if let Ok(_) = client.connect_ports_by_name(&port, &mic_name) { - log::info!("Connected mic to {}", port); - } else { - log::warn!("Failed to reconnect mic to {}.", port); + for (port, connections) in [ + (&tts_port, &config.tts_out_connections), + (&sfx_port, &config.sfx_out_connections), + ] { + for peer_name in connections { + if let Some(peer) = client.port_by_name(peer_name) { + if let Err(err) = client.connect_ports(port, &peer) { + log::error!("Failed to reconnect {} to {}", port.name().unwrap(), peer_name); + } else { + log::info!("Reconnected {} to {}", port.name().unwrap(), peer_name); + } + } } } - for port in &config.tts_out_connections { - if let Ok(_) = client.connect_ports_by_name(&tts_name, &port) { - log::info!("Connected TTS output to {}", port); - } else { - log::warn!("Failed to reconnect TTS output to {}.", port); + for (port, connections) in [ + (&mic_port, &config.mic_in_connections) + ] { + for peer_name in connections { + if let Some(peer) = client.port_by_name(peer_name) { + client.connect_ports(&peer, port).unwrap(); + } } } @@ -195,23 +201,6 @@ pub async fn start_audio_input() -> (AudioInputControl, MicStream, TtsOutStream, } } - /*if let Ok(mut next_outbuf) = tts_audio_src.try_recv() { - tts_output_buf.append(&mut next_outbuf); - } - - if tts_port.connected_count().unwrap() > 0 && !tts_output_buf.is_empty() { - let outbuf = tts_port.as_mut_slice(scope); - let mut next_segment: Vec = tts_output_buf.drain(0..(outbuf.len()).min(tts_output_buf.len())).collect(); - let underrun = outbuf.len() - next_segment.len(); - if underrun > 0 { - for _ in 0..underrun { - next_segment.push(0.); - } - } - - outbuf.copy_from_slice(&next_segment); - }*/ - jack::Control::Continue });