pub struct TranscriptionService { /* private fields */ }Expand description
The main transcription service.
This service manages the entire transcription pipeline: capturing audio from the system’s default input device, chunking it into segments, sending those segments to an OpenAI-compatible transcription API, and emitting events with the results.
§Examples
§Basic usage
use vtt_rs::{TranscriptionService, Config};
let config = Config::default();
let api_key = std::env::var("OPENAI_API_KEY")?;
let mut service = TranscriptionService::new(config, api_key)?;
let (mut receiver, _stream) = service.start().await?;
// Process events...§With custom configuration
use vtt_rs::{TranscriptionService, Config};
let config = Config {
chunk_duration_secs: 3,
model: "whisper-1".to_string(),
endpoint: "https://api.openai.com/v1/audio/transcriptions".to_string(),
out_file: None,
};
let api_key = std::env::var("OPENAI_API_KEY")?;
let mut service = TranscriptionService::new(config, api_key)?;Implementations§
Source§impl TranscriptionService
impl TranscriptionService
Sourcepub fn new(config: Config, api_key: String) -> Result<Self>
pub fn new(config: Config, api_key: String) -> Result<Self>
Creates a new transcription service with the specified configuration and API key.
This doesn’t start audio capture yet; call start to begin
transcription.
§Examples
use vtt_rs::{TranscriptionService, Config};
let config = Config::default();
let api_key = std::env::var("OPENAI_API_KEY")?;
let service = TranscriptionService::new(config, api_key)?;§Errors
Currently always succeeds, but returns Result for future extensibility.
Sourcepub fn new_no_api(config: Config) -> Result<Self>
pub fn new_no_api(config: Config) -> Result<Self>
Creates a new transcription service for remote APIs without an API key.
This is useful when connecting to a local OpenAI-compatible server that does not require authentication (e.g. a self-hosted MLX server running a Parakeet model).
Sourcepub fn new_on_device(config: Config) -> Result<Self>
pub fn new_on_device(config: Config) -> Result<Self>
Creates a transcription service configured for on-device inference.
Sourcepub async fn start(
&mut self,
) -> Result<(UnboundedReceiver<TranscriptionEvent>, Stream)>
pub async fn start( &mut self, ) -> Result<(UnboundedReceiver<TranscriptionEvent>, Stream)>
Starts the transcription service and returns a receiver for events.
This method begins capturing audio from the default input device and spawns
background tasks to process and transcribe audio chunks. Events are delivered
through the returned [UnboundedReceiver<TranscriptionEvent>].
The returned [Stream] must be kept alive for audio capture to continue.
Dropping either the receiver or the stream will stop transcription.
§Examples
use vtt_rs::{TranscriptionService, Config, TranscriptionEvent};
let config = Config::default();
let api_key = std::env::var("OPENAI_API_KEY")?;
let mut service = TranscriptionService::new(config, api_key)?;
let (mut receiver, _stream) = service.start().await?;
// Process transcription events
while let Some(event) = receiver.recv().await {
match event {
TranscriptionEvent::Transcription { chunk_id, text } => {
println!("Chunk {}: {}", chunk_id, text);
}
TranscriptionEvent::Error { chunk_id, error } => {
eprintln!("Error in chunk {}: {}", chunk_id, error);
}
}
}§Errors
Returns an error if:
- No default audio input device is available
- The audio device cannot be configured
- The configured output file cannot be opened or created
§Panics
May panic if the audio system is not properly initialized (rare).
Auto Trait Implementations§
impl Freeze for TranscriptionService
impl RefUnwindSafe for TranscriptionService
impl Send for TranscriptionService
impl Sync for TranscriptionService
impl Unpin for TranscriptionService
impl UnwindSafe for TranscriptionService
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more