AVS Device SDK Release Notes

The following release notes contain details about the Alexa Voice Service (AVS) Device SDK, including feature enhancements, updates, and resolved issues.

2021

Version 1.26.0

Release date

November 15, 2021

Enhancements

  • Added support for the Public-Key Cryptography Standards #11 (PKCS#11) API. You use this API to integrate a hardware security module (HSM) in the SDK to support encryption at rest. To learn how to simulate a hardware security module in the SDK, see Simulated Hardware Module.

  • Added an automatic database upgrade to support PKCS#11 encryption. After upgrading to version 1.26.0 SDK, the acsdkAuthorization automatically upgrades your database format to the latest version. For example, if you upgrade from SDK version 1.24.0 to 1.26.0, your database format is automatically upgraded from the 1.24.0 version to the 1.26.0 version. This upgrade preserves your present authorization information and enables encryption support with PKCS#11 encryption.
  • Added support for the Device Artifact Vending Service (DAVS). This service vends artifacts to AVS devices including machine learning models, images, configuration files, and so on. For more details about using DAVS, see Optional Features: Asset Manager. You use Asset Manager to access the DAVS service.
  • Added support for Asset Manager. This feature lets you store and manage files from an external location to use with the SDK. For example, you can store an audio file and play it when required. For more details about how to use this feature, see Optional Features: Asset Manager.
  • Added the following components to the Manufactory subsystem.
    • Public-Key Cryptography Standards #11 (PKCS#11) API
    • KeywordDetection (KWD)
  • Added the InputController capability agent to handle the Alexa.InputController interface. Alexa.InputController allows you to select and switch inputs on devices. For more details about using the InputController capability agent, see INPUT_CONTROLLER.
  • Added support to use shared libraries with the SDK. This feature helps reduce the size of the libraries you use in your build.
  • Updated the Bluetooth capability agent to use the BluetoothLocalInterface. This capability agent contains functions to support high-level Bluetooth operations.
  • Updated AlertObserverInterface to include new parameters for the SetAlert directive, including scheduledTime, label and originalTime.
  • Updated the Alexa Communications Library (ACL) and libCurl logging functionality by adding an instance id to ACL. This helps you identify a specific connection when multiple ACL connections are in use.
  • Added two new APIs to the NotifierInterface. The addWeakPtrObserver API and the removeWeakPtrObserver API.
  • Updated SpeechSynthesizer to use the new PowerResourceManagerInterface APIs.
  • Added a new local operation to LocalPlaybackHandlerInterface and renamed one enum from PAUSE_PLAYBACK to RESUMABLE_STOP. Added one new enum, TRANSIENT_PAUSE to control the current player by processing a transient pause, similar to a BACKGROUND focus change for non-mixable content.
  • Added the SQLiteMiscStorage::getDatabase() method to access internal database objects for operations.
  • Added onConnectionStatusChanged to the DialogUXStateAggregator to support multiple engine statuses. If a single engine status is connected, dialogUXState resolves to idle.

New configurations

  • The Sensory Wake Word engine is no longer available on GitHub and related code is removed from the AVS Device SDK. By default, the SDK now only supports tap-to-talk. However, you can still integrate a custom wake word engine as needed.
  • Updated the triggering behavior for Alerts. If left uninterrupted, Alerts now trigger for scheduledTime + 1 hour. This occurs even if the alert starts later than scheduledTime, due to being queued by another active alert.
  • Added a new alerts v3 table to store alerts. Continue to write to alerts v2 table to avoid rollback concerns.
  • Removed the ErrorType.h file from acsdkAudioPlayer.

