Index: /trunk/src/VBox/ValidationKit/docs/Makefile.kmk
===================================================================
--- /trunk/src/VBox/ValidationKit/docs/Makefile.kmk	(revision 92473)
+++ /trunk/src/VBox/ValidationKit/docs/Makefile.kmk	(revision 92474)
@@ -5,5 +5,5 @@
 
 #
-# Copyright (C) 2006-2020 Oracle Corporation
+# Copyright (C) 2006-2021 Oracle Corporation
 #
 # This file is part of VirtualBox Open Source Edition (OSE), as
@@ -43,5 +43,9 @@
 endif
 
-GENERATED_FILES = AutomaticTestingRevamp.html VBoxValidationKitReadMe.html TestBoxImaging.html
+GENERATED_FILES = \
+    AutomaticTestingRevamp.html \
+    VBoxValidationKitReadMe.html \
+    VBoxAudioValidationKitReadMe.html \
+    TestBoxImaging.html
 
 all: $(GENERATED_FILES)
@@ -54,3 +58,2 @@
 clean:
 	kmk_builtin_rm -f -- $(GENERATED_FILES)
-
Index: /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.html
===================================================================
--- /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.html	(revision 92474)
+++ /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.html	(revision 92474)
@@ -0,0 +1,578 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.18: http://docutils.sourceforge.net/" />
+<title>Audio Testing via Validation Kit</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id$
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="audio-testing-via-validation-kit">
+<h1 class="title">Audio Testing via Validation Kit</h1>
+
+<div class="section" id="overview-goal">
+<h1>Overview / Goal</h1>
+<p>The goal was to create a testing framework which utilizes the
+VirtualBox Validation Kit to test the VirtualBox audio stack.</p>
+<p>That framework must be runnable on all host/guest combinations together with all
+audio drivers (&quot;backends&quot;) and device emulations being offered. This makes it a
+rather big testing matrix which therefore has to be processed in an automated
+fashion.</p>
+<p>Additionally it should be flexible enough to add more (custom) tests lateron.</p>
+</div>
+<div class="section" id="current-status-limitations">
+<h1>Current status / limitations</h1>
+<ul class="simple">
+<li><dl class="first docutils">
+<dt>The following test types are currently implemented:</dt>
+<dd><ul class="first last">
+<li>Test tone (sine wave) playback from the guest</li>
+<li>Test tone (sine wave) recording by the guest (injected from the host)</li>
+</ul>
+</dd>
+</dl>
+</li>
+<li>Only the HDA device emulation has been verified so far.</li>
+<li>Only the ALSA audio stack on Debian 10 has been verified so far.
+Note: This is different from PulseAudio using the ALSA plugin!</li>
+</ul>
+</div>
+<div class="section" id="operation">
+<h1>Operation</h1>
+<p>The framework consists of several components which try to make use as much of
+the existing audio stack code as possible. This allows the following
+operation modes:</p>
+<ul class="simple">
+<li>Standalone: Playing back / recording audio data (test tones / .WAV files) in a
+standalone scenario, i.e. no VirtualBox / VMs required). This mode is using
+the audio (mixing) stack and available backend drivers without the need of
+VirtualBox being installed.</li>
+<li>Manual: Performing single / multiple tests manually on a local machine.
+Requires a running and set up test VM.</li>
+<li>Automated: Performs single / multiple tests via the Validation Kit audio test
+driver and can be triggered via the Validation Kit Test Manager. The test
+driver can be found at [1].</li>
+<li>(Re-)validation of previously ran tests: This takes two test sets and runs
+the validation / analysis on them. See VKAT's &quot;verify&quot; sub command for more.</li>
+<li>Self testing mode: Performs standalone self tests to verify / debug the
+involved components. See VKAT's &quot;selftest&quot; sub command for more.</li>
+</ul>
+<p>[1] src/VBox/ValidationKit/tests/audio/tdAudioTest.py</p>
+</div>
+<div class="section" id="components-and-terminology">
+<h1>Components and Terminology</h1>
+<p>The following components are in charge for performing the audio tests
+(depends on the operation mode, see above):</p>
+<ul>
+<li><p class="first">VKAT (&quot;Validation Kit Audio Test&quot;, also known as VBoxAudioTest):
+A binary which can perform the standalone audio tests mentioned above, as well
+as acting as the guest and host service(s) when performing manual or automated
+tests. It also includes the analysis / verification of audio test sets.
+VKAT also is included in host installations and Guest Additions since
+VirtualBox 7.0 to give customers and end users the opportunity to test and
+verify the audio stack.</p>
+<dl class="docutils">
+<dt>Additional features include:</dt>
+<dd><ul class="first last simple">
+<li>Automatic probing of audio backends (&quot;--probe-backends&quot;)</li>
+<li>Manual playback of test tones (&quot;play -t&quot;)</li>
+<li>Manual playback of .WAV files (&quot;play &lt;WAV-File&gt;&quot;)</li>
+<li>Manual recording to .WAV files (&quot;recording &lt;WAV-File&gt;&quot;)</li>
+<li>Manual device enumeration (sub command &quot;enum&quot;)</li>
+<li>Manual (re-)verification of test sets (sub command &quot;verify&quot;)</li>
+<li>Self-contained self tests (sub command &quot;selftest&quot;)</li>
+</ul>
+</dd>
+</dl>
+<p>See the syntax help (&quot;--help&quot;) for more.</p>
+</li>
+<li><p class="first">ATS (&quot;Audio Testing Service&quot;): Component which is being used by VKAT and the
+Validation Kit audio driver (backend) to communicate across guest and host
+boundaries. Currently using a TCP/IP transport layer. Also works with VMs
+which are configured with NAT networking (&quot;reverse connection&quot;).</p>
+</li>
+<li><p class="first">Validation Kit audio test driver (tdAudioTest.py): Used for integrating and
+invoking VKAT for manual and automated tests via the Validation Kit framework
+(Test Manager). Optional.</p>
+</li>
+<li><p class="first">Validation Kit audio driver (backend): A dedicated audio backend which
+communicates with VKAT running on the same host to perform the actual audio
+tests on a VirtualBox installation. This makes it possible to test the full
+audio stack on a running VM without any additional / external tools.</p>
+<p>On guest playback, data will be recorded, on guest recording, data will be
+injected from the host into the audio stack.</p>
+</li>
+<li><dl class="first docutils">
+<dt>Test sets contain</dt>
+<dd><ul class="first last simple">
+<li>a test manifest with all information required (vkat_manifest.ini)</li>
+<li>the generated / captured audio data (as raw PCM)</li>
+</ul>
+</dd>
+</dl>
+<p>and are either packed as .tar.gz archives or consist of a dedicated directory
+per test set.</p>
+<p>There always must be at least two test sets - one from the host side and one
+from the guest side - to perform a verification.</p>
+<p>Each test set contains a test tag so that matching test sets can be
+identified.</p>
+</li>
+</ul>
+<p>The above components are also included in VirtualBox release builds and can be
+optionally enabled (disabled by default).</p>
+</div>
+<div class="section" id="workflow-for-a-single-test">
+<h1>Workflow for a single test</h1>
+<p>When a single test is being executed on a running VM, the following (simplified)
+workflow applies:</p>
+<ul class="simple">
+<li>VKAT on the host connects to VKAT running on the guest (via ATS, also can be a
+remote machine in theory).</li>
+<li>VKAT on the host connects to Validation Kit audio driver on the host
+(via ATS, also can be a remote machine in theory).</li>
+<li><dl class="first docutils">
+<dt>For example, when doing playback tests, VKAT on the host ...</dt>
+<dd><ul class="first last">
+<li><dl class="first docutils">
+<dt>... tells the Validation Kit audio driver to start recording</dt>
+<dd>guest playback.</dd>
+</dl>
+</li>
+<li>... tells the VKAT on the guest to start playing back audio data.</li>
+<li><dl class="first docutils">
+<dt>... gathers all test data (generated from/by the guest and recorded from</dt>
+<dd>the host) as separate test sets.</dd>
+</dl>
+</li>
+<li>... starts verification / analysis of the test sets.</li>
+</ul>
+</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="section" id="setup-instructions">
+<h1>Setup instructions</h1>
+<ul>
+<li><p class="first">VM needs to be configured to have audio emulation and audio testing enabled
+(via extra-data, set &quot;VBoxInternal2/Audio/Debug/Enabled&quot; to &quot;true&quot;).</p>
+</li>
+<li><p class="first">Audio input / output for the VM needs to be enabled (depending on the test).</p>
+</li>
+<li><p class="first">VKAT needs to be running on the guest and be able to connect to the host via
+TCP/IP.</p>
+<dl class="docutils">
+<dt>Note: Depending on the VM's networking configuration there might be further</dt>
+<dd><p class="first last">steps necessary in order to be able to reach the host from the guest.
+See the VirtualBox manual for more information.</p>
+</dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="section" id="performing-a-manual-test">
+<h1>Performing a manual test</h1>
+<ul class="simple">
+<li>Follow &quot;Setup instructions&quot;.</li>
+<li>Start VKAT on the guest (in &quot;guest mode&quot;, e.g. &quot;test --mode guest&quot;).</li>
+<li>Start VKAT on the host (in &quot;host mode&quot;, e.g. &quot;test --mode host&quot;) with
+selected test(s).</li>
+<li>By default the test verification will be done automatically after running the
+tests.</li>
+</ul>
+</div>
+<div class="section" id="performing-manual-verification">
+<h1>Performing manual verification</h1>
+<p>VKAT can manually be used with the &quot;verify&quot; sub command in order to (re-)verify
+previously generated test sets. It then will return different exit codes based
+on the verification result.</p>
+</div>
+<div class="section" id="performing-an-automated-test">
+<h1>Performing an automated test</h1>
+<ul class="simple">
+<li>TxS (Test E[x]ecution Service) has to be up and running (part of the
+Validation Kit) on the guest.</li>
+<li>Invoke the tdAudioTest.py test driver, either manually or fully automated
+via Test Manager.</li>
+</ul>
+</div>
+<div class="section" id="troubleshooting">
+<h1>Troubleshooting</h1>
+<ul class="simple">
+<li>Make sure that audio device emulation is enabled and can be used within the
+guest. Also, audio input / output has to be enabled, depending on the tests.</li>
+<li>Make sure that the guest's VKAT instance can reach the host via the selected
+transport lay (TCP/IP by default).</li>
+<li>Increase the hosts audio logging level
+(via extra-data, set &quot;VBoxInternal2/Audio/Debug/Level&quot; to &quot;5&quot;).</li>
+<li>Increase VKAT's verbosity level (add &quot;-v&quot;, can be specified multiple times).</li>
+<li>Check if the the VBox release log contains any warnings / errors with the
+&quot;ValKit:&quot; prefix.</li>
+</ul>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">Status:</th><td class="field-body">$Id$</td>
+</tr>
+<tr class="field"><th class="field-name">Copyright:</th><td class="field-body">Copyright (C) 2021 Oracle Corporation.</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</body>
+</html>
Index: /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.txt
===================================================================
--- /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.txt	(revision 92474)
+++ /trunk/src/VBox/ValidationKit/docs/VBoxAudioValidationKitReadMe.txt	(revision 92474)
@@ -0,0 +1,194 @@
+Audio Testing via Validation Kit
+================================
+
+
+Overview / Goal
+---------------
+
+The goal was to create a testing framework which utilizes the
+VirtualBox Validation Kit to test the VirtualBox audio stack.
+
+That framework must be runnable on all host/guest combinations together with all
+audio drivers ("backends") and device emulations being offered. This makes it a
+rather big testing matrix which therefore has to be processed in an automated
+fashion.
+
+Additionally it should be flexible enough to add more (custom) tests lateron.
+
+
+Current status / limitations
+----------------------------
+
+- The following test types are currently implemented:
+    * Test tone (sine wave) playback from the guest
+    * Test tone (sine wave) recording by the guest (injected from the host)
+- Only the HDA device emulation has been verified so far.
+- Only the ALSA audio stack on Debian 10 has been verified so far.
+  Note: This is different from PulseAudio using the ALSA plugin!
+
+
+Operation
+---------
+
+The framework consists of several components which try to make use as much of
+the existing audio stack code as possible. This allows the following
+operation modes:
+
+- Standalone: Playing back / recording audio data (test tones / .WAV files) in a
+  standalone scenario, i.e. no VirtualBox / VMs required). This mode is using
+  the audio (mixing) stack and available backend drivers without the need of
+  VirtualBox being installed.
+
+- Manual: Performing single / multiple tests manually on a local machine.
+  Requires a running and set up test VM.
+
+- Automated: Performs single / multiple tests via the Validation Kit audio test
+  driver and can be triggered via the Validation Kit Test Manager. The test
+  driver can be found at [1].
+
+- (Re-)validation of previously ran tests: This takes two test sets and runs
+  the validation / analysis on them. See VKAT's "verify" sub command for more.
+
+- Self testing mode: Performs standalone self tests to verify / debug the
+  involved components. See VKAT's "selftest" sub command for more.
+
+
+[1] src/VBox/ValidationKit/tests/audio/tdAudioTest.py
+
+
+Components and Terminology
+--------------------------
+
+The following components are in charge for performing the audio tests
+(depends on the operation mode, see above):
+
+- VKAT ("Validation Kit Audio Test", also known as VBoxAudioTest):
+  A binary which can perform the standalone audio tests mentioned above, as well
+  as acting as the guest and host service(s) when performing manual or automated
+  tests. It also includes the analysis / verification of audio test sets.
+  VKAT also is included in host installations and Guest Additions since
+  VirtualBox 7.0 to give customers and end users the opportunity to test and
+  verify the audio stack.
+
+  Additional features include:
+    * Automatic probing of audio backends ("--probe-backends")
+    * Manual playback of test tones ("play -t")
+    * Manual playback of .WAV files ("play <WAV-File>")
+    * Manual recording to .WAV files ("recording <WAV-File>")
+    * Manual device enumeration (sub command "enum")
+    * Manual (re-)verification of test sets (sub command "verify")
+    * Self-contained self tests (sub command "selftest")
+
+  See the syntax help ("--help") for more.
+
+- ATS ("Audio Testing Service"): Component which is being used by VKAT and the
+  Validation Kit audio driver (backend) to communicate across guest and host
+  boundaries. Currently using a TCP/IP transport layer. Also works with VMs
+  which are configured with NAT networking ("reverse connection").
+
+- Validation Kit audio test driver (tdAudioTest.py): Used for integrating and
+  invoking VKAT for manual and automated tests via the Validation Kit framework
+  (Test Manager). Optional.
+
+- Validation Kit audio driver (backend): A dedicated audio backend which
+  communicates with VKAT running on the same host to perform the actual audio
+  tests on a VirtualBox installation. This makes it possible to test the full
+  audio stack on a running VM without any additional / external tools.
+
+  On guest playback, data will be recorded, on guest recording, data will be
+  injected from the host into the audio stack.
+
+- Test sets contain
+    - a test manifest with all information required (vkat_manifest.ini)
+    - the generated / captured audio data (as raw PCM)
+
+  and are either packed as .tar.gz archives or consist of a dedicated directory
+  per test set.
+
+  There always must be at least two test sets - one from the host side and one
+  from the guest side - to perform a verification.
+
+  Each test set contains a test tag so that matching test sets can be
+  identified.
+
+The above components are also included in VirtualBox release builds and can be
+optionally enabled (disabled by default).
+
+
+Workflow for a single test
+--------------------------
+
+When a single test is being executed on a running VM, the following (simplified)
+workflow applies:
+
+- VKAT on the host connects to VKAT running on the guest (via ATS, also can be a
+  remote machine in theory).
+- VKAT on the host connects to Validation Kit audio driver on the host
+  (via ATS, also can be a remote machine in theory).
+- For example, when doing playback tests, VKAT on the host ...
+    * ... tells the Validation Kit audio driver to start recording
+          guest playback.
+    * ... tells the VKAT on the guest to start playing back audio data.
+    * ... gathers all test data (generated from/by the guest and recorded from
+          the host) as separate test sets.
+    * ... starts verification / analysis of the test sets.
+
+
+Setup instructions
+------------------
+
+- VM needs to be configured to have audio emulation and audio testing enabled
+  (via extra-data, set "VBoxInternal2/Audio/Debug/Enabled" to "true").
+- Audio input / output for the VM needs to be enabled (depending on the test).
+- VKAT needs to be running on the guest and be able to connect to the host via
+  TCP/IP.
+
+  Note: Depending on the VM's networking configuration there might be further
+        steps necessary in order to be able to reach the host from the guest.
+        See the VirtualBox manual for more information.
+
+
+Performing a manual test
+------------------------
+
+- Follow "Setup instructions".
+- Start VKAT on the guest (in "guest mode", e.g. "test --mode guest").
+- Start VKAT on the host (in "host mode", e.g. "test --mode host") with
+  selected test(s).
+- By default the test verification will be done automatically after running the
+  tests.
+
+
+Performing manual verification
+------------------------------
+
+VKAT can manually be used with the "verify" sub command in order to (re-)verify
+previously generated test sets. It then will return different exit codes based
+on the verification result.
+
+
+Performing an automated test
+----------------------------
+
+- TxS (Test E[x]ecution Service) has to be up and running (part of the
+  Validation Kit) on the guest.
+- Invoke the tdAudioTest.py test driver, either manually or fully automated
+  via Test Manager.
+
+
+Troubleshooting
+---------------
+
+- Make sure that audio device emulation is enabled and can be used within the
+  guest. Also, audio input / output has to be enabled, depending on the tests.
+- Make sure that the guest's VKAT instance can reach the host via the selected
+  transport lay (TCP/IP by default).
+- Increase the hosts audio logging level
+  (via extra-data, set "VBoxInternal2/Audio/Debug/Level" to "5").
+- Increase VKAT's verbosity level (add "-v", can be specified multiple times).
+- Check if the the VBox release log contains any warnings / errors with the
+  "ValKit:" prefix.
+
+
+:Status: $Id$
+:Copyright: Copyright (C) 2021 Oracle Corporation.
Index: /trunk/src/VBox/ValidationKit/utils/audio/readme.txt
===================================================================
--- /trunk/src/VBox/ValidationKit/utils/audio/readme.txt	(revision 92474)
+++ /trunk/src/VBox/ValidationKit/utils/audio/readme.txt	(revision 92474)
@@ -0,0 +1,2 @@
+
+See docs/VBoxAudioValidationKitReadMe.txt  or docs/VBoxAudioValidationKitReadMe.html.
