Skip to content

Commit 6f69811

Browse files
author
Danielle Jenkins
committed
Add minimum transcription duration
1 parent 30207ef commit 6f69811

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/main.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,14 +284,25 @@ async fn transcribe_audio(audio_data: Vec<u8>, config: &OpenAiConfig, rate_limit
284284
Ok(transcription.text)
285285
}
286286

287-
288287
async fn process_audio(
289288
audio_data: Vec<u8>,
290289
config: &Config,
291290
socket: &UdpSocket,
292291
rate_limiter: &mut RateLimiter,
293292
typing_indicator: &TypingIndicator,
294293
) -> Result<(), Box<dyn Error>> {
294+
// Calculate audio duration
295+
let audio_duration = calculate_audio_duration(&audio_data)?;
296+
297+
// Check if audio is shorter than the minimum transcription duration
298+
let min_duration = Duration::from_secs_f32(config.audio.min_transcription_duration);
299+
if audio_duration < min_duration {
300+
println!("Audio too short ({:.2}s). Minimum duration is {:.2}s. Skipping transcription.",
301+
audio_duration.as_secs_f32(), min_duration.as_secs_f32());
302+
typing_indicator.set_typing(false).await;
303+
return Ok(());
304+
}
305+
295306
let transcription = transcribe_audio(audio_data, &config.openai, rate_limiter).await?;
296307
println!("Transcription: {}", transcription);
297308

@@ -311,6 +322,13 @@ async fn process_audio(
311322
Ok(())
312323
}
313324

325+
fn calculate_audio_duration(audio_data: &[u8]) -> Result<Duration, Box<dyn Error>> {
326+
let reader = hound::WavReader::new(Cursor::new(audio_data))?;
327+
let spec = reader.spec();
328+
let duration = Duration::from_secs_f32(reader.duration() as f32 / spec.sample_rate as f32);
329+
Ok(duration)
330+
}
331+
314332
enum AudioEvent {
315333
StartRecording,
316334
StopRecording,
@@ -338,7 +356,6 @@ fn start_audio_recording(
338356
let audio_data_clone = Arc::clone(&audio_data);
339357

340358
let tx_clone = tx.clone();
341-
let config_clone = config.clone();
342359

343360
let mut noise_gate = NoiseGate::new(
344361
config.audio.noise_gate_threshold,

0 commit comments

Comments
 (0)