blob: 74e8705b32a4867d5100b44398e051b894712642 [file] [log] [blame]
# Lint as: python3
"""Tests for testing audio capture in android bt target controller.
location of the controller:
blueberry.controllers.android_bt_target_device
Before the test, the music file should be copied to the location of the
pri_phone. The a2dp sink phone should be with the android build that can
support a2dp sink profile (for example, the git_master-bds-dev).
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import logging
import time
from mobly import asserts
from mobly import test_runner
from blueberry.utils import blueberry_base_test
from blueberry.utils import bt_test_utils
MUSIC_FILE = '1khz.wav'
class BluetoothAudioCaptureTest(blueberry_base_test.BlueberryBaseTest):
def setup_class(self):
"""Standard Mobly setup class."""
super(BluetoothAudioCaptureTest, self).setup_class()
self.derived_bt_device = self.derived_bt_devices[0]
for device in self.android_devices:
device.init_setup()
device.sl4a_setup()
self.pri_phone = self.android_devices[0]
self.mac_address = self.derived_bt_device.get_bluetooth_mac_address()
self.derived_bt_device.activate_pairing_mode()
self.pri_phone.sl4a.bluetoothDiscoverAndBond(self.mac_address)
self.pri_phone.wait_for_connection_success(self.mac_address)
# Gives more time for the pairing between the pri_phone and the
# derived_bt_device (the android bt target device)
time.sleep(3)
self.derived_bt_device.add_sec_ad_device(self.pri_phone)
self.derived_bt_device.disconnect_all()
self.duration = self.derived_bt_device.audio_params['duration']
self.recorded_duration = 0
def setup_test(self):
"""Setup for bluetooth latency test."""
logging.info('Setup Test for audio capture test')
super(BluetoothAudioCaptureTest, self).setup_test()
asserts.assert_true(self.derived_bt_device.a2dp_sink_connect(),
'Failed to establish A2dp Sink connection')
def test_audio_capture(self):
"""Tests the audio capture for the android bt target device."""
music_file = self.derived_bt_device.audio_params.get(
'music_file', MUSIC_FILE)
music_file = 'file:///sdcard/Music/{}'.format(music_file)
self.pri_phone.sl4a.mediaPlayOpen(music_file)
self.pri_phone.sl4a.mediaPlaySetLooping()
self.pri_phone.sl4a.mediaPlayStart()
time.sleep(3)
self.pri_phone.log.info(self.pri_phone.sl4a.mediaPlayGetInfo())
self.derived_bt_device.start_audio_capture()
time.sleep(self.duration)
audio_captured = self.derived_bt_device.stop_audio_capture()
self.pri_phone.sl4a.mediaPlayStop()
self.pri_phone.sl4a.mediaPlayClose()
self.derived_bt_device.log.info('Audio play and record stopped')
self.recorded_duration = bt_test_utils.get_duration_seconds(audio_captured)
self.derived_bt_device.log.info(
'The capture duration is %s s and the recorded duration is %s s',
self.duration, self.recorded_duration)
def teardown_class(self):
logging.info('Factory resetting Bluetooth on devices.')
self.pri_phone.factory_reset_bluetooth()
self.derived_bt_device.factory_reset_bluetooth()
super(BluetoothAudioCaptureTest, self).teardown_class()
self.derived_bt_device.stop_all_services()
self.record_data({
'Test Name': 'test_audio_capture',
'sponge_properties': {
'duration': self.duration,
'recorded duration': self.recorded_duration
}
})
if __name__ == '__main__':
test_runner.main()