Home | History | Annotate | Download | only in audio_CrasLoopback
      1 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging, os, time
      6 
      7 from autotest_lib.client.bin import utils
      8 from autotest_lib.client.common_lib import error
      9 from autotest_lib.client.cros.audio import audio_helper
     10 from autotest_lib.client.cros.audio import cmd_utils
     11 from autotest_lib.client.cros.audio import cras_utils
     12 
     13 
     14 TEST_DURATION = 1
     15 
     16 class audio_CrasLoopback(audio_helper.cras_rms_test):
     17     """Verifies audio playback and capture function."""
     18     version = 1
     19 
     20     @staticmethod
     21     def wait_for_active_stream_count(expected_count):
     22         utils.poll_for_condition(
     23             lambda: cras_utils.get_active_stream_count() == expected_count,
     24             exception=error.TestError(
     25                 'Timeout waiting active stream count to become %d' %
     26                  expected_count))
     27 
     28 
     29     def run_once(self):
     30         """Entry point of this test."""
     31 
     32         # Multitone wav file lasts 10 seconds
     33         wav_path = os.path.join(self.bindir, '10SEC.wav')
     34 
     35         noise_file = os.path.join(self.resultsdir, 'cras_noise.wav')
     36         recorded_file = os.path.join(self.resultsdir, 'cras_recorded.wav')
     37 
     38         # Record a sample of "silence" to use as a noise profile.
     39         cras_utils.capture(noise_file, duration=1)
     40 
     41         self.wait_for_active_stream_count(0)
     42         p = cmd_utils.popen(cras_utils.playback_cmd(wav_path))
     43         try:
     44             self.wait_for_active_stream_count(1)
     45             cras_utils.capture(recorded_file, duration=TEST_DURATION)
     46 
     47             # Make sure the audio is still playing.
     48             if p.poll() != None:
     49                 raise error.TestError('playback stopped')
     50         finally:
     51             cmd_utils.kill_or_log_returncode(p)
     52 
     53         rms_value = audio_helper.reduce_noise_and_get_rms(
     54                 recorded_file, noise_file)[0]
     55         self.write_perf_keyval({'rms_value': rms_value})
     56 
     57