Bug Fixes

  • Fixed a bug in SQLiteMiscStorage that returned an empty value instead of reporting an error.
  • Fixed a bug that sent a PostConnect event before a connection is established.
  • Fixed a bug that could cause requests to stall on some platforms when making requests to local hosts.
  • Fixed a Bluetooth bug that caused it to stop working after reauthorization.
  • Fixed a bug that caused problems if you used the new --EXTENSION_PATHS flag instead of previous deprecated --EXTENSION_PATH flag.
  • Fixed an alerts bug that could cause a deadlock when snoozing an alert while ducking is disabled.
  • Fixed an AudioPlayer bug that could cause a crash if Playback events were missing certain fields.
  • Fixed a bug that could cause connection errors because context manager failed to get the indicator state from the NotificationsCapabilityAgent State provider.
  • Fixed a bug that prevented resources from eallocates safely if initialization fails.
  • Fixed an updateEndpoint bug that could errors when trying to update capabilities for a device.

Known issues

  • Static libraries don't always work when building the SampleApp on Windows with the MinGW environment. For more details about resolving this error, see static libraries
  • On some compilers and platforms, the SampleApp might not run and provides the following manufactory-related error: Recipes are not equivalent. For more details about how to temporarily patch this problem, see issue 1824 on GitHub.
  • Build errors can occur on the Raspberry Pi due to incorrect linking of the atomic library. A suggested workaround is to add the following set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") to the top most CMake file.
  • The WebVTT dependency required for captions isn't supported for Windows/Android.
  • Exiting from the setting option takes you back to the Options Menu directly. It doesn't provide a message to indicate that you're back in the main menu.
  • Disabled all failing Unit Tests and Audio Input Processor (AIP) Unit tests on Windows.
  • AudioInputProcessor unit tests don't build on Windows when using the -DCMAKE_BUILD_TYPE=DEBUG CMake parameter.
  • Music playback history isn't displayed in the Alexa app for certain account and device types.
  • The Gnu Compiler Collection (GCC) 8+-Wclass-memaccess triggers warnings. You can ignore these, they don't cause the build to fail.
  • Android error libDefaultClient.so not found might occur. Resolve this problem by upgrading to Android Debug Bridge (ADB) version 1.0.40.
  • If a device loses a network connection, the lost connection status isn't returned though local Text To Speech (TTS).
  • ACL encounters issues if it receives audio attachments but doesn't consume them.
  • Media streamed through Bluetooth might abruptly stop. To restart playback, resume the media in the source app or toggle next/previous.
  • If a connected Bluetooth device is inactive, the Alexa app might indicates that audio is playing.
  • The Bluetooth agent assumes that the Bluetooth adapter is always connected to a power source. Disconnecting from a power source during operation isn't yet supported.
  • Interrupted Bluetooth playback might not resume if other content is locally streamed.
  • make integration isn't available for Android. To run Android integration tests, manually upload the test binary and input file and run ADB.
  • Alexa might truncate the beginning of speech when responding to text-to-speech (TTS) user events. This impacts Raspberry Pi devices running Android Things with HDMI output audio.
  • A reminder TTS message doesn't play if the sample app restarts and loses a network connection. Instead, the default alarm tone plays twice.
  • Disabled ServerDisconnectIntegratonTest tests until they reflect the new service behavior.
  • The DirectiveSequencerTest.test_handleBlockingThenImmediatelyThenNonBockingOnSameDialogId test fails intermittently.
  • The Raspberry Pi sample app might crash after prolonged use due to conflicts with PortAudio dependencies.
  • The sample app might crash if it's using libCurl 7.69.

Version 1.25.0

Release date

August 24, 2021

