Virtual audio drivers provide flexibly configurable audio devices on Fuchsia systems for testing, validation, and development. They allow automated test suites and developer tools to exercise the full audio subsystem without requiring physical audio hardware.
Virtual audio devices are dynamically created, configured, and controlled at runtime via the fuchsia.virtualaudio FIDL protocols.
Fuchsia provides two virtual audio driver implementations in the source tree: the modern virtual-audio driver and the virtual-audio-legacy driver.
| Feature | Modern Driver (virtual-audio) | Legacy Driver (virtual-audio-legacy) |
|---|---|---|
| Driver Framework | Driver Framework v2 (DFv2) | DFv1 / Legacy DDK |
| Source Path | //src/media/audio/drivers/virtual-audio/ | //src/media/audio/drivers/virtual-audio-legacy/ |
| Package / Component | fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm | fuchsia-pkg://fuchsia.com/virtual-audio-legacy#meta/virtual-audio-legacy-driver.cm |
| Supported Audio Protocol | fuchsia.hardware.audio.Composite | Deprecated StreamConfig, Dai, and Codec |
| Data Endpoints | Ring buffers, DAIs, and Packet Streams | Stream ring buffers, DAI ring buffers |
| Signal Processing | fuchsia.hardware.audio.signalprocessing | Gain and plug state controls |
| Devfs / Node Location | /dev/sys/platform/virtual-audio | /dev/sys/platform/virtual-audio-legacy |
| Primary Clients | Audio Device Registry, modern pipeline audio tests, DFv2 driver tests | audio_core, audio-driver-ctl, tests for deprecated protocols |
virtual-audio)The modern virtual audio driver implements the fuchsia.hardware.audio.Composite protocol in Driver Framework v2.
Key capabilities include:
fuchsia.hardware.audio.signalprocessing APIs, allowing tests to configure custom processing topologies, gain stages, mutes, and equalizer elements.virtual-audio-legacy)The legacy virtual audio driver is implemented using the legacy DDK (DFv1) and provides virtual devices implementing deprecated audio protocols:
fuchsia.hardware.audio.StreamConfigConnector to create virtual audio input and output streams (/dev/class/audio-input and /dev/class/audio-output).fuchsia.hardware.audio.DaiConnector (/dev/class/dai), supporting multiple concurrent client connections.fuchsia.hardware.audio.CodecConnector (/dev/class/codec).This driver is retained to validate legacy audio components (such as audio_core and audio-driver-ctl) and to verify backward compatibility across deprecated FIDL protocols.
Virtual audio devices are controlled via two primary FIDL protocols defined in //sdk/fidl/fuchsia.virtualaudio:
fuchsia.virtualaudio.Control:
GetDefaultConfiguration: Retrieves the default template Configuration for a given device type (Composite, StreamConfig, Dai, or Codec).AddDevice: Creates and activates a virtual device instance using a specified Configuration and binds a fuchsia.virtualaudio.Device control channel.Enable / Disable: Globally enables or disables virtual audio device creation on the system.fuchsia.virtualaudio.Device:
Device channel automatically shuts down and removes the corresponding virtual device from the system.Before activating a virtual device via Control.AddDevice, clients can customize properties in the Configuration table, including:
device_name, manufacturer_name, product_name, and unique_id.Test suites (such as audio_driver_basic_tests and audio_driver_admin_tests) can use virtual audio drivers to run self-contained device tests without requiring physical hardware or pre-installed platform bus nodes in system images.
Tests can either:
/dev/sys/platform/virtual-audio), orBecause virtual audio devices can be created dynamically by test suites running on a target, board driver host enumeration tests (such as driver-host-enumeration-test-*) specify virtual audio drivers as optional (prefixed with ?) in their golden.json definitions:
{ "drivers": [ "?fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm" ] }
This ensures that enumeration tests succeed both on minimal/clean boots where virtual audio is absent, and during test runs where virtual audio components are dynamically active.