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 development 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.