#!/usr/bin/env python3 """ Test script for Marcus env — TTS + Audio playback on G1 built-in speaker. Deploy to robot: scp test_marcus_audio.py unitree@192.168.123.164:/home/unitree/Marcus/ Run on robot: conda activate marcus && python3 ~/Marcus/test_marcus_audio.py """ import sys import time import json import struct import math def check_sdk(): """Check if marcus env has the required SDK methods.""" print("=== SDK CHECK ===") try: from unitree_sdk2py.g1.audio.g1_audio_client import AudioClient from unitree_sdk2py.rpc.client import Client print(" unitree_sdk2py: installed") has_bin = hasattr(Client, '_CallRequestWithParamAndBin') print(f" _CallRequestWithParamAndBin: {'YES' if has_bin else 'NO (need upgrade: pip install --upgrade unitree_sdk2py)'}") return has_bin except ImportError: print(" unitree_sdk2py: NOT INSTALLED") print(" Run: pip install unitree_sdk2py") return False def test_tts(): """Test TTS on G1 speaker.""" from unitree_sdk2py.core.channel import ChannelFactoryInitialize from unitree_sdk2py.g1.audio.g1_audio_client import AudioClient print("\n=== TTS TEST ===") ChannelFactoryInitialize(0, "eth0") c = AudioClient() c.SetTimeout(10.0) c.Init() # Volume code, vol = c.GetVolume() print(f" Volume: {vol}") c.SetVolume(100) # LED print(" LED -> Green") c.LedControl(0, 255, 0) time.sleep(1) c.LedControl(0, 0, 0) # TTS English print(" TTS: 'Hello, Marcus is ready'") c.TtsMaker("Hello, Marcus is ready", 0) time.sleep(4) print(" TTS test done.") def test_audio_playback(): """Test audio playback with a sine tone.""" from unitree_sdk2py.core.channel import ChannelFactoryInitialize from unitree_sdk2py.g1.audio.g1_audio_client import AudioClient from unitree_sdk2py.g1.audio.g1_audio_api import ( ROBOT_API_ID_AUDIO_START_PLAY, ROBOT_API_ID_AUDIO_STOP_PLAY, ) print("\n=== AUDIO PLAYBACK TEST ===") ChannelFactoryInitialize(0, "eth0") c = AudioClient() c.SetTimeout(10.0) c.Init() c.SetVolume(100) # Generate 2s sine tone at 440Hz rate = 16000 duration = 2 pcm = b"" for i in range(rate * duration): val = int(30000 * math.sin(2 * math.pi * 440 * i / rate)) pcm += struct.pack("