Add play_audio_base64 tool to MCP server
This commit is contained in:
@@ -251,6 +251,18 @@ class MCPServer:
|
|||||||
"filename": {"type": "string", "description": "Destination file path (e.g. 'recording.pcm')", "default": "recording.pcm"}
|
"filename": {"type": "string", "description": "Destination file path (e.g. 'recording.pcm')", "default": "recording.pcm"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "play_audio_base64",
|
||||||
|
"description": "Decode a base64-encoded WAV file and play it directly on the speaker.",
|
||||||
|
"inputSchema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"wav_base64": {"type": "string", "description": "Base64 encoded string of the WAV audio file"},
|
||||||
|
"volume": {"type": "integer", "description": "Volume from 0 to 100 (default 50)", "default": 50}
|
||||||
|
},
|
||||||
|
"required": ["wav_base64"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -477,5 +489,38 @@ class MCPServer:
|
|||||||
else:
|
else:
|
||||||
raise RuntimeError("Audio recording failed.")
|
raise RuntimeError("Audio recording failed.")
|
||||||
|
|
||||||
|
elif name == "play_audio_base64":
|
||||||
|
b64_data = args.get("wav_base64")
|
||||||
|
vol = int(args.get("volume", 50))
|
||||||
|
vol = max(0, min(100, vol))
|
||||||
|
|
||||||
|
if not b64_data:
|
||||||
|
raise ValueError("Missing wav_base64 parameter.")
|
||||||
|
|
||||||
|
import binascii
|
||||||
|
try:
|
||||||
|
audio_bytes = binascii.a2b_base64(b64_data)
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"Failed to decode base64 audio: {e}")
|
||||||
|
|
||||||
|
filename = "temp_play.wav"
|
||||||
|
with open(filename, "wb") as f:
|
||||||
|
f.write(audio_bytes)
|
||||||
|
|
||||||
|
try:
|
||||||
|
from audio_util import play_wav
|
||||||
|
success = play_wav(filename, volume=vol)
|
||||||
|
finally:
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
os.remove(filename)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if success:
|
||||||
|
return "Successfully played base64 audio stream."
|
||||||
|
else:
|
||||||
|
raise RuntimeError("Failed to play decoded audio stream. Check format (16kHz 16-bit PCM WAV recommended).")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown tool: {name}")
|
raise ValueError(f"Unknown tool: {name}")
|
||||||
|
|||||||
Reference in New Issue
Block a user