Loading...
Loading...
Text-to-speech and voice narration. Triggers on: "朗读这段", "配音", "TTS", "语音合成", "text to speech", "read this aloud", "convert to speech", "voice narration", "read aloud".
npx skill4agent add marswaveai/skills tts/podcast/explainer/image-gen/v1/tts/v1/speechshared/authentication.mdshared/common-patterns.mdshared/config-pattern.mdshared/speaker-selection.md~/Downloads//tmp/.listenhub/tts/| Signal | Mode |
|---|---|
| "多角色", "脚本", "对话", "script", "dialogue", "multi-speaker" | Script |
| Multiple characters mentioned by name or role | Script |
| Input contains structured segments (A: ..., B: ...) | Script |
| Single paragraph of text, no character markers | Quick |
| "读一下", "read this", "TTS", "朗读" with plain text | Quick |
| Ambiguous | Quick (default) |
shared/config-pattern.mdshared/config-pattern.mdmkdir -p ".listenhub/tts"
echo '{"outputDir":".listenhub","outputMode":"inline","language":null,"defaultSpeakers":{}}' > ".listenhub/tts/config.json"
CONFIG_PATH=".listenhub/tts/config.json"
# (or $HOME/.listenhub/tts/config.json for global)当前配置 (tts):
输出方式:{inline / download / both}
语言偏好:{zh / en / 未设置}
默认主播:{speakerName / 未设置}shared/output-mode.mdnull# Save outputMode; only update language if user picked one
# Follow shared/output-mode.md § Save to Config
NEW_CONFIG=$(echo "$CONFIG" | jq --arg m "$OUTPUT_MODE" '. + {"outputMode": $m}')
# If language was chosen (not "每次手动选择"):
NEW_CONFIG=$(echo "$NEW_CONFIG" | jq --arg lang "zh" '. + {"language": $lang}')
echo "$NEW_CONFIG" > "$CONFIG_PATH"
CONFIG=$(cat "$CONFIG_PATH")defaultSpeakersPOST /v1/tts"What text would you like me to read aloud?"
config.defaultSpeakers.{language}[0]GET /speakers/list?language={detected-language}shared/speaker-selection.mdQuestion: "Save {voice name} as your default voice for {language}?"
Options:
- "Yes" — update .listenhub/tts/config.json
- "No" — use for this session onlyReady to generate:
Text: "{first 80 chars}..."
Voice: {voice name}
Proceed?curl -sS -X POST "https://api.marswave.ai/openapi/v1/tts" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "...", "voice": "..."}' \
--output /tmp/tts-output.mp3OUTPUT_MODEshared/output-mode.md$(date +%s)inlinebothaudioUrlJOB_ID=$(date +%s)
curl -sS -X POST "https://api.marswave.ai/openapi/v1/tts" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "...", "voice": "..."}' \
--output /tmp/tts-${JOB_ID}.mp3/tmp/tts-{jobId}.mp3Audio generated!downloadbothJOB_ID=$(date +%s)
DATE=$(date +%Y-%m-%d)
JOB_DIR=".listenhub/tts/${DATE}-${JOB_ID}"
mkdir -p "$JOB_DIR"
curl -sS -X POST "https://api.marswave.ai/openapi/v1/tts" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": "...", "voice": "..."}' \
--output "${JOB_DIR}/${JOB_ID}.mp3"Audio generated!
已下载到 .listenhub/tts/{YYYY-MM-DD}-{jobId}/:
{jobId}.mp3POST /v1/speech"Please provide the script with speaker assignments. Format: each line as. I'll convert it."SpeakerName: text content
scriptsconfig.defaultSpeakers.{language}GET /speakers/list?language={detected-language}shared/speaker-selection.mdQuestion: "Save these voice assignments for future sessions?"
Options:
- "Yes" — update defaultSpeakers in .listenhub/tts/config.json
- "No" — use for this session onlyReady to generate:
Characters:
{name}: {voice}
{name}: {voice}
Segments: {count}
Title: (auto-generated)
Proceed?# Write request to temp file
cat > /tmp/lh-speech-request.json << 'ENDJSON'
{
"scripts": [
{"content": "...", "speakerId": "..."},
{"content": "...", "speakerId": "..."}
]
}
ENDJSON
# Submit
curl -sS -X POST "https://api.marswave.ai/openapi/v1/speech" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/lh-speech-request.json
rm /tmp/lh-speech-request.jsonOUTPUT_MODEshared/output-mode.mdinlinebothaudioUrlsubtitlesUrlAudio generated!
在线收听:{audioUrl}
字幕:{subtitlesUrl}
时长:{audioDuration / 1000}s
消耗积分:{credits}downloadbothDATE=$(date +%Y-%m-%d)
JOB_DIR=".listenhub/tts/${DATE}-{jobId}"
mkdir -p "$JOB_DIR"
curl -sS -o "${JOB_DIR}/{jobId}.mp3" "{audioUrl}".listenhub/tts/config.jsonshared/config-pattern.mddefaultSpeakers.{language}[0]speakerIddefaultSpeakers.{language}languageshared/api-tts.mdshared/api-speakers.mdshared/speaker-selection.mdshared/common-patterns.mdshared/common-patterns.md"TTS this: The server will be down for maintenance at midnight."
quickVoicenullPOST /v1/ttsinputvoice/tmp/tts-output.mp3"帮我做一段双人对话配音,A说:欢迎大家,B说:谢谢邀请"
scriptVoiceszhPOST /v1/speechaudioUrlsubtitlesUrl