Enhancements

  • Added support for CURLOPT_PROXY.
  • Added the AuthorizatonManager component. This allows you to dynamically change your authorization mechanism without restarting the SDK. By default, AuthorizatonManager provides an LWAAuthorizationAdapter that uses Code-Based Linking authorization. To control this feature, use the -DAUTH_MANAGER = ON CMake command.
  • Added the DtmfObserverInterface interface to support Alexa Communications features.
  • Added a metric to record the audioEncodingFormat used by AudioInputProcessor.
  • Added a metric that detects if a device fails to parse notification directives from the cloud.
  • Added the SharedDataStream (SDS) and AudioFormat to the manufactory subsystem.
  • Added support to add optional dependencies to manufactory through the OptionalImport<> structure and the ComponentAccumulator::makeImportOptional() method.
  • Updated the AudioInputProcessor to reduce latency in Low Power Mode (LPM).
  • Reduced user wait time when performing gateway verification by up to 5 minutes. The change triggers gateway verification immediately after authorization succeeds. To enable this optimization, code changes might be required: the AuthDelegate object must be supplied when constructing AVSGatewayManager.
  • Added support for the following locale pairs:
    • "en-US", "fr-FR"
    • "fr-FR", "en-US"
    • "en-US", "de-DE"
    • "de-DE", "en-US"
    • "en-US", "ja-JP"
    • "ja-JP", "en-US"
    • "en-US", "it-IT"
    • "it-IT", "en-US"
    • "en-US", "es-ES"
    • "es-ES", "en-US"
  • Added support for the Arabic language (ar-SA).

New configurations

  • Runtime checks now display the version of curl used by the SDK.
  • Kitt.AI is no longer supported by the SDK and all related code is removed.
  • All Non-DEBUG builds disable logging by default, aligning with the Alexa Service Requirements.
  • Added a security.md file that contains security policy updates.
  • Updated the pkg-config.pc file to use Requires.private instead of Requires, so libraries such as curl or SQlite aren't a direct dependency.
  • Added a new offlineAlerts_v2 table that stores alerts that are stopped offline. To avoid rollback concerns, you should continue to write to the offlineAlerts_v1 table.
  • Logger::emit is no longer a pure virtual function. The default implementation is now a no-op.
  • Removed two unused methods from ComponentAccumulator.

Bug Fixes

  • Fixed a SpeakerManager Capability Agent bug that caused playback to stop when handling REPLACE_ALL commands.
  • Fixed a Bluetooth bug that could caused streaming music to overlap with Bluetooth music.
  • Fixed a bug that could cause an SDK shutdown to stop responding, especially if triggered right after device boot.
  • Fixed a potential crash that could happen during SDK shutdown.
  • Fixed a sample rate flag in the FFmpegAttachmentInputController that incorrectly used framerate instead of sample_rate.
  • Fixed a KeywordObserver bug that would send the incorrect start of a speech timestamp to AudioInputProcessor.
  • Fixed a SpeakerManager bug that could cause volume setting changes to fail.
  • Fixed a null pointer exception that can occur during barge-in.
  • Fixed an AudioPlayer bug that might stop a playing track after sending a PlaybackNearlyFinished event, but before the play directive arrives for the next track.
  • Fixed a bug that could cause the SDK to crash after calling promise.set_value.
  • Added missing header include statements in the DefaultEndpointBuilder.h file.
  • Fixed a DoNotDisturbCapabilityAgent bug that could cause the SDK to stall due to a race condition.
  • Fixed a bug that could cause some device settings to persist after logging out.

