| # Copyright 2016 The Chromium OS 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 tempfile |
| import time |
| |
| import common |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib.feedback import client |
| from autotest_lib.server import test |
| from autotest_lib.server.brillo import audio_utils |
| |
| |
| # Number of channels to generate. |
| _DEFAULT_NUM_CHANNELS = 2 |
| # Sine wave sample rate (44.1kHz). |
| _DEFAULT_SAMPLE_RATE = 44100 |
| # Sine wave default sample format is signed 16-bit PCM (two bytes). |
| _DEFAULT_SAMPLE_WIDTH = 2 |
| # Default sine wave frequency. |
| _DEFAULT_SINE_FREQUENCY = 440 |
| # Default duration of the sine wave in seconds. |
| _DEFAULT_DURATION_SECS = 10 |
| |
| class brillo_DecodingAudioTest(test.test): |
| """Verify that basic audio playback works.""" |
| version = 1 |
| |
| |
| def run_once(self, host, fb_client, file_format, |
| duration_secs=_DEFAULT_DURATION_SECS): |
| """Runs the test. |
| |
| @param host: A host object representing the DUT. |
| @param fb_client: A feedback client implementation. |
| @param file_format: A string represeting the format to the audio |
| encoding to use. |
| @param duration_secs: Duration to play file for. |
| """ |
| self.temp_dir = tempfile.mkdtemp(dir=fb_client.tmp_dir) |
| with fb_client.initialize(self, host): |
| logging.info('Testing silent playback to get silence threshold') |
| fb_query = fb_client.new_query(client.QUERY_AUDIO_PLAYBACK_SILENT) |
| fb_query.prepare() |
| time.sleep(duration_secs) |
| fb_query.validate() |
| |
| logging.info('Generate mp3 file') |
| local_filename, dut_play_file = audio_utils.generate_sine_file( |
| host, _DEFAULT_NUM_CHANNELS, _DEFAULT_SAMPLE_RATE, |
| _DEFAULT_SAMPLE_WIDTH, _DEFAULT_DURATION_SECS, |
| _DEFAULT_SINE_FREQUENCY, self.temp_dir, file_format) |
| |
| fb_query = fb_client.new_query(client.QUERY_AUDIO_PLAYBACK_AUDIBLE) |
| |
| fb_query.prepare(sample_width=_DEFAULT_SAMPLE_WIDTH, |
| sample_rate=_DEFAULT_SAMPLE_RATE, |
| duration_secs=duration_secs, |
| num_channels=_DEFAULT_NUM_CHANNELS) |
| |
| playback_cmd = 'slesTest_playFdPath %s 0' % dut_play_file |
| logging.info('Testing decode playback') |
| host.run(playback_cmd) |
| fb_query.validate(audio_file=local_filename) |