basic_usage/
basic_usage.rs

1use aic_sdk::{Model, ModelType, Parameter};
2use std::env;
3
4const NUM_CHANNELS: u16 = 2;
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7    // Display library version
8    println!("ai-coustics SDK version: {}", aic_sdk::get_version());
9
10    // Get license key from environment variable
11    let license = env::var("AIC_SDK_LICENSE").map_err(|_| {
12        eprintln!("Error: AIC_SDK_LICENSE environment variable not set");
13        eprintln!("Please set it with: export AIC_SDK_LICENSE=your_license_key");
14        std::io::Error::new(std::io::ErrorKind::NotFound, "AIC_SDK_LICENSE not set")
15    })?;
16
17    // Model creation with license key
18    let mut model = Model::new(ModelType::QuailS48, &license)?;
19    println!("Model created successfully");
20
21    // Get optimal settings
22    let optimal_sample_rate = model.optimal_sample_rate()?;
23    println!("Optimal sample rate: {} Hz", optimal_sample_rate);
24
25    let optimal_num_frames = model.optimal_num_frames(optimal_sample_rate)?;
26    println!("Optimal frame count: {}", optimal_num_frames);
27
28    // Initialize with basic audio config
29    model.initialize(optimal_sample_rate, NUM_CHANNELS, optimal_num_frames, true)?;
30    println!("Model initialized successfully");
31
32    // Get output delay
33    let delay = model.output_delay()?;
34    println!("Output delay: {} samples", delay);
35
36    // Test parameter setting and getting
37    model.set_parameter(Parameter::EnhancementLevel, 0.7)?;
38    println!("Parameter set successfully");
39
40    let enhancement_level = model.get_parameter(Parameter::EnhancementLevel)?;
41    println!("Enhancement level: {}", enhancement_level);
42
43    // Create minimal test audio - planar format (separate buffers for each channel)
44    let mut audio_buffer_left = vec![0.0f32; optimal_num_frames];
45    let mut audio_buffer_right = vec![0.0f32; optimal_num_frames];
46
47    // Create mutable references for planar processing
48    let mut audio_planar = vec![
49        audio_buffer_left.as_mut_slice(),
50        audio_buffer_right.as_mut_slice(),
51    ];
52
53    // Test planar audio processing
54    match model.process_planar(&mut audio_planar) {
55        Ok(()) => println!("Planar processing succeeded"),
56        Err(e) => println!("Planar processing failed: {}", e),
57    }
58
59    // Create interleaved test audio (all channels mixed together)
60    let mut audio_buffer_interleaved = vec![0.0f32; NUM_CHANNELS as usize * optimal_num_frames];
61
62    // Test interleaved audio processing
63    match model.process_interleaved(
64        &mut audio_buffer_interleaved,
65        NUM_CHANNELS,
66        optimal_num_frames,
67    ) {
68        Ok(()) => println!("Interleaved processing succeeded"),
69        Err(e) => println!("Interleaved processing failed: {}", e),
70    }
71
72    // Test reset functionality
73    match model.reset() {
74        Ok(()) => println!("Model reset succeeded"),
75        Err(e) => println!("Model reset failed: {}", e),
76    }
77
78    // Clean up is handled automatically by Rust's Drop trait
79    println!("All tests completed");
80
81    Ok(())
82}