Known issues

  • On some compilers and platforms, the SampleApp might not run and provides the following manufactory-related error: Recipes are not equivalent. For more details about how to temporarily patch this problem, see issue 1824 on GitHub.
  • Build errors can occur on the Raspberry Pi due to incorrect linking of the atomic library. A suggested workaround is to add the following set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") to the top most CMake file.
  • The WebVTT dependency required for captions isn't supported for Windows/Android.
  • Exiting from the setting option takes you back to the Options Menu directly. It doesn't provide a message to indicate that you're back in the main menu.
  • Disabled all failing Unit Tests and Audio Input Processor (AIP) Unit tests on Windows.
  • AudioInputProcessor unit tests don't build on Windows when using the -DCMAKE_BUILD_TYPE=DEBUG CMake parameter.
  • Music playback history isn't displayed in the Alexa app for certain account and device types.
  • The Gnu Compiler Collection (GCC) 8+-Wclass-memaccess triggers warnings. You can ignore these, they don't cause the build to fail.
  • Android error libDefaultClient.so not found might occur. Resolve this problem by upgrading to Android Debug Bridge (ADB) version 1.0.40.
  • If a device loses a network connection, the lost connection status isn't returned though local Text To Speech (TTS).
  • ACL encounters issues if it receives audio attachments but doesn't consume them.
  • Media streamed through Bluetooth might abruptly stop. To restart playback, resume the media in the source app or toggle next/previous.
  • If a connected Bluetooth device is inactive, the Alexa app might indicates that audio is playing.
  • The Bluetooth agent assumes that the Bluetooth adapter is always connected to a power source. Disconnecting from a power source during operation isn't yet supported.
  • Interrupted Bluetooth playback might not resume if other content is locally streamed.
  • make integration isn't available for Android. To run Android integration tests, manually upload the test binary and input file and run ADB.
  • Alexa might truncate the beginning of speech when responding to text-to-speech (TTS) user events. This impacts Raspberry Pi devices running Android Things with HDMI output audio.
  • A reminder TTS message doesn't play if the sample app restarts and loses a network connection. Instead, the default alarm tone plays twice.
  • Disabled ServerDisconnectIntegratonTest tests until they reflect the new service behavior.
  • The DirectiveSequencerTest.test_handleBlockingThenImmediatelyThenNonBockingOnSameDialogId test fails intermittently.
  • The Raspberry Pi sample app might crash after prolonged use due to conflicts with PortAudio dependencies.
  • The sample app might crash if it's using libCurl 7.69.

Version 1.24.0

Release date

June 4, 2021

Enhancements

  • Added support for the DeviceSetup Interface. This allows you to configure a custom out-of-box onboarding experience. For more details about how this interface works in the SDK, see out-of-box onboarding experience.
  • Added support for the SDK to update the default endpoint dynamically.
  • Added the following components to the Manufactory subsystem.
    • SpeechEncoder
    • Alexa Directive Sequencer Library (ADSL)
    • DialogUXStateAggregator
    • Notifications
  • Added the timeSinceLastPartialMS API. This API helps you determine the last time the system used a resource, such as CPU, NETWORK, DDR, and so on.
  • Reduced the size of SDK libraries by optimizing the Manufactory library templates.
  • Added a new constructor to MediaPlayerState that takes a PlaylistType field (DASH, HLS).
  • Added two new fields to the AudioPlayer Metrics. These new fields are trackPlaylistType and trackDomainNameHash.
  • Added two methods to CurlEasyHandleWrapper to set the network interface dynamically. These methods are setInterfaceName and getInterfaceName.

New configurations

  • Changed the minimum supported version of libcurl to 7.67.0. This change applies to all build types.
  • Updated the Android.sh script to support NDK 22. Android builds no longer support NDK 21 and lower.
  • Updated the Android.sh script to use curl 7.67.0.
  • Updated the Default Client to handle an instance of acsdkNotificationInterfaces::NotificationsNotifierInterface instead of the Notifications Capability Agent directly.
  • Added a new constructor to MediaPlayerState that takes a PlaylistType field (DASH, HLS).
  • Added two new fields to the AudioPlayer Metrics. These new fields are trackPlaylistType and trackDomainNameHash.
  • Added two methods to CurlEasyHandleWrapper to set the network interface dynamically. These methods are setInterfaceName and getInterfaceName.
  • Removed the build directory. Use the cmakeBuild directory instead.

Known issues

  • A device might report incorrect speaker states to AVS if you don't update SpeakerSettings through the SpeakerInterface.
  • M4A files with the .moov content located at the end of the file might not render.
  • Build errors can occur on the Raspberry Pi due linking the atomic library incorrectly. A suggested workaround is to add the following line set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") to the top CMake file.
  • Windows and Android don't support the WebVTT dependency required for captions.
  • When you're in the settings menu, using the settings option to exit the menu takes you directly back to the options menu. It doesn't provide a message to indicate that you're back in the main menu.
  • All failing Unit Tests and failing Audio Input Processor (AIP) Unit tests are disabled on Windows.
  • AudioInputProcessor unit tests don't build on Windows when using the -DCMAKE_BUILD_TYPE=DEBUG CMake parameter.
  • Music playback history isn't displayed in the Alexa app for certain account and device types.
  • The Gnu Compiler Collection (GCC) 8+-Wclass-memaccess triggers warnings. You can ignore these and they don't cause the build to fail.
  • When building with Android, the Android error libDefaultClient.so not found might occur. Resolve this problem by upgrading to Android Debug Bridge (ADB) version 1.0.40.
  • If a device loses a network connection, the lost connection status isn't returned though the local Text-To-Speech (TTS).
  • The Alexa Communications Library (ACL) might have issues if it receives audio attachments but doesn't consume them.
  • Media streamed through Bluetooth might abruptly stop. To restart playback, resume the media in the source app or toggle the next/previous options.
  • If a connected Bluetooth device is inactive, the Alexa app might indicates that audio is playing.
  • The Bluetooth agent assumes that the Bluetooth adapter is always connected to a power source. Disconnecting from a power source during operation isn't yet supported.
  • Interrupted Bluetooth playback might not resume if other content is locally streamed.
  • make integration command isn't available for Android. To run Android integration tests, manually upload the test binary and input file and run ADB.
  • Alexa might truncate the beginning of speech when responding to text-to-speech (TTS) user events. This impacts Raspberry Pi devices running Android Things that use HDMI output audio.
  • A reminder TTS message doesn't play if the sample app restarts and loses a network connection. Instead, the default alarm tone plays twice.
  • Disabled ServerDisconnectIntegratonTest tests until they reflect the new service behavior.
  • DirectiveSequencerTest.test_handleBlockingThenImmediatelyThenNonBockingOnSameDialogId tests might intermittently fail.
  • The Raspberry Pi sample app might crash after prolonged use due to conflicts with PortAudio dependencies.
  • The sample app might crash if it's using libCurl 7.69.

Version 1.23.0

Release date

March 29, 2021

Bug fixes

  • Fixed a CertifiedSender bug that could cause unnecessary outgoing messages.
  • Fixed a race condition in SpeechEncoder that occurred when calling stopEncoding() and startEncoding() in quick succession.
  • Fixed a Manufactory bug that caused instantiation issues and runtime issues.
  • Removed the ConstructorAdapter.h file from the acsdkManufactory shared library.
  • Fixed an endpoint bug that caused problems if the default endpoint uses a friendly name. The friendly name of the default endpoint should always be an empty string.
  • Fixed failing Media Player Remote Interfacing Specification (MPRIS) tests on certain platforms.
  • Fixed a timer race condition that occurred in the ConditionVariableWrapper under certain configurations.
  • Fixed a bug that could cause a segmentation fault at shutdown due to transient messages.
  • Fixed an AudioInputProcessor bug that could delay the SDK from transitioning between THINKING and IDLE states.
  • Fixed a reminders bug that caused a reminder to play the wrong tone if a sound asset isn't provided.
  • Removed validateSpeakerSettingsConsistency from SpeakerManager. You're now responsible to keep SpeakerSettings consistent for speakers of the same type.
  • Updated the BlockingPolicy in SpeakerManager. The Speaker namespace now handles directives immediately.
  • Fixed an ExternalCapabilitiesBuilder.cpp bug that could cause the MRMCapabilityAgent to crash.
  • Split the SystemClockMonitor contained in the AVSCommon/Utils/SystemClockMonitor folder into two separate implementation and interface libraries named acsdkSystemClockMonitorInterfaces and acsdkSystemClockMonitor. Components that must observe system clock changes should register with SystemClockNotifier.

Enhancements

  • Added Bluetooth functionality to Manufactory. To enable Bluetooth with Manufactory, use the BLUETOOTH_ENABLED=ON CMake flag. If you're using the BlueZ Bluetooth implementation with Manufactory, you must also specify the BLUETOOTH_BLUEZ=ON CMake flag.
  • Added an AlertsCapabilityAgentInterface to decouple the actions an app might take on the Alerts CA after implementation.
  • Added the createSubsetManufactory method to Manufactory. This method uses a superset Manufactory and a list of parameters to create a new subset Manufactory.
  • Added the onCallStateInfoChange to the communication functions. This API takes a structure as its parameter to pass communication information, such as call type, display name, and so on.
  • Replaced the deprecated CapabilitiesObserverInterface with the DelegateObserverInterface.
  • Added a new LocaleAssetsObserverInterface to notify observers of any changes to locale assets.
  • Added a new CapabilityConfigurationChangeObserverInterface to notify observers of any changes to capability configurations.

Known issues

  • A device might report incorrect speaker states to AVS if you don't update SpeakerSettings through the SpeakerInterface.
  • M4A files with the .moov content located at the end of the file might not render.
  • On some compilers and platforms, the SampleApp might not run and provides the following Manufactory related error: Recipes are not equivalent. For more details about how to temporarily patch this problem, see issue 1824 on GitHub.
  • Build errors can occur on the Raspberry Pi due linking the atomic library incorrectly. A suggested workaround is to add the following line set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic") to the top CMake file.
  • Windows and Android don't support the WebVTT dependency required for captions.
  • When you're in the settings menu, using the settings option to exit the menu takes you directly back to the options menu. It doesn't provide a message to indicate that you're back in the main menu.
  • All failing Unit Tests and failing Audio Input Processor (AIP) Unit tests are disabled on Windows.
  • AudioInputProcessor unit tests don't build on Windows when using the -DCMAKE_BUILD_TYPE=DEBUG CMake parameter.
  • Music playback history isn't displayed in the Alexa app for certain account and device types.
  • The Gnu Compiler Collection (GCC) 8+-Wclass-memaccess triggers warnings. You can ignore these and they don't cause the build to fail.
  • When building with Android, the Android error libDefaultClient.so not found might occur. Resolve this problem by upgrading to Android Debug Bridge (ADB) version 1.0.40.
  • If a device loses a network connection, the lost connection status isn't returned though the local Text-To-Speech (TTS).
  • The Alexa Communications Library (ACL) might have issues if it receives audio attachments but doesn't consume them.
  • Media streamed through Bluetooth might abruptly stop. To restart playback, resume the media in the source app or toggle the next/previous options.
  • If a connected Bluetooth device is inactive, the Alexa app might indicates that audio is playing.
  • The Bluetooth agent assumes that the Bluetooth adapter is always connected to a power source. Disconnecting from a power source during operation isn't yet supported.
  • Interrupted Bluetooth playback might not resume if other content is locally streamed.
  • make integration command isn't available for Android. To run Android integration tests, manually upload the test binary and input file and run ADB.
  • Alexa might truncate the beginning of speech when responding to text-to-speech (TTS) user events. This impacts Raspberry Pi devices running Android Things that use HDMI output audio.
  • A reminder TTS message doesn't play if the sample app restarts and loses a network connection. Instead, the default alarm tone plays twice.
  • Disabled ServerDisconnectIntegratonTest tests until they reflect the new service behavior.
  • DirectiveSequencerTest.test_handleBlockingThenImmediatelyThenNonBockingOnSameDialogId tests might intermittently fail.
  • The Raspberry Pi sample app might crash after prolonged use due to conflicts with PortAudio dependencies.
  • The sample app might crash if it's using libCurl 7.69.

2020

2019