# Copyright (c) 2010 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import logging import os import tempfile from autotest_lib.client.bin import test, utils from autotest_lib.client.common_lib import error from autotest_lib.client.cros.audio import audio_spec from autotest_lib.client.cros.audio import alsa_utils from autotest_lib.client.cros.audio import cras_utils DURATION = 3 TOLERANT_RATIO = 0.1 class audio_Microphone(test.test): version = 1 def check_recorded_filesize( self, filesize, duration, channels, rate, bits=16): expected = duration * channels * (bits / 8) * rate if abs(float(filesize) / expected - 1) > TOLERANT_RATIO: raise error.TestFail('File size not correct: %d' % filesize) def verify_alsa_capture(self, channels, rate, device, bits=16): recorded_file = tempfile.NamedTemporaryFile() alsa_utils.record( recorded_file.name, duration=DURATION, channels=channels, bits=bits, rate=rate, device=device) self.check_recorded_filesize( os.path.getsize(recorded_file.name), DURATION, channels, rate, bits) def verify_cras_capture(self, channels, rate): recorded_file = tempfile.NamedTemporaryFile() cras_utils.capture( recorded_file.name, duration=DURATION, channels=channels, rate=rate) self.check_recorded_filesize( os.path.getsize(recorded_file.name), DURATION, channels, rate) def run_once(self): cras_device_name = cras_utils.get_selected_input_device_name() logging.debug("Selected input device name=%s", cras_device_name) if cras_device_name is None: board_type = utils.get_board_type() if not audio_spec.has_internal_microphone(board_type): logging.debug("No internal mic. Skipping the test.") return raise error.TestFail("Fail to get selected input device.") # Mono and stereo capturing should work fine @ 44.1KHz and 48KHz. # Verify recording using ALSA utils. alsa_device_name = alsa_utils.convert_device_name(cras_device_name) channels = alsa_utils.get_record_device_supported_channels( alsa_device_name) if channels is None: raise error.TestFail("Fail to get supported channels for %s", alsa_device_name) for c in channels: self.verify_alsa_capture(c, 44100, alsa_device_name) self.verify_alsa_capture(c, 48000, alsa_device_name) # Verify recording of CRAS. self.verify_cras_capture(1, 44100) self.verify_cras_capture(1, 48000) self.verify_cras_capture(2, 48000) self.verify_cras_capture(2, 44100)