33313e88f8
Salvaged from PR #68063 (@malaiwah). MatrixAdapter.send_voice now transcodes any non-Ogg audio to Ogg/Opus at the adapter boundary (best-effort — the original file is sent unchanged when ffmpeg is unavailable), so MSC3245 voice bubbles render even when a caller hands the adapter MP3/WAV audio. _matrix_voice_metadata_for_file probing now runs via asyncio.to_thread so ffprobe/ffmpeg subprocess timeouts can't stall the adapter event loop. The PR's tools/tts_tool.py want_opus hunk was dropped: main's OPUS_VOICE_PLATFORMS set (PR #73072) already includes matrix; the Matrix opus-routing test is kept. Refs #14841