Improvements
- Increased the maximum speech hold duration of the VAD from 20 to 100x the model’s window size.
Fixes
- Fixed an issue causing the VAD’s state to be reset on every
aic_processor_process_*call.
Breaking changes
AIC_ERROR_CODE_MODEL_NOT_INITIALIZEDhas been renamed toAIC_ERROR_CODE_PROCESSOR_NOT_INITIALIZED.
Fixes
- Fixed an issue allowing users to change processor parameters with certain models
This release comes with a number of new features and several breaking changes. Most notably, the C library does no longer include any models, which significantly reduces the library’s binary size. The models are now available separately for download at https://artifacts.ai-coustics.io.New license keys required: License keys previously generated in the developer portal will no longer work. New license keys must be generated.Model naming changes: Quail-STT models are now called “Quail” - These models are optimized for human-to-machine enhancement (e.g., Speech-to-Text (STT) applications). Quail models are now called “Sparrow” - These models are optimized for human-to-human enhancement (e.g., voice calls, conferencing). This naming change clarifies the distinction between STT-focused models and human-to-human communication modelMajor architectural changes: The API has been restructured to separate model data from processing instances. What was previously called
AicModel (which handled both model data and processing) has been split into:AicModel: Now represents only the ML model data loaded from files or memoryAicProcessor: New type that performs the actual audio processing using a model- Multiple processors can share the same model, allowing efficient resource usage across streams
- Model instances are reference-counted internally;
aic_model_destroycan be called immediately after creating processors, and the model will be freed automatically when the last processor using it is destroyed - To change parameters, reset the processor and get the output delay, a processor context must now be created via
aic_processor_context_create. This context can be freely moved between threads
New features
- Models now load from files via
aic_model_create_from_file. - Models can also be created from in-memory buffers with
aic_model_create_from_buffer. - Added new
aic_model_get_idAPI to query the id of a model. - A single model handle can be shared across multiple processors.
- Added processor handles with
aic_processor_createso each stream can be initialized independently from a shared model while sharing weights. - Added
aic_get_compatible_model_versionto query the required model version for this SDK. - Added context-based APIs for thread-safe control operations:
aic_processor_context_createandaic_processor_context_destroyfor processor context managementaic_vad_context_createandaic_vad_context_destroyfor VAD context management
- Model query APIs moved to model handles:
aic_model_get_optimal_sample_rate- gets optimal sample rate for a modelaic_model_get_optimal_num_frames- gets optimal frame count for a model at given sample rate
- Added new error codes for model loading:
AIC_ERROR_CODE_MODEL_INVALIDAIC_ERROR_CODE_MODEL_VERSION_UNSUPPORTEDAIC_ERROR_CODE_MODEL_FILE_PATH_INVALIDAIC_ERROR_CODE_FILE_SYSTEM_ERRORAIC_ERROR_CODE_MODEL_DATA_UNALIGNED
Breaking changes
- License keys previously generated in the developer portal will no longer work. New license keys have to be generated.
- Existing
aic_model_*processing and configuration APIs have been renamed toaic_processor_*. - Removed
AicModelTypeenum; callers must supply a model file or aligned buffer instead of selecting a built-in model. - License keys are now provided to
aic_processor_createrather than model creation. - Renamed
AicEnhancementParametertoAicProcessorParameter(AIC_PROCESSOR_PARAMETER_*). - VAD APIs now use
AicVadContexthandles and bind to processor handles instead of model handles:aic_vad_create→aic_vad_context_create(takesconst AicProcessor*instead ofAicModel*)aic_vad_destroy→aic_vad_context_destroyaic_vad_is_speech_detected→aic_vad_context_is_speech_detected(takesconst AicVadContext*)aic_vad_get_parameter→aic_vad_context_get_parameter(takesconst AicVadContext*)aic_vad_set_parameter→aic_vad_context_set_parameter(takesconst AicVadContext*)
- Processor control APIs now take
AicProcessorContexthandles created viaaic_processor_context_create:aic_model_reset→aic_processor_context_reset(takesconst AicProcessorContext*)aic_model_get_parameter→aic_processor_context_get_parameter(takesconst AicProcessorContext*)aic_model_set_parameter→aic_processor_context_set_parameter(takesconst AicProcessorContext*)aic_get_output_delay→aic_processor_context_get_output_delay(takesconst AicProcessorContext*)
- Model query APIs moved to model methods:
aic_get_optimal_sample_rate→aic_model_get_optimal_sample_rateaic_get_optimal_num_frames→aic_model_get_optimal_num_frames
Fixes
- Improved thread safety.
- Fixed an issue where the allocated size for an FFT operation could be incorrect, leading to a crash.
New features
- Added new VAD parameter
AIC_VAD_PARAMETER_MINIMUM_SPEECH_DURATIONused to control for how long speech needs to be present in the audio signal before the VAD considers it speech.
Breaking changes
- Replaced VAD parameter
AIC_VAD_PARAMETER_LOOKBACK_BUFFER_SIZEwithAIC_VAD_PARAMETER_SPEECH_HOLD_DURATION, used to control for how long the VAD continues to detect speech after the audio signal no longer contains speech.
New features
- Added new Quail Voice Focus STT model (
AIC_MODEL_TYPE_QUAIL_VF_STT_L16), purpose-built to isolate and elevate the foreground speaker while suppressing both interfering speech and background noise. - Added new variants of the Quail STT model:
AIC_MODEL_TYPE_QUAIL_STT_L8,AIC_MODEL_TYPE_QUAIL_STT_S16andAIC_MODEL_TYPE_QUAIL_STT_S8. - Added
aic_model_process_sequentialfor sequential channel data in a single buffer
Breaking changes
AIC_MODEL_TYPE_QUAIL_STTwas renamed toAIC_MODEL_TYPE_QUAIL_STT_L16aic_vad_createsignature changed: themodelparameter is no longerconst
Fixes
- VAD now works correctly when
AIC_ENHANCEMENT_PARAMETER_ENHANCEMENT_LEVELis set to 0 orAIC_ENHANCEMENT_PARAMETER_BYPASSis enabled (previously non-functional in these cases)
Features
- Quail STT (
AIC_MODEL_TYPE_QUAIL_STT): Our newest speech enhancement model is optimized for human-to-machine interaction (e.g., voice agents, speech-to-text). This model operates at a native sample rate of 16 kHz and uses fixed enhancement parameters that cannot be changed during runtime. The model is also compatible with our VAD.
Breaking Changes
- Removed
AIC_ENHANCEMENT_PARAMETER_NOISE_GATE_ENABLEas it is now a fixed part of our VAD. - Added new error code
AIC_ERROR_CODE_PARAMETER_FIXEDreturned when attempting to modify a parameter of a model with fixed parameters.
Fixes
- Fixed an issue where
aic_vad_is_speech_detectedalways returnedtruewhenAIC_VAD_PARAMETER_LOOKBACK_BUFFER_SIZEwas set to1.0.
Features
- Internal library patching: Static libraries are now patched internally to simplify usage from Rust, reducing integration complexity
- Windows ARM64 support: Added Windows ARM64 as a supported target platform
Breaking Changes
- Additional system library dependencies: On macOS and Windows, the following system libraries must now be linked:
- Windows:
Synchronizationandbcryptprimitives - macOS:
CoreFoundation
- Windows:
Features
- Self-Service Licenses: Starting with this release, you can use self-service licenses directly from our developer portal.
-
Usage-Based Telemetry: This release introduces a new telemetry feature that collects usage data, paving the way for future usage-based pricing models such as pay-per-minute billing.
- What we collect: We collect only the processing time used and some diagnostic data
- Privacy: We do not collect any information about your audio content. Your audio never leaves your device during our processing.
- Requirements: Requires a constant internet connection. If the SDK cannot be activated online, enhancement will stop after 10 seconds. If telemetry data cannot be sent, enhancement will stop after 5 minutes. When enhancement is stopped an error will be returned, the audio will be bypassed and the processing delay will be still applied to ensure an uninterrupted audio stream without discontinuities.
- Error Handling: When processing is bypassed because our backend cannot be reached or does not allow you to process, the process functions will return
AIC_ERROR_CODE_ENHANCEMENT_NOT_ALLOWED. Make sure to handle this error code in your implementation. - Offline Licenses: If you cannot provide a constant internet connection, please contact us to obtain a special offline license that does not require telemetry.
Breaking Changes
- Updated Error Codes: Renumbered and expanded error codes with additional license-related errors.
Old Error Codes
| Error Code | Value |
|---|---|
AIC_ERROR_CODE_SUCCESS | 0 |
AIC_ERROR_CODE_NULL_POINTER | 1 |
AIC_ERROR_CODE_LICENSE_INVALID | 2 |
AIC_ERROR_CODE_LICENSE_EXPIRED | 3 |
AIC_ERROR_CODE_UNSUPPORTED_AUDIO_CONFIG | 4 |
AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH | 5 |
AIC_ERROR_CODE_NOT_INITIALIZED | 6 |
AIC_ERROR_CODE_PARAMETER_OUT_OF_RANGE | 7 |
AIC_ERROR_CODE_SDK_ACTIVATION_ERROR | 8 |
New Error Codes
| Error Code | Value | Notes |
|---|---|---|
AIC_ERROR_CODE_SUCCESS | 0 | Unchanged |
AIC_ERROR_CODE_NULL_POINTER | 1 | Unchanged |
AIC_ERROR_CODE_PARAMETER_OUT_OF_RANGE | 2 | Renumbered from 7 |
AIC_ERROR_CODE_MODEL_NOT_INITIALIZED | 3 | Renamed from AIC_ERROR_CODE_NOT_INITIALIZED, renumbered from 6 |
AIC_ERROR_CODE_AUDIO_CONFIG_UNSUPPORTED | 4 | Renamed from AIC_ERROR_CODE_UNSUPPORTED_AUDIO_CONFIG |
AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH | 5 | Unchanged |
AIC_ERROR_CODE_ENHANCEMENT_NOT_ALLOWED | 6 | New. SDK key was not authorized or process failed to report usage. Check if you have internet connection. |
AIC_ERROR_CODE_INTERNAL_ERROR | 7 | New. Internal error occurred. Contact support. |
AIC_ERROR_CODE_LICENSE_FORMAT_INVALID | 50 | Renamed from AIC_ERROR_CODE_LICENSE_INVALID, renumbered from 2 |
AIC_ERROR_CODE_LICENSE_VERSION_UNSUPPORTED | 51 | New. License version is not compatible with the SDK version. Update SDK or contact support. |
AIC_ERROR_CODE_LICENSE_EXPIRED | 52 | Renumbered from 3 |
AIC_ERROR_CODE_SDK_ACTIVATION_ERROR has been removed and split into specific license errors.Fixes
- Fixed an issue where, after a successful initialization, a subsequent initialization error would not properly block processing, potentially allowing operations on a partially initialized model.
- Fixed an issue where toggling bypass mode or switching enhancement levels could produce discontinuities.
Breaking Changes
- Variable number of frames supported: The
aic_model_processfunction now supports a variable number of frames per call. To enable this feature, use the newallow_variable_framesparameter in theinitializefunction:Setallow_variable_framestotrueto enable variable frame processing, orfalseto maintain the previous fixed frame behavior. Note that enabling variable frames results in higher processing delay. - New bypass parameter: A new parameter
AIC_PARAMETER_BYPASShas been added to control audio processing bypass while preserving algorithmic delay. When enabled, the input audio passes through unmodified, but the output is still delayed by the same amount as during normal processing. This ensures seamless transitions when toggling enhancement on/off without audible clicks or timing shifts. - Sample rate parameter added to
aic_get_optimal_num_frames: The function now takessample_rateas an argument to make the dependency between sample rate and optimal frame count more explicit:
Fixes
- Model state reset during pause: The internal model state is now automatically reset when processing is paused (e.g., when bypass is enabled or enhancement level is set to 0). This ensures a clean state when processing resumes.
aic_model_resetnow resets all DSP components: The reset operation now ensures that all internal DSP components are properly reset, providing a more thorough clean state.
Updates
- Updated low-sample rate models: 8- and 16 KHz Quail models updated with improved speech enhancement performance.
Bug Fixes
- Fixed output delay issue: Resolved reported output delay problems affecting
AIC_MODEL_QUAIL_XSandAIC_MODEL_QUAIL_XXSmodels - Fixed audio quality degradation: Corrected audio distortion that occurred when using enhancement levels below 1.0 with the affected models
Features
- A new resampling technique makes resampling much more robust without adding additional latency or performance overhead
- New models for different sample rates are now available (16 kHz and 8 kHz)
- The noise gate algorithm has been improved, which leads to better quality
- The output of
aic_get_optimal_num_framesnow changes with sample rate so you can always have the lowest output delay - The model reset now works as expected and resets the internal model state correctly
Breaking Changes
AIC_MODEL_QUAIL_Lis now calledAIC_MODEL_QUAIL_L48AIC_MODEL_QUAIL_Sis now calledAIC_MODEL_QUAIL_S48get_library_versionis now calledaic_get_sdk_versionaic_get_processing_latencyis now calledaic_get_output_delayAIC_PARAMETER_ENHANCEMENT_LEVEL_SKEW_FACTORhas been removed because it led to confusion. The enhancement level is more predictable this way, and a value of 0.0 is always a bypass. If you want to skew the enhancement slider, this has to be done on your end.