From 3bb311ad8e0f10617805c8737d92d13e6a627818 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Sun, 12 Jul 2026 01:10:41 +0900 Subject: waveファイル名可変対応 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mml_composemusic_mcp/server.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/mml_composemusic_mcp/server.py') diff --git a/src/mml_composemusic_mcp/server.py b/src/mml_composemusic_mcp/server.py index 04b5546..0a09131 100644 --- a/src/mml_composemusic_mcp/server.py +++ b/src/mml_composemusic_mcp/server.py @@ -1,6 +1,7 @@ # MCP server exposing compose_mml tool. import argparse +from datetime import datetime from pathlib import Path from fastmcp import FastMCP @@ -20,6 +21,19 @@ def _is_error(errors: list[ErrorDetail]) -> bool: return any(e.severity == "error" for e in errors) +def _generate_wav_filename() -> str: + """Generate a unique WAV filename based on the current timestamp. + + Format: output_YYYYMMDD_HHMMSS_mmm.wav + Milliseconds are included to reduce the chance of collisions when + multiple compose requests are issued in rapid succession. + """ + now = datetime.now() + # %f gives microseconds (6 digits); keep the first 3 for milliseconds. + timestamp = now.strftime("%Y%m%d_%H%M%S_") + now.strftime("%f")[:3] + return f"output_{timestamp}.wav" + + def _split_errors(errors: list[ErrorDetail]) -> tuple[list[dict], list[dict]]: errs = [e.to_dict() for e in errors if e.severity == "error"] warns = [e.to_dict() for e in errors if e.severity == "warning"] @@ -143,7 +157,7 @@ def compose_mml( "note_sequence": note_sequence_dict, "validation": {"errors": errors_list, "warnings": warnings_list}, } - wav_path = OUTPUT_DIR / "output.wav" + wav_path = OUTPUT_DIR / _generate_wav_filename() wav_errors = write_wav(wav_path, wave_data, sample_rate) errors.extend(wav_errors) errors_list, warnings_list = _split_errors(errors) -- cgit v1.2.3