Skip to main content

active_call/media/
asr_processor.rs

1use super::processor::Processor;
2use crate::{media::AudioFrame, media::Samples, transcription::TranscriptionClient};
3use anyhow::Result;
4
5pub struct AsrProcessor {
6    pub asr_client: Box<dyn TranscriptionClient>,
7}
8
9impl AsrProcessor {}
10
11impl Processor for AsrProcessor {
12    fn process_frame(&mut self, frame: &mut AudioFrame) -> Result<()> {
13        match &frame.samples {
14            Samples::PCM { samples } => {
15                if !samples.is_empty() {
16                    self.asr_client
17                        .send_audio(&samples, frame.src_packet.as_ref())?;
18                } else {
19                    tracing::debug!(track_id = %frame.track_id, "AsrProcessor: empty PCM samples");
20                }
21            }
22            _ => {
23                tracing::debug!(track_id = %frame.track_id, "AsrProcessor: skipping non-PCM frame");
24            }
25        }
26        Ok(())
27    }
28}