[{"data":1,"prerenderedAt":683},["ShallowReactive",2],{"guide-\u002Fguides-zh\u002Ftext-to-speech":3,"developer-code-zck62e":679,"developer-code-1xjn948":680,"developer-code-19xjzrm":681,"developer-code-1n3btyq":682},{"id":4,"title":5,"body":6,"description":670,"extension":671,"meta":672,"navigation":673,"path":675,"seo":676,"stem":677,"__hash__":678},"guidesZh\u002Fguides-zh\u002Ftext-to-speech.md","文本转语音 API",{"type":7,"value":8,"toc":663},"minimark",[9,13,23,28,67,71,98,160,171,214,405,409,434,537,572,589,593,629,633,659],[10,11,12],"p",{},"VisionStory 文本转语音 API 可使用任意公共或克隆声音，将文本转换为自然的 MP3 音频。请求同步处理，成功后直接返回生成的音频字节。",[14,15,16],"blockquote",{},[10,17,18,22],{},[19,20,21],"strong",{},"Beta。"," 只要账户拥有有效的 Pro 或更高等级订阅，其 API Key 即可调用此接口，无需额外申请能力白名单。",[24,25,27],"h2",{"id":26},"text-to-speech-api-endpoint","文本转语音接口",[29,30,31,47],"table",{},[32,33,34],"thead",{},[35,36,37,41,44],"tr",{},[38,39,40],"th",{},"方法",[38,42,43],{},"路径",[38,45,46],{},"功能",[48,49,50],"tbody",{},[35,51,52,59,64],{},[53,54,55],"td",{},[56,57,58],"code",{},"POST",[53,60,61],{},[56,62,63],{},"\u002Fapi\u002Fv1\u002Ftts",[53,65,66],{},"根据文本合成语音，返回 MP3 音频",[24,68,70],{"id":69},"generate-mp3-speech-from-text","将文本转换为 MP3 语音",[10,72,73,74,77,78,81,82,85,86,89,90,93,94,97],{},"传入 ",[56,75,76],{},"text"," 和从 ",[56,79,80],{},"GET \u002Fapi\u002Fv1\u002Fvoices"," 获取的 ",[56,83,84],{},"voice_id","。可以指定 BCP 47 ",[56,87,88],{},"locale","，如 ",[56,91,92],{},"en-GB"," 或 ",[56,95,96],{},"zh-TW","，以引导多语言声音的发音和口音。不同语音引擎会尽力应用该设置，但效果可能不同；省略时使用声音原生的语言地区。",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-bash shiki shiki-themes github-light github-dark","curl -s -X POST -H \"X-API-Key: $VISIONSTORY_API_KEY\" -H \"Content-Type: application\u002Fjson\" -d '{\"text\": \"Hello from VisionStory.\", \"voice_id\": \"YOUR_VOICE_ID\", \"locale\": \"en-GB\"}' https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts --output speech.mp3\n","bash","",[56,106,107],{"__ignoreMap":104},[108,109,112,116,120,123,127,130,133,137,140,142,145,148,151,154,157],"span",{"class":110,"line":111},"line",1,[108,113,115],{"class":114},"sScJk","curl",[108,117,119],{"class":118},"sj4cs"," -s",[108,121,122],{"class":118}," -X",[108,124,126],{"class":125},"sZZnC"," POST",[108,128,129],{"class":118}," -H",[108,131,132],{"class":125}," \"X-API-Key: ",[108,134,136],{"class":135},"sVt8B","$VISIONSTORY_API_KEY",[108,138,139],{"class":125},"\"",[108,141,129],{"class":118},[108,143,144],{"class":125}," \"Content-Type: application\u002Fjson\"",[108,146,147],{"class":118}," -d",[108,149,150],{"class":125}," '{\"text\": \"Hello from VisionStory.\", \"voice_id\": \"YOUR_VOICE_ID\", \"locale\": \"en-GB\"}'",[108,152,153],{"class":125}," https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts",[108,155,156],{"class":118}," --output",[108,158,159],{"class":125}," speech.mp3\n",[10,161,162,163,166,167,170],{},"响应体是原始 MP3 音频（",[56,164,165],{},"audio\u002Fmpeg","，44.1 kHz）。用量和计费信息放在",[19,168,169],{},"响应头","中，而不是响应体：",[29,172,173,182],{},[32,174,175],{},[35,176,177,179],{},[38,178,169],{},[38,180,181],{},"含义",[48,183,184,194,204],{},[35,185,186,191],{},[53,187,188],{},[56,189,190],{},"X-Audio-Duration-Sec",[53,192,193],{},"生成音频的时长，单位为秒",[35,195,196,201],{},[53,197,198],{},[56,199,200],{},"X-Usage-Characters",[53,202,203],{},"计费字符数",[35,205,206,211],{},[53,207,208],{},[56,209,210],{},"X-Cost-Credit",[53,212,213],{},"本次调用消耗的点数",[99,215,219],{"className":216,"code":217,"language":218,"meta":104,"style":104},"language-python shiki shiki-themes github-light github-dark","import requests, os\n\nresp = requests.post(\n    \"https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts\",\n    headers={\"X-API-Key\": os.environ[\"VISIONSTORY_API_KEY\"]},\n    json={\"text\": \"Hello from VisionStory.\", \"voice_id\": \"YOUR_VOICE_ID\", \"locale\": \"en-GB\"},\n    timeout=240,\n)\nresp.raise_for_status()\nwith open(\"speech.mp3\", \"wb\") as f:\n    f.write(resp.content)\nprint(\"credits charged:\", resp.headers.get(\"X-Cost-Credit\"))\n","python",[56,220,221,230,237,249,258,282,325,338,344,350,379,385],{"__ignoreMap":104},[108,222,223,227],{"class":110,"line":111},[108,224,226],{"class":225},"szBVR","import",[108,228,229],{"class":135}," requests, os\n",[108,231,233],{"class":110,"line":232},2,[108,234,236],{"emptyLinePlaceholder":235},true,"\n",[108,238,240,243,246],{"class":110,"line":239},3,[108,241,242],{"class":135},"resp ",[108,244,245],{"class":225},"=",[108,247,248],{"class":135}," requests.post(\n",[108,250,252,255],{"class":110,"line":251},4,[108,253,254],{"class":125},"    \"https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts\"",[108,256,257],{"class":135},",\n",[108,259,261,265,267,270,273,276,279],{"class":110,"line":260},5,[108,262,264],{"class":263},"s4XuR","    headers",[108,266,245],{"class":225},[108,268,269],{"class":135},"{",[108,271,272],{"class":125},"\"X-API-Key\"",[108,274,275],{"class":135},": os.environ[",[108,277,278],{"class":125},"\"VISIONSTORY_API_KEY\"",[108,280,281],{"class":135},"]},\n",[108,283,285,288,290,292,295,298,301,304,307,309,312,314,317,319,322],{"class":110,"line":284},6,[108,286,287],{"class":263},"    json",[108,289,245],{"class":225},[108,291,269],{"class":135},[108,293,294],{"class":125},"\"text\"",[108,296,297],{"class":135},": ",[108,299,300],{"class":125},"\"Hello from VisionStory.\"",[108,302,303],{"class":135},", ",[108,305,306],{"class":125},"\"voice_id\"",[108,308,297],{"class":135},[108,310,311],{"class":125},"\"YOUR_VOICE_ID\"",[108,313,303],{"class":135},[108,315,316],{"class":125},"\"locale\"",[108,318,297],{"class":135},[108,320,321],{"class":125},"\"en-GB\"",[108,323,324],{"class":135},"},\n",[108,326,328,331,333,336],{"class":110,"line":327},7,[108,329,330],{"class":263},"    timeout",[108,332,245],{"class":225},[108,334,335],{"class":118},"240",[108,337,257],{"class":135},[108,339,341],{"class":110,"line":340},8,[108,342,343],{"class":135},")\n",[108,345,347],{"class":110,"line":346},9,[108,348,349],{"class":135},"resp.raise_for_status()\n",[108,351,353,356,359,362,365,367,370,373,376],{"class":110,"line":352},10,[108,354,355],{"class":225},"with",[108,357,358],{"class":118}," open",[108,360,361],{"class":135},"(",[108,363,364],{"class":125},"\"speech.mp3\"",[108,366,303],{"class":135},[108,368,369],{"class":125},"\"wb\"",[108,371,372],{"class":135},") ",[108,374,375],{"class":225},"as",[108,377,378],{"class":135}," f:\n",[108,380,382],{"class":110,"line":381},11,[108,383,384],{"class":135},"    f.write(resp.content)\n",[108,386,388,391,393,396,399,402],{"class":110,"line":387},12,[108,389,390],{"class":118},"print",[108,392,361],{"class":135},[108,394,395],{"class":125},"\"credits charged:\"",[108,397,398],{"class":135},", resp.headers.get(",[108,400,401],{"class":125},"\"X-Cost-Credit\"",[108,403,404],{"class":135},"))\n",[24,406,408],{"id":407},"control-speech-rate","调整语速",[10,410,411,412,415,416,419,420,93,423,426,427,430,431,433],{},"可选参数 ",[56,413,414],{},"speech_rate"," 接受 ",[56,417,418],{},"slow","、",[56,421,422],{},"normal",[56,424,425],{},"fast","。省略或传入 ",[56,428,429],{},"null"," 时使用正常语速。公共和克隆声音均支持语速调整，但实际时长变化因声音而异，应以 ",[56,432,190],{}," 为准，不要假设固定时长。调整语速不改变音高，计费方式也不变。",[99,435,437],{"className":216,"code":436,"language":218,"meta":104,"style":104},"from visionstory import VisionStoryClient\nfrom pathlib import Path\n\nspeech = VisionStoryClient.from_env().create_speech(\n    text=\"Hello from VisionStory.\", voice_id=\"YOUR_VOICE_ID\",\n    locale=\"en-GB\", speech_rate=\"slow\",\n)\nPath(\"speech.mp3\").write_bytes(speech[\"audio\"])\n",[56,438,439,452,464,468,478,497,517,521],{"__ignoreMap":104},[108,440,441,444,447,449],{"class":110,"line":111},[108,442,443],{"class":225},"from",[108,445,446],{"class":135}," visionstory ",[108,448,226],{"class":225},[108,450,451],{"class":135}," VisionStoryClient\n",[108,453,454,456,459,461],{"class":110,"line":232},[108,455,443],{"class":225},[108,457,458],{"class":135}," pathlib ",[108,460,226],{"class":225},[108,462,463],{"class":135}," Path\n",[108,465,466],{"class":110,"line":239},[108,467,236],{"emptyLinePlaceholder":235},[108,469,470,473,475],{"class":110,"line":251},[108,471,472],{"class":135},"speech ",[108,474,245],{"class":225},[108,476,477],{"class":135}," VisionStoryClient.from_env().create_speech(\n",[108,479,480,483,485,487,489,491,493,495],{"class":110,"line":260},[108,481,482],{"class":263},"    text",[108,484,245],{"class":225},[108,486,300],{"class":125},[108,488,303],{"class":135},[108,490,84],{"class":263},[108,492,245],{"class":225},[108,494,311],{"class":125},[108,496,257],{"class":135},[108,498,499,502,504,506,508,510,512,515],{"class":110,"line":284},[108,500,501],{"class":263},"    locale",[108,503,245],{"class":225},[108,505,321],{"class":125},[108,507,303],{"class":135},[108,509,414],{"class":263},[108,511,245],{"class":225},[108,513,514],{"class":125},"\"slow\"",[108,516,257],{"class":135},[108,518,519],{"class":110,"line":327},[108,520,343],{"class":135},[108,522,523,526,528,531,534],{"class":110,"line":340},[108,524,525],{"class":135},"Path(",[108,527,364],{"class":125},[108,529,530],{"class":135},").write_bytes(speech[",[108,532,533],{"class":125},"\"audio\"",[108,535,536],{"class":135},"])\n",[99,538,540],{"className":101,"code":539,"language":103,"meta":104,"style":104},"visionstory tts --text \"Hello from VisionStory.\" --voice-id YOUR_VOICE_ID --speech-rate slow --output speech.mp3\n",[56,541,542],{"__ignoreMap":104},[108,543,544,547,550,553,556,559,562,565,568,570],{"class":110,"line":111},[108,545,546],{"class":114},"visionstory",[108,548,549],{"class":125}," tts",[108,551,552],{"class":118}," --text",[108,554,555],{"class":125}," \"Hello from VisionStory.\"",[108,557,558],{"class":118}," --voice-id",[108,560,561],{"class":125}," YOUR_VOICE_ID",[108,563,564],{"class":118}," --speech-rate",[108,566,567],{"class":125}," slow",[108,569,156],{"class":118},[108,571,159],{"class":125},[10,573,574,575,578,579,581,582,419,584,419,586,588],{},"本地和远程 MCP 的 ",[56,576,577],{},"create_speech"," 同样支持可选的 ",[56,580,414],{},"。REST 调用将该字段与 ",[56,583,76],{},[56,585,84],{},[56,587,88],{}," 一起放入 JSON 请求体。不传此字段的原有调用无需修改。",[24,590,592],{"id":591},"billing-limits-and-storage","计费、限制与存储",[594,595,596,607,613,623],"ul",{},[597,598,599,602,603,606],"li",{},[19,600,601],{},"同步返回，不在服务端保存。"," 音频直接随响应返回，服务端",[19,604,605],{},"不会","保存。请自行保存字节数据；重复请求会重新生成并再次计费。",[597,608,609,612],{},[19,610,611],{},"计费："," 每 1,000 个字符 2 点，不足 1,000 个字符按 1,000 个计算，仅成功时收费，没有免费额度。",[597,614,615,618,619,622],{},[19,616,617],{},"字符限制："," 支持长文本，但有单次请求上限；超出时返回 ",[56,620,621],{},"400","。",[597,624,625,628],{},[19,626,627],{},"并发："," Beta 期间，每个 API Key 的同步生成并发数较低；超出限制的请求会被拒绝，不会排队。",[24,630,632],{"id":631},"related-visionstory-api-guides","相关 VisionStory API 指南",[594,634,635,645,652],{},[597,636,637,642,643,622],{},[638,639,641],"a",{"href":640},"\u002Fguides\u002Fvoices","声音"," — 选择或克隆要使用的 ",[56,644,84],{},[597,646,647,651],{},[638,648,650],{"href":649},"\u002Fguides\u002Faudio-understanding","音频转写与对齐"," — 将生成的语音对齐到精确词级时间戳，用于字幕。",[597,653,654,658],{},[638,655,657],{"href":656},"\u002Freference","API 参考"," — 查看完整请求结构和错误码。",[660,661,662],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":104,"searchDepth":232,"depth":232,"links":664},[665,666,667,668,669],{"id":26,"depth":232,"text":27},{"id":69,"depth":232,"text":70},{"id":407,"depth":232,"text":408},{"id":591,"depth":232,"text":592},{"id":631,"depth":232,"text":632},"使用公共或克隆 AI 声音将文本转换为 MP3，设置语言地区与语速，并读取时长、字符用量和点数响应头。","md",{},{"title":674,"order":284},"文本转语音","\u002Fguides-zh\u002Ftext-to-speech",{"title":5,"description":670},"guides-zh\u002Ftext-to-speech","ZfFfdsWiZIu-lE_XrtCxOK8zK5lYytOLqcUi5hu3loE","\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">curl\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -s\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -X\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> POST\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -H\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> \"X-API-Key: \u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">$VISIONSTORY_API_KEY\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -H\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> \"Content-Type: application\u002Fjson\"\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> -d\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> '{\"text\": \"Hello from VisionStory.\", \"voice_id\": \"YOUR_VOICE_ID\", \"locale\": \"en-GB\"}'\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --output\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> speech.mp3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF7B72\">import\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> requests, os\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">resp \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> requests.post(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#A5D6FF\">    \"https:\u002F\u002Fopenapi.visionstory.ai\u002Fapi\u002Fv1\u002Ftts\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">    headers\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"X-API-Key\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: os.environ[\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"VISIONSTORY_API_KEY\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">]},\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">    json\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">{\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"text\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"Hello from VisionStory.\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"voice_id\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"YOUR_VOICE_ID\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"locale\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">: \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"en-GB\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">},\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">    timeout\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\">240\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">resp.raise_for_status()\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF7B72\">with\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> open\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"speech.mp3\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"wb\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">) \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">as\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> f:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">    f.write(resp.content)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#79C0FF\">print\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"credits charged:\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, resp.headers.get(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"X-Cost-Credit\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">))\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF7B72\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> visionstory \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">import\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> VisionStoryClient\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FF7B72\">from\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> pathlib \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">import\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> Path\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">speech \u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\"> VisionStoryClient.from_env().create_speech(\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">    text\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"Hello from VisionStory.\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">voice_id\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"YOUR_VOICE_ID\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">    locale\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"en-GB\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">, \u003C\u002Fspan>\u003Cspan style=\"color:#FFA657\">speech_rate\u003C\u002Fspan>\u003Cspan style=\"color:#FF7B72\">=\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"slow\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#E6EDF3\">Path(\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"speech.mp3\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">).write_bytes(speech[\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\">\"audio\"\u003C\u002Fspan>\u003Cspan style=\"color:#E6EDF3\">])\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki github-dark-default\" style=\"background-color:#0d1117;color:#e6edf3\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#FFA657\">visionstory\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> tts\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --text\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> \"Hello from VisionStory.\"\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --voice-id\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> YOUR_VOICE_ID\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --speech-rate\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> slow\u003C\u002Fspan>\u003Cspan style=\"color:#79C0FF\"> --output\u003C\u002Fspan>\u003Cspan style=\"color:#A5D6FF\"> speech.mp3\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1788547143926]