1 # Copyright 2016 The Chromium OS 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 6 import tempfile 7 import time 8 9 import common 10 from autotest_lib.client.common_lib import error 11 from autotest_lib.client.common_lib import site_utils 12 from autotest_lib.client.common_lib.feedback import client 13 from autotest_lib.server import test 14 from autotest_lib.server.brillo import audio_utils 15 16 17 # Number of channels to generate. 18 _DEFAULT_NUM_CHANNELS = 2 19 # Sine wave sample rate (44.1kHz). 20 _DEFAULT_SAMPLE_RATE = 44100 21 # Sine wave default sample format is signed 16-bit PCM (two bytes). 22 _DEFAULT_SAMPLE_WIDTH = 2 23 # Default sine wave frequency. 24 _DEFAULT_SINE_FREQUENCY = 440 25 # Default duration of the sine wave in seconds. 26 _DEFAULT_DURATION_SECS = 10 27 28 class brillo_DecodingAudioTest(test.test): 29 """Verify that basic audio playback works.""" 30 version = 1 31 32 33 def run_once(self, host, fb_client, file_format, 34 duration_secs=_DEFAULT_DURATION_SECS): 35 """Runs the test. 36 37 @param host: A host object representing the DUT. 38 @param fb_client: A feedback client implementation. 39 @param file_format: A string represeting the format to the audio 40 encoding to use. 41 @param duration_secs: Duration to play file for. 42 """ 43 self.temp_dir = tempfile.mkdtemp(dir=fb_client.tmp_dir) 44 with fb_client.initialize(self, host): 45 logging.info('Testing silent playback to get silence threshold') 46 fb_query = fb_client.new_query(client.QUERY_AUDIO_PLAYBACK_SILENT) 47 fb_query.prepare() 48 time.sleep(duration_secs) 49 fb_query.validate() 50 51 logging.info('Generate mp3 file') 52 local_filename, dut_play_file = audio_utils.generate_sine_file( 53 host, _DEFAULT_NUM_CHANNELS, _DEFAULT_SAMPLE_RATE, 54 _DEFAULT_SAMPLE_WIDTH, _DEFAULT_DURATION_SECS, 55 _DEFAULT_SINE_FREQUENCY, self.temp_dir, file_format) 56 57 fb_query = fb_client.new_query(client.QUERY_AUDIO_PLAYBACK_AUDIBLE) 58 59 fb_query.prepare(sample_width=_DEFAULT_SAMPLE_WIDTH, 60 sample_rate=_DEFAULT_SAMPLE_RATE, 61 duration_secs=duration_secs, 62 num_channels=_DEFAULT_NUM_CHANNELS) 63 64 playback_cmd = 'slesTest_playFdPath %s 0' % dut_play_file 65 logging.info('Testing decode playback') 66 host.run(playback_cmd) 67 fb_query.validate(audio_file=local_filename) 68