Skip to main content
Jan 22, 2026
0.14.0

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_INITIALIZED has been renamed to AIC_ERROR_CODE_PROCESSOR_NOT_INITIALIZED.
Jan 15, 2026
0.13.1

Fixes

  • Fixed an issue allowing users to change processor parameters with certain models
Jan 14, 2026
0.13.0
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 memory
  • AicProcessor: 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_destroy can 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_id API to query the id of a model.
  • A single model handle can be shared across multiple processors.
  • Added processor handles with aic_processor_create so each stream can be initialized independently from a shared model while sharing weights.
  • Added aic_get_compatible_model_version to query the required model version for this SDK.
  • Added context-based APIs for thread-safe control operations:
    • aic_processor_context_create and aic_processor_context_destroy for processor context management
    • aic_vad_context_create and aic_vad_context_destroy for VAD context management
  • Model query APIs moved to model handles:
    • aic_model_get_optimal_sample_rate - gets optimal sample rate for a model
    • aic_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_INVALID
    • AIC_ERROR_CODE_MODEL_VERSION_UNSUPPORTED
    • AIC_ERROR_CODE_MODEL_FILE_PATH_INVALID
    • AIC_ERROR_CODE_FILE_SYSTEM_ERROR
    • AIC_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 to aic_processor_*.
  • Removed AicModelType enum; callers must supply a model file or aligned buffer instead of selecting a built-in model.
  • License keys are now provided to aic_processor_create rather than model creation.
  • Renamed AicEnhancementParameter to AicProcessorParameter (AIC_PROCESSOR_PARAMETER_*).
  • VAD APIs now use AicVadContext handles and bind to processor handles instead of model handles:
    • aic_vad_createaic_vad_context_create (takes const AicProcessor* instead of AicModel*)
    • aic_vad_destroyaic_vad_context_destroy
    • aic_vad_is_speech_detectedaic_vad_context_is_speech_detected (takes const AicVadContext*)
    • aic_vad_get_parameteraic_vad_context_get_parameter (takes const AicVadContext*)
    • aic_vad_set_parameteraic_vad_context_set_parameter (takes const AicVadContext*)
  • Processor control APIs now take AicProcessorContext handles created via aic_processor_context_create:
    • aic_model_resetaic_processor_context_reset (takes const AicProcessorContext*)
    • aic_model_get_parameteraic_processor_context_get_parameter (takes const AicProcessorContext*)
    • aic_model_set_parameteraic_processor_context_set_parameter (takes const AicProcessorContext*)
    • aic_get_output_delayaic_processor_context_get_output_delay (takes const AicProcessorContext*)
  • Model query APIs moved to model methods:
    • aic_get_optimal_sample_rateaic_model_get_optimal_sample_rate
    • aic_get_optimal_num_framesaic_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.
Dec 12, 2025
0.12.0

New features

  • Added new VAD parameter AIC_VAD_PARAMETER_MINIMUM_SPEECH_DURATION used 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_SIZE with AIC_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.
Dec 10, 2025
0.11.0

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_S16 and AIC_MODEL_TYPE_QUAIL_STT_S8.
  • Added aic_model_process_sequential for sequential channel data in a single buffer

Breaking changes

  • AIC_MODEL_TYPE_QUAIL_STT was renamed to AIC_MODEL_TYPE_QUAIL_STT_L16
  • aic_vad_create signature changed: the model parameter is no longer const

Fixes

  • VAD now works correctly when AIC_ENHANCEMENT_PARAMETER_ENHANCEMENT_LEVEL is set to 0 or AIC_ENHANCEMENT_PARAMETER_BYPASS is enabled (previously non-functional in these cases)
Nov 20, 2025
0.10.0

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_ENABLE as it is now a fixed part of our VAD.
  • Added new error code AIC_ERROR_CODE_PARAMETER_FIXED returned when attempting to modify a parameter of a model with fixed parameters.

Fixes

  • Fixed an issue where aic_vad_is_speech_detected always returned true when AIC_VAD_PARAMETER_LOOKBACK_BUFFER_SIZE was set to 1.0.
Nov 17, 2025
0.9.1

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: Synchronization and bcryptprimitives
    • macOS: CoreFoundation
Nov 11, 2025
0.9.0

Features

  • Voice Activity Detection: This release adds a new Quail-based VAD. The VAD automatically uses the output of a Quail model to calculate a voice activity prediction.
Added VAD functions
enum AicErrorCode aic_vad_create(struct AicVad **vad, const struct AicModel *model);
void aic_vad_destroy(struct AicVad *vad);
enum AicErrorCode aic_vad_is_speech_detected(struct AicVad *vad, bool *value);
enum AicErrorCode aic_vad_set_parameter(struct AicVad *vad,
                                        enum AicVadParameter parameter,
                                        float value);
enum AicErrorCode aic_vad_get_parameter(const struct AicVad *vad,
                                        enum AicVadParameter parameter,
                                        float *value);
Added VAD parameters
typedef enum AicVadParameter {
  AIC_VAD_PARAMETER_LOOKBACK_BUFFER_SIZE = 0,
  AIC_VAD_PARAMETER_SENSITIVITY = 1,
} AicVadParameter;

Breaking Changes

  • AicParameter was renamed to AicEnhancementParameter.
Old
typedef enum AicParameter {
  AIC_PARAMETER_BYPASS = 0,
  AIC_PARAMETER_ENHANCEMENT_LEVEL = 1,
  AIC_PARAMETER_VOICE_GAIN = 2,
  AIC_PARAMETER_NOISE_GATE_ENABLE = 3,
} AicParameter;
New
typedef enum AicEnhancementParameter {
  AIC_ENHANCEMENT_PARAMETER_BYPASS = 0,
  AIC_ENHANCEMENT_PARAMETER_ENHANCEMENT_LEVEL = 1,
  AIC_ENHANCEMENT_PARAMETER_VOICE_GAIN = 2,
  AIC_ENHANCEMENT_PARAMETER_NOISE_GATE_ENABLE = 3,
} AicEnhancementParameter;
Oct 27, 2025
0.8.0

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 CodeValue
AIC_ERROR_CODE_SUCCESS0
AIC_ERROR_CODE_NULL_POINTER1
AIC_ERROR_CODE_LICENSE_INVALID2
AIC_ERROR_CODE_LICENSE_EXPIRED3
AIC_ERROR_CODE_UNSUPPORTED_AUDIO_CONFIG4
AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH5
AIC_ERROR_CODE_NOT_INITIALIZED6
AIC_ERROR_CODE_PARAMETER_OUT_OF_RANGE7
AIC_ERROR_CODE_SDK_ACTIVATION_ERROR8

New Error Codes

Error CodeValueNotes
AIC_ERROR_CODE_SUCCESS0Unchanged
AIC_ERROR_CODE_NULL_POINTER1Unchanged
AIC_ERROR_CODE_PARAMETER_OUT_OF_RANGE2Renumbered from 7
AIC_ERROR_CODE_MODEL_NOT_INITIALIZED3Renamed from AIC_ERROR_CODE_NOT_INITIALIZED, renumbered from 6
AIC_ERROR_CODE_AUDIO_CONFIG_UNSUPPORTED4Renamed from AIC_ERROR_CODE_UNSUPPORTED_AUDIO_CONFIG
AIC_ERROR_CODE_AUDIO_CONFIG_MISMATCH5Unchanged
AIC_ERROR_CODE_ENHANCEMENT_NOT_ALLOWED6New. SDK key was not authorized or process failed to report usage. Check if you have internet connection.
AIC_ERROR_CODE_INTERNAL_ERROR7New. Internal error occurred. Contact support.
AIC_ERROR_CODE_LICENSE_FORMAT_INVALID50Renamed from AIC_ERROR_CODE_LICENSE_INVALID, renumbered from 2
AIC_ERROR_CODE_LICENSE_VERSION_UNSUPPORTED51New. License version is not compatible with the SDK version. Update SDK or contact support.
AIC_ERROR_CODE_LICENSE_EXPIRED52Renumbered from 3
Removed: 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.
Oct 14, 2025
0.7.0

Breaking Changes

  • Variable number of frames supported: The aic_model_process function now supports a variable number of frames per call. To enable this feature, use the new allow_variable_frames parameter in the initialize function:
    enum AicErrorCode aic_model_initialize(struct AicModel *model,
                                        uint32_t sample_rate,
                                        uint16_t num_channels,
                                        size_t num_frames,
                                        bool allow_variable_frames);
    
    Set allow_variable_frames to true to enable variable frame processing, or false to maintain the previous fixed frame behavior. Note that enabling variable frames results in higher processing delay.
  • New bypass parameter: A new parameter AIC_PARAMETER_BYPASS has 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 takes sample_rate as an argument to make the dependency between sample rate and optimal frame count more explicit:
    enum AicErrorCode aic_get_optimal_num_frames(const struct AicModel *model,
                                                 uint32_t sample_rate,
                                                 size_t *num_frames);
    

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_reset now resets all DSP components: The reset operation now ensures that all internal DSP components are properly reset, providing a more thorough clean state.
Aug 22, 2025
0.6.3

Updates

  • Updated low-sample rate models: 8- and 16 KHz Quail models updated with improved speech enhancement performance.
Aug 19, 2025
0.6.2

Bug Fixes

  • Fixed output delay issue: Resolved reported output delay problems affecting AIC_MODEL_QUAIL_XS and AIC_MODEL_QUAIL_XXS models
  • Fixed audio quality degradation: Corrected audio distortion that occurred when using enhancement levels below 1.0 with the affected models
Aug 18, 2025
0.6.1

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_frames now 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_L is now called AIC_MODEL_QUAIL_L48
  • AIC_MODEL_QUAIL_S is now called AIC_MODEL_QUAIL_S48
  • get_library_version is now called aic_get_sdk_version
  • aic_get_processing_latency is now called aic_get_output_delay
  • AIC_PARAMETER_ENHANCEMENT_LEVEL_SKEW_FACTOR has 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.