test.test_sound 源代码

import asyncio

from mini.apis import errors
from mini.apis.api_sound import ChangeRobotVolume, ChangeRobotVolumeResponse
from mini.apis.api_sound import FetchAudioList, GetAudioListResponse, AudioSearchType
from mini.apis.api_sound import PlayAudio, PlayAudioResponse, AudioStorageType
# from mini.apis.api_sound import PlayOnlineMusic, MusicResponse
from mini.apis.api_sound import StartPlayTTS, StopPlayTTS, ControlTTSResponse
from mini.apis.api_sound import StopAllAudio, StopAudioResponse
from mini.apis.base_api import MiniApiResultType
from mini.dns.dns_browser import WiFiDevice
from test.test_connect import test_connect, shutdown
from test.test_connect import test_get_device_by_name, test_start_run_program



# 测试text合成声音
[文档]async def test_play_tts(): """测试播放tts 使机器人开始播放一段tts,内容为"你好, 我是悟空, 啦啦啦",并等待结果 #ControlTTSResponse.isSuccess : 是否成功 #ControlTTSResponse.resultCode : 返回码 """ # is_serial:串行执行 # text:要合成的文本 block: StartPlayTTS = StartPlayTTS(text="你好, 我是悟空, 啦啦啦") # 返回元组, response是个ControlTTSResponse (resultType, response) = await block.execute() print(f'test_play_tts result: {response}') # StartPlayTTS block的response包含resultCode和isSuccess # 如果resultCode !=0 可以通过errors.get_speech_error_str(response.resultCode)) 查询错误描述信息 print('resultCode = {0}, error = {1}'.format(response.resultCode, errors.get_speech_error_str(response.resultCode))) assert resultType == MiniApiResultType.Success, 'test_play_tts timetout' assert response is not None and isinstance(response, ControlTTSResponse), 'test_play_tts result unavailable' assert response.isSuccess, 'test_play_tts failed'
[文档]async def test_stop_play_tts(): """测试停止播放tts 使机器人开始播放一段长文本tts,内容为"你好, 我是悟空, 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦",不等待结果 2s后,使机器人停止播放tts #ControlTTSResponse.isSuccess : 是否成功 #ControlTTSResponse.resultCode : 返回码 """ # is_serial:串行执行 # text:要合成的文本 block: StartPlayTTS = StartPlayTTS(is_serial=False, text="你好, 我是悟空, 啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦") # 返回bool 表示是否发送成功 await block.execute() await asyncio.sleep(2) (resultType, response) = await StopPlayTTS().execute() print(f'test_stop_play_tts result: {response}') # StopPlayTTS block的response包含resultCode和isSuccess # 如果resultCode !=0 可以通过errors.get_speech_error_str(response.resultCode)) 查询错误描述信息 print('resultCode = {0}, error = {1}'.format(response.resultCode, errors.get_speech_error_str(response.resultCode))) assert resultType == MiniApiResultType.Success, 'test_stop_play_tts timetout' assert response is not None and isinstance(response, ControlTTSResponse), 'test_stop_play_tts result unavailable' assert response.isSuccess, 'test_stop_play_tts failed'
# 测试播放音效(在线)
[文档]async def test_play_online_audio(): """测试播放在线音效 使机器人播放一段在线音效,例如"http://hao.haolingsheng.com/ring/000/995/52513bb6a4546b8822c89034afb8bacb.mp3" 支持格式有mp3,amr,wav 等 并等待结果 #PlayAudioResponse.isSuccess : 是否成功 #PlayAudioResponse.resultCode : 返回码 """ # 播放音效, url表示要播放的音效列表 block: PlayAudio = PlayAudio( url="http://hao.haolingsheng.com/ring/000/995/52513bb6a4546b8822c89034afb8bacb.mp3", storage_type=AudioStorageType.NET_PUBLIC) # response是个PlayAudioResponse (resultType, response) = await block.execute() print(f'test_play_online_audio result: {response}') print('resultCode = {0}, error = {1}'.format(response.resultCode, errors.get_speech_error_str(response.resultCode))) assert resultType == MiniApiResultType.Success, 'test_play_online_audio timetout' assert response is not None and isinstance(response, PlayAudioResponse), 'test_play_online_audio result unavailable' assert response.isSuccess, 'test_play_online_audio failed'
[文档]async def test_play_local_audio(): """测试播放本地音效 使机器人播放一段本地内置音效,音效名称为"read_016",并等待结果 #PlayAudioResponse.isSuccess : 是否成功 #PlayAudioResponse.resultCode : 返回码 """ block: PlayAudio = PlayAudio( url="read_016", storage_type=AudioStorageType.PRESET_LOCAL) # response是个PlayAudioResponse (resultType, response) = await block.execute() print(f'test_play_local_audio result: {response}') print('resultCode = {0}, error = {1}'.format(response.resultCode, errors.get_speech_error_str(response.resultCode))) assert resultType == MiniApiResultType.Success, 'test_play_local_audio timetout' assert response is not None and isinstance(response, PlayAudioResponse), 'test_play_local_audio result unavailable' assert response.isSuccess, 'test_play_local_audio failed'
# 测试获取机器人的音效资源
[文档]async def test_get_audio_list(): """测试获取音效列表 获取机器人内置的音效列表,并等待结果 #GetAudioListResponse.audio ([Audio]) : 音效列表 #Audio.name : 音效名 #Audio.suffix : 音效后缀 #GetAudioListResponse.isSuccess : 是否成功 #GetAudioListResponse.resultCode : 返回码 """ # search_type: AudioSearchType.INNER 是指机器人内置的不可修改的音效, AudioSearchType.CUSTOM 是放置在sdcard/customize/music目录下可别开发者修改的音效 block: FetchAudioList = FetchAudioList(search_type=AudioSearchType.INNER) # response是个GetAudioListResponse (resultType, response) = await block.execute() print(f'test_get_audio_list result: {response}') assert resultType == MiniApiResultType.Success, 'test_get_audio_list timetout' assert response is not None and isinstance(response, GetAudioListResponse), 'test_play_audio result unavailable' assert response.isSuccess, 'test_get_audio_list failed'
# 测试停止正在播放的tts
[文档]async def test_stop_audio_tts(): """测试停止所有正在播放的音频 先播放一段tts,3s后,停止所有所有音效,并等待结果 #StopAudioResponse.isSuccess : 是否成功  #StopAudioResponse.resultCode : 返回码 """ # 设置is_serial=False, 表示只需将指令发送给机器人,await不需要等机器人执行完结果再返回 block: StartPlayTTS = StartPlayTTS(is_serial=False, text="你让我说,让我说,不要打断我,不要打断我,不要打断我") response = await block.execute() print(f'test_stop_audio.play_tts: {response}') await asyncio.sleep(3) # 停止所有声音 block: StopAllAudio = StopAllAudio() (resultType, response) = await block.execute() print(f'test_stop_audio:{response}') block: StartPlayTTS = StartPlayTTS(text="第二次, 你让我说,让我说,不要打断我,不要打断我,不要打断我") asyncio.create_task(block.execute()) print(f'test_stop_audio.play_tts: {response}') await asyncio.sleep(3) assert resultType == MiniApiResultType.Success, 'test_stop_audio timetout' assert response is not None and isinstance(response, StopAudioResponse), 'test_stop_audio result unavailable' assert response.isSuccess, 'test_stop_audio failed'
# 测试, 改变机器人的音量
[文档]async def test_change_robot_volume(): """调整机器人音量demo 设置机器人音量为0.5,等待回复结果 #ChangeRobotVolumeResponse.isSuccess : 是否成功 #ChangeRobotVolumeResponse.resultCode : 返回码 """ # volume: 0~1.0 block: ChangeRobotVolume = ChangeRobotVolume(volume=0.5) # response:ChangeRobotVolumeResponse (resultType, response) = await block.execute() print(f'test_change_robot_volume result:{response}') assert resultType == MiniApiResultType.Success, 'test_change_robot_volume timetout' assert response is not None and isinstance(response, ChangeRobotVolumeResponse), 'test_change_robot_volume result unavailable' assert response.isSuccess, 'get_action_list failed'
[文档]async def main(): device: WiFiDevice = await test_get_device_by_name() if device: await test_connect(device) await test_start_run_program() await test_speech_recognise_once() await test_play_tts() await test_stop_play_tts() await test_get_audio_list() await test_play_local_audio() await test_play_online_audio() await test_stop_audio_tts() await test_change_robot_volume() await shutdown()
if __name__ == '__main__': asyncio.run(main())