<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="https://www.xwean.com/feed/rss/%E7%9F%A5%E8%AF%86%E5%82%A8%E5%A4%87.html">
<title>解说文案 - 知识储备</title>
<link>https://www.xwean.com/%E7%9F%A5%E8%AF%86%E5%82%A8%E5%A4%87.html</link>
<description></description>
<items>
<rdf:Seq>
<rdf:li resource="https://www.xwean.com/2040.html"/>
<rdf:li resource="https://www.xwean.com/2038.html"/>
<rdf:li resource="https://www.xwean.com/2031.html"/>
<rdf:li resource="https://www.xwean.com/2029.html"/>
<rdf:li resource="https://www.xwean.com/2028.html"/>
<rdf:li resource="https://www.xwean.com/2026.html"/>
<rdf:li resource="https://www.xwean.com/2014.html"/>
<rdf:li resource="https://www.xwean.com/2011.html"/>
<rdf:li resource="https://www.xwean.com/2005.html"/>
<rdf:li resource="https://www.xwean.com/1976.html"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="https://www.xwean.com/2040.html">
<title>二奢类目算法调整(测试)</title>
<link>https://www.xwean.com/2040.html</link>
<dc:date>2025-04-03T21:14:00+08:00</dc:date>
<description>流量审核1.机器审核→抓取铭感词汇,进行匹配2.初审→人工复核3.复审→播放量大于10W,有举报,标黄4.三审→播放大于300万→判定优质内容,提示优化内容自然流1.2W 是个门槛,进行评级算法的调整监管方要求,禁止出现信息茧房推送机制→兴趣多样性 言外之意,用户多模态抓取推送,多标签混合建模女生→二奢​    →美妆​    →追星用户过往在抖音上喜欢的内容,多样性///本地推内容成长快 上dou+内容少的 上本地推上实物的标准,本地推 抖音小店  平台可以拖则  白号断开交易链路报白5个连锁店,或者入住其他连锁品牌禁止销售 语境 语意搜索搜索内容和标签进行匹配  包含站外方向精准的搜索喜欢,助推视频流量作品里面植入产品https://95152.douyin.com/</description>
</item>
<item rdf:about="https://www.xwean.com/2038.html">
<title>Deepseek 本地部署(成功版)</title>
<link>https://www.xwean.com/2038.html</link>
<dc:date>2025-02-05T22:09:00+08:00</dc:date>
<description>Deepseek 本地部署(成功版)Error: 1 documents failed toadd.Forbidden access to file:"https://cdn.useanything.com/support/models/Xenova/all-MiniLM-L6-v2/tokenizer config.json" 解决办法跟着步骤来 肯定能成功Ollama部署版本首先打开官网https://ollama.com/download直接下载Windows版本​    可能有些网速不够快 , 提供下载安装版本通过网盘分享的文件：OllamaSetup_2.exe链接: https://pan.baidu.com/s/13cWJZZ4MDbnsYGlfetRRjQ?pwd=2hy2 提取码: 2hy2 下载安装就能用记住安装位置,到时候可能会用得上安装完毕不会有任何提示,但实际上已经安装完毕如果觉得C盘放模型会占地方,可以换其他的盘先检查一下版本win+rollama -v出现这个表示已经安装成功,此时先不要着急上模型,如果放在C盘 直接安装即可 首先退出Ollama 再操作右键计算机 选择属性不知道win10  和 win11是不是一样 但都是进入属性进行设置 右键计算机---属性---高级系统设置---环境变量如下选择直接复制OLLAMA_MODELS下面一行在D盘新建文件夹后直接复制路径然后确定--确定--确定 即可当一切准备完毕回到ollama    https://ollama.com/download回到deepeek官网 发现深度思考是R1模型每个模型的大小都不一样 根据自己的显卡来4090 可以直接莽32b+3060卡 据说14b好像是极限..ollama run deepseek-r1:14b然后就是漫长的过程...百度网网盘通过网盘分享的文件：--ollama---models链接: https://pan.baidu.com/s/11VX-eDCfJg5h_I_3twcctg?pwd=vgwf 提取码: vgwf 下载好了之后 可以直接放到原始地址,也可以放到变量地址原始地址C:\Users\Administrator\.ollama    Users是自己的用户名然后 win+rollama list尝试启动ollama run deepseek-r1:14b出现这个代表启动成功完成退出输入 /bye需要注意的  如果放在机械硬盘里 启动可能稍微慢一点 ~知识库打开刚才下载的文件进行安装安装到哪其实都行 就看你固态够不够大首次打开都完事了 进入到这个界面简单设置一下这个地方再进行简单设置然后当出现挂个梯子就好了或者直接把文档扔进去都行下课!注意 回答的质量完全取决于你知识库的丰富程度</description>
</item>
<item rdf:about="https://www.xwean.com/2031.html">
<title>Lama-Cleaner 本地安装使用教程 Ai去除水印</title>
<link>https://www.xwean.com/2031.html</link>
<dc:date>2024-09-17T12:14:00+08:00</dc:date>
<description>Lama-Cleaner 本地安装使用教程 Ai去除水印本来可以花钱解决的问题.....但就是想尝试一下免费的科技的意义  似乎是改变生活的...流程开始1需要安装Python去官网下载即可https://www.python.org/downloads/windows/安装时,要选择,就最下面的下√Add python.exe to PATH2安装pytorch官网地址  https://pytorch.org/注意一个问题如果直接win+R cmd运行的话 会出现???????????  应该是之前安装过python的 会出现这个状态此时升级一下pythonpython -m pip install --upgrade pip建议是进入安装目录 在地址栏输入cmd然后等待即可一会....这就安装完毕了3安装Lama-Cleanerpip install Lama-Cleaner注意 变量或者路径错误 都会导致错误出现报错检查我的电脑-属性-高级-环境变量找到正确的环境变量 - 地址栏打开cmd升级命令 最高级的就不需要了python.exe -m pip install --upgrade pip4运行在刚才的cmd里面直接输入lama-cleaner --model=lama --device=cpu --port=8011第一次运行 会自动下载东西等到完毕后在浏览器输入 http://127.0.0.1:8011/如图注意一点lama-cleaner --model=lama --device=cpu --port=8011其中的cpu 代表只用cpu进行工作如果有N卡 建议使用这个命令lama-cleaner --model=lama --device=cuda --port=8011然后重新打开即可5快捷键如果做局域网则需要使用这条命令 lama-cleaner --model=lama --device=cuda --port=8011  --host=0.0.0.0延伸可以部署在自己的服务器上,然后绑定域名 做个收费的项目......  (未测试)或者部署在自家电脑上 然后通过隧道服务 巴拉巴拉 进行远程访问..... (测试成功,工程量还行吧,技术稍微有点敏感,不做教程了)在右上角的设置 还可以选择很多模型进行处理最后效果非常不错!!下课所以,某个软件你收费那么贵 还用自己的电脑算力跑软件,真会玩!!</description>
</item>
<item rdf:about="https://www.xwean.com/2029.html">
<title>幻剪  混剪神器 图片搜索片段</title>
<link>https://www.xwean.com/2029.html</link>
<dc:date>2024-08-17T16:40:41+08:00</dc:date>
<description>幻剪  混剪神器 图片搜索片段用视频中的图片搜索整个素材中出现的片段跟着操作走 必定会成功!首先下载幻剪内侧地址:最新安装包下载地址：https://www.123pan.com/s/9dgKVv-Cmd0v.html?提取码:KRlk如图--用心不用旧安装地址建议选择在 SSD 固态硬盘中  据说速度更快CPU 建议最低配 i5 7200 +内侧 8GN卡直接打开但在打开之前先准备好素材举例说明,,,,登录之后输入邀请码JiTdkQ先白嫖几天会员再说~一定要注意  这个地方素材时长一定要小于素材库容量幻剪 不是按照素材大小决定容量的 而是用素材的时长决定的文件夹或者单个素材直接导入完事直接索引就好,期间不需要任何操作  看完再操作!!!    看完在操作如果遇到提示下载模型,直接下载就行如果要提速--导出的并发数可以是2  主要是看配置重要的是这个8G内侧 i7cpu 8G显存 这样的及以上配置  建议调到2当所有的东西准备完毕后 检查 没有失败就是成功发现失败  右键重新索引重点!语言一定要选对  要不白扯如果有字幕文件,一定要和素材文件同名搜索素材3个方式如果有字幕文件最好 速度也是最快  只要搜索相应的字幕 就能出现画面如果搜索画面  这直接输入关键词 就能根据关键词找到画面如果输入图片  (剪贴板 截图粘贴  或者图片地址),也能迅速找到画面分开演示搜爆炸  就能在全部已经索引的素材中找到爆炸的场景然后选中素材右键导出此时会有人问 为何不批量导出 ?答: 当你看到这篇文章的时候,已经支持批量了.如果不支持 下面留言,我跟软件作者单挑去!下一步进行图片寻找片段找一个差不多点的就这个吧剪贴板直接复制就行就是截图 直接Ctrl+V右键导出如果觉得少 还可以一直放下翻下课!!交流群↓有问题留言有问题直接评论留言</description>
</item>
<item rdf:about="https://www.xwean.com/2028.html">
<title>谷歌浏览器 Edge浏览器 整个网页截图</title>
<link>https://www.xwean.com/2028.html</link>
<dc:date>2024-08-10T10:54:14+08:00</dc:date>
<description>谷歌浏览器 Edge浏览器 整个网页截图2中方法第一种,用自带的命令进行操作谷歌浏览器 和 微软的Edge浏览器 本身的区别不大就用谷歌浏览器做演示例如这种随着往下滑动 永无止境根本到不了头F12如果不是中文,可以点击右上角的齿轮 更改为中文操作调整语言后,重启浏览器生效Ctrl+Shift+P但有时候快捷键会失灵,直接点击得到如下结果整体效果还算可以但如果网页上嵌套各种模块 根本无法截图整张例如动态数据分析用到这个插件​    通过百度网盘分享的文件：GoFullPage插件.zip​    链接：https://pan.baidu.com/s/1XqgS5wk-NGtJCnQBeHX0_w?pwd=ygyj ​    提取码：ygyj安转方法如下依次或者直接复制 浏览器打开chrome://extensions/打开开发者模式直接将下载好的压缩包扔里面其实安装不安装都可以出现照相机图标 就OK了针对网页里的嵌套 也可以用右上角的设置里面可以详细设置下课!</description>
</item>
<item rdf:about="https://www.xwean.com/2026.html">
<title>ChatGPT  发音提取 </title>
<link>https://www.xwean.com/2026.html</link>
<dc:date>2024-07-04T22:17:16+08:00</dc:date>
<description>ChatGPT 发音提取众所周知 GPT的发音不仅声音好,而且还高度拟人化所以为什么不直接下载搞呢?于是....正文如下首先在魔法环境中打开https://chromewebstore.google.com/detail/audiotts-simple-text-to-s/lhbdjaomnaobfljmhkmcfhhnihaaangh直接点击安装即可,然后关闭浏览器 重新打开就好然后直接点击朗读下载的是.acc文件,可以直接使用,也可以转码当然,没有魔法环境也不怕已经打包好文件和秘钥 拿来就能用把.crx直接拖入到chrome就能用下载地址:链接：https://pan.baidu.com/s/1IFhNwkXdqdlbzuKcY89rww?pwd=6b8d 提取码：6b8d 更新时间为文章时间</description>
</item>
<item rdf:about="https://www.xwean.com/2014.html">
<title>Anthropic 初次评测claude.ai</title>
<link>https://www.xwean.com/2014.html</link>
<dc:date>2024-06-22T21:58:00+08:00</dc:date>
<description>据说这是openai的人搞出来的关于Pro功能，Openai是20美元 商店里买是19.99美元claude的Pro是20美元，商店里还没有测试同样，没有PayPal支付功能，而且币种只有外卡获得外卡的渠道就不说了不过值的说的是 Claude注册 是需要验证手机号的似乎...不支持进去之后输入完名字之后直接开始使用于是将之前总结的营销号格式扔了进去，并同时要求写一篇关于吃香蕉通便的营销文案这是Claude生成的文案这是GPT-4o给出的答案不难看出，都是在一本正经的胡说八道...例如，询问了一下北京今天的天气至于说哪个更有优势，看自己怎么说吧但是基于Openai写出的GPTs，不知道能否直接在Claude上直接使用打开的官网是这样的https://www.anthropic.com/最后咱先不说技术上的测试与评价，也不管是基于什么样的模型去延展，或者是什么样的算法总体而言，自己感觉哪个最适合自己才是最好的这里没有用3.5去对3.5  因为在Openai上用了很长时间的Pro 上来直接就默认使用更高一级的版本。行吧，官网已经放在文章里了，感兴趣的自己去尝试，不过都是Claude写代码厉害.. 还没试过</description>
</item>
<item rdf:about="https://www.xwean.com/2011.html">
<title>简单的IP查询页面制作（二） </title>
<link>https://www.xwean.com/2011.html</link>
<dc:date>2024-06-04T12:06:45+08:00</dc:date>
<description>接上一个文章https://xwean.com/1959.html做个代码备份NGINX 新增代理→nginx.conf
        # 新增Node.js应用的反向代理配置
        location /get-ip-info {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &#039;upgrade&#039;;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /get-weather {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection &#039;upgrade&#039;;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }


前端→index.html&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;zh-CN&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;看看天气咋样&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: &#039;Arial&#039;, sans-serif;
            background-color: #f0f0f0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            flex-direction: column;
        }

        .container {
            background-color: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            width: 300px;
            text-align: center;
            margin-bottom: 20px; /* 与底部文字保持距离 */
        }

        .info-box {
            background-color: #E9ECEF;
            padding: 10px;
            margin: 10px 0;
            border-radius: 5px;
        }

        .footer {
            color: black; /* 设置底部文字颜色 */
            font-size: 12px; /* 设置底部文字大小 */
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;我的天气！&lt;/h1&gt;
        &lt;div id=&quot;ip&quot; class=&quot;info-box&quot;&gt;IP地址：加载中...&lt;/div&gt;
        &lt;div id=&quot;location&quot; class=&quot;info-box&quot;&gt;位置：加载中...&lt;/div&gt;
        &lt;div id=&quot;weather&quot; class=&quot;info-box&quot;&gt;天气：加载中...&lt;/div&gt;
        &lt;div id=&quot;time&quot; class=&quot;info-box&quot;&gt;当前时间：加载中...&lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;footer&quot;&gt;
        私人网盘正在开发中....
        ozxuu@outlook.com
    &lt;/div&gt;
    &lt;script&gt;
        // 获取IP和位置信息
        fetch(&#039;/get-ip-info&#039;)
            .then(response =&gt; response.json())
            .then(data =&gt; {
                document.getElementById(&#039;ip&#039;).textContent = `IP地址：${data.ip}`;
                document.getElementById(&#039;location&#039;).textContent = `位置：${data.country} - ${data.city} - ${data.region}`;
                
                // 使用获取到的位置信息请求天气数据
                return fetch(`/get-weather?city=${data.city}`);
            })
            .then(response =&gt; response.json())
            .then(data =&gt; {
                document.getElementById(&#039;weather&#039;).textContent = `天气：${data.weather[0].main}, 温度：${data.main.temp}°C`;
            })
            .catch(error =&gt; console.error(&#039;获取信息失败&#039;, error));

        // 显示当前时间
        document.getElementById(&#039;time&#039;).textContent = `当前时间：${new Date().toLocaleTimeString()}`;
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
后端→index.js
require(&#039;dotenv&#039;).config(); // 加载环境变量

const express = require(&#039;express&#039;);
const fetch = require(&#039;node-fetch&#039;);
const morgan = require(&#039;morgan&#039;);
const fs = require(&#039;fs&#039;);
const path = require(&#039;path&#039;);

const app = express();
const PORT = process.env.PORT || 3000;

// 创建一个写入流，并将日志写入到指定文件中
const accessLogStream = fs.createWriteStream(path.join(__dirname, &#039;access.log&#039;), { flags: &#039;a&#039; });

// 设置morgan日志记录中间件，将日志输出到文件中
app.use(morgan(&#039;combined&#039;, { stream: accessLogStream }));

// 获取IP地址信息的路由
app.get(&#039;/get-ip-info&#039;, async (req, res) =&gt; {
    const ipinfoToken = process.env.IPINFO_TOKEN;
    // 获取请求者的IP地址
    const visitorIp = req.headers[&#039;x-forwarded-for&#039;]?.split(&#039;,&#039;).shift() || req.connection.remoteAddress;

    if (!visitorIp) {
        res.status(500).json({ error: &#039;无法获取位置IP&#039; });
        return;
    }

    try {
        // 调用IPinfo API获取访问者的IP地址信息
        const ipinfoResponse = await fetch(`https://ipinfo.io/${visitorIp}?token=${ipinfoToken}`);
        const ipinfoData = await ipinfoResponse.json();

        // 如果返回的数据不包含IP信息，则停止并返回错误
        if (!ipinfoData || !ipinfoData.ip) {
            res.status(500).json({ error: &#039;无法获取位置IP&#039; });
            return;
        }

        res.json(ipinfoData); // 将访问者的IP地址信息发送给前端
    } catch (error) {
        console.error(&#039;Error fetching IP info:&#039;, error);
        res.status(500).json({ error: &#039;Server Error&#039; });
    }
});

// 获取天气信息的路由
app.get(&#039;/get-weather&#039;, async (req, res) =&gt; {
    const openWeatherMapApiKey = process.env.OPENWEATHERMAP_API_KEY;
    const city = req.query.city; // 从查询参数中获取城市名称

    if (!city) {
        res.status(400).json({ error: &#039;城市名称是必需的&#039; });
        return;
    }

    try {
        // 根据城市名称获取天气信息
        const weatherResponse = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&amp;appid=${openWeatherMapApiKey}&amp;units=metric`);
        const weatherData = await weatherResponse.json();

        // 如果API返回了错误
        if (weatherData.cod != 200) {
            res.status(weatherData.cod).json({ error: weatherData.message });
            return;
        }

        res.json(weatherData); // 将天气信息发送给前端
    } catch (error) {
        console.error(&#039;Error fetching weather data:&#039;, error);
        res.status(500).json({ error: &#039;Server Error&#039; });
    }
});

app.listen(PORT, () =&gt; {
    console.log(`Server running on port ${PORT}`);
});

其他→package.json
{
  &quot;name&quot;: &quot;myapp&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;description&quot;: &quot;&quot;,
  &quot;main&quot;: &quot;index.js&quot;,
  &quot;scripts&quot;: {
    &quot;test&quot;: &quot;echo \&quot;Error: no test specified\&quot; &amp;&amp; exit 1&quot;
  },
  &quot;keywords&quot;: [],
  &quot;author&quot;: &quot;&quot;,
  &quot;license&quot;: &quot;ISC&quot;,
  &quot;dependencies&quot;: {
    &quot;dotenv&quot;: &quot;^16.4.5&quot;,
    &quot;express&quot;: &quot;^4.18.3&quot;,
    &quot;morgan&quot;: &quot;^1.10.0&quot;,
    &quot;node-fetch&quot;: &quot;^2.6.1&quot;
  }
}
全部地址---百度网盘---我的资源---简单IP地址看天气---压缩包</description>
</item>
<item rdf:about="https://www.xwean.com/2005.html">
<title>下载神器 全能下！初次体验Gopeed</title>
<link>https://www.xwean.com/2005.html</link>
<dc:date>2024-04-22T22:39:41+08:00</dc:date>
<description>下载神器 全能下！初次体验Gopeed偶然间看到了一片文章...上干货官网地址：https://gopeed.com/zh-CN度盘链接链接：https://pan.baidu.com/s/1qvq1BAPwUOHHt8A7DvilxQ?pwd=gikk 提取码：gikk GitHub地址https://github.com/GopeedLab/gopeed?tab=readme-ov-file万星之下无虚名！安装开始！突然想了一下 某雷比着大很多吧？！界面很轻爽会看一下文档 似乎还不错 可以接管浏览器还是实测一下win版本随便找个YouTube的视频测试一下下载是下载完了 估计是我哪个地方没设置对，默认是720P的然后测试一下种子文件关闭Tun模式  速度似乎上来一点  应该是网络的问题，或者是种子的问题，毕竟这种子是今天才上的换个三体试试速度上来了，应该是种子的问题。除此之外 一定要有稳定的网络，虽然我用的是混线，而且还是强制混线，建议大家都来试试速度可以的！下课</description>
</item>
<item rdf:about="https://www.xwean.com/1976.html">
<title>火山引擎 语音合成 完全自费 亲测好用！懒癌患者滑到最后！</title>
<link>https://www.xwean.com/1976.html</link>
<dc:date>2024-04-04T19:48:28+08:00</dc:date>
<description>火山引擎 语音合成 完全自费 亲测好用！说在前面不是魔音和逗哥用不起，而是自研更有性价比为此，找到了最简单的demo【官方提供】#coding=utf-8

&#039;&#039;&#039;
requires Python 3.6 or later
pip install requests
&#039;&#039;&#039;
import base64
import json
import uuid
import requests

# 填写平台申请的appid, access_token以及cluster
appid = &quot;************&quot;
access_token= &quot;***********&quot;
cluster = &quot;volcano_tts&quot;

voice_type = &quot;BV102_streaming&quot;
host = &quot;openspeech.bytedance.com&quot;
api_url = f&quot;https://{host}/api/v1/tts&quot;

header = {&quot;Authorization&quot;: f&quot;Bearer;{access_token}&quot;}

request_json = {
    &quot;app&quot;: {
        &quot;appid&quot;: appid,
        &quot;token&quot;: &quot;access_token&quot;,
        &quot;cluster&quot;: cluster
    },
    &quot;user&quot;: {
        &quot;uid&quot;: &quot;********&quot;
    },
    &quot;audio&quot;: {
        &quot;voice_type&quot;: voice_type,
        &quot;encoding&quot;: &quot;mp3&quot;,
        &quot;speed_ratio&quot;: 1.0,
        &quot;volume_ratio&quot;: 1.0,
        &quot;pitch_ratio&quot;: 1.0,
    },
    &quot;request&quot;: {
        &quot;reqid&quot;: str(uuid.uuid4()),
        &quot;text&quot;: &quot;字节跳动语音合成&quot;,
        &quot;text_type&quot;: &quot;plain&quot;,
        &quot;operation&quot;: &quot;query&quot;,
        &quot;with_frontend&quot;: 1,
        &quot;frontend_type&quot;: &quot;unitTson&quot;

    }
}

if __name__ == &#039;__main__&#039;:
    try:
        resp = requests.post(api_url, json.dumps(request_json), headers=header)
        print(f&quot;resp body: \n{resp.json()}&quot;)
        if &quot;data&quot; in resp.json():
            data = resp.json()[&quot;data&quot;]
            file_to_save = open(&quot;test_submit.mp3&quot;, &quot;wb&quot;)
            file_to_save.write(base64.b64decode(data))
    except Exception as e:
        e.with_traceback()
将其中的***********替换成对应的就可以实现test_submit.mp3感觉还行！于是就扩展了第一版代码第一版代码import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox, filedialog
import requests
import uuid
import base64

def synthesis(text, appid, cluster, voice_type, speed, token):
    url = &quot;https://openspeech.bytedance.com/api/v1/tts&quot;
    headers = {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;Authorization&quot;: f&quot;Bearer;{token}&quot;
    }
    body = {
        &quot;app&quot;: {&quot;appid&quot;: appid, &quot;cluster&quot;: cluster},
        &quot;user&quot;: {&quot;uid&quot;: &quot;default_uid&quot;},
        &quot;audio&quot;: {
            &quot;voice_type&quot;: voice_type,
            &quot;encoding&quot;: &quot;mp3&quot;,
            &quot;speed_ratio&quot;: speed,
            &quot;volume_ratio&quot;: 1.0,
            &quot;pitch_ratio&quot;: 1.0
        },
        &quot;request&quot;: {
            &quot;reqid&quot;: str(uuid.uuid4()),
            &quot;text&quot;: text,
            &quot;operation&quot;: &quot;query&quot;
        }
    }
    response = requests.post(url, json=body, headers=headers)
    response_data = response.json()
    if response.status_code == 200 and response_data.get(&quot;code&quot;) == 3000:
        audio_data = base64.b64decode(response_data[&quot;data&quot;])
        return audio_data
    else:
        raise Exception(f&quot;合成失败: {response_data.get(&#039;message&#039;, &#039;未知错误&#039;)}&quot;)

def convert_to_speech():
    text = text_input.get(&quot;1.0&quot;, tk.END).strip()
    if not text:
        messagebox.showwarning(&quot;警告&quot;, &quot;请输入要转换的文本！&quot;)
        return

    selected_voice = voice_type_combobox.get()
    voice_type = voice_mapping[selected_voice]

    try:
        audio_data = synthesis(text, appid_entry.get(), cluster_entry.get(), voice_type, speed_scale.get(), token_entry.get())
        save_path = filedialog.asksaveasfilename(defaultextension=&quot;.mp3&quot;, filetypes=[(&quot;MP3文件&quot;, &quot;*.mp3&quot;)])
        if save_path:
            with open(save_path, &#039;wb&#039;) as f:
                f.write(audio_data)
            messagebox.showinfo(&quot;成功&quot;, &quot;音频已成功保存！&quot;)
    except Exception as e:
        messagebox.showerror(&quot;错误&quot;, str(e))

root = tk.Tk()
root.title(&quot;文本转语音&quot;)

voice_mapping = {
    &quot;通用女声&quot;: &quot;BV001_streaming&quot;,
    &quot;通用男声&quot;: &quot;BV002_streaming&quot;,
    &quot;儒雅青年&quot;: &quot;BV102_streaming&quot;,
    &quot;知性姐姐-双语&quot;: &quot;BV034_streaming&quot;,
    &quot;温柔小哥&quot;: &quot;BV033_streaming&quot;,
    &quot;活泼女声&quot;: &quot;BV005_streaming&quot;,
    &quot;奶气萌娃&quot;: &quot;BV051_streaming&quot;,
    &quot;亲切女声&quot;: &quot;BV007_streaming&quot;,
    &quot;阳光男声&quot;: &quot;BV056_streaming&quot;,
    &quot;东北老铁&quot;: &quot;BV021_streaming&quot;
}

# 界面布局
ttk.Label(root, text=&quot;AppID：&quot;).grid(column=0, row=0, sticky=tk.W)
ttk.Label(root, text=&quot;Cluster：&quot;).grid(column=0, row=1, sticky=tk.W)
ttk.Label(root, text=&quot;Access Token：&quot;).grid(column=0, row=2, sticky=tk.W)
ttk.Label(root, text=&quot;音色选择：&quot;).grid(column=0, row=3, sticky=tk.W)
ttk.Label(root, text=&quot;朗读速度：&quot;).grid(column=0, row=4, sticky=tk.W)

appid_entry = ttk.Entry(root)
appid_entry.grid(column=1, row=0, sticky=tk.EW)

cluster_entry = ttk.Entry(root)
cluster_entry.grid(column=1, row=1, sticky=tk.EW)

token_entry = ttk.Entry(root)
token_entry.grid(column=1, row=2, sticky=tk.EW)

voice_type_combobox = ttk.Combobox(root, values=list(voice_mapping.keys()))
voice_type_combobox.grid(column=1, row=3, sticky=tk.EW)
voice_type_combobox.current(0)

speed_var = tk.DoubleVar(value=1)
speed_scale = ttk.Scale(root, from_=0.2, to=3, variable=speed_var, orient=tk.HORIZONTAL)
speed_scale.grid(column=1, row=4, sticky=tk.EW)
speed_label = ttk.Label(root, textvariable=speed_var)
speed_label.grid(column=2, row=4, sticky=tk.W)

ttk.Label(root, text=&quot;文本内容：&quot;).grid(column=0, row=5, sticky=tk.NW)
text_input = scrolledtext.ScrolledText(root, height=10)
text_input.grid(column=0, row=6, columnspan=3, sticky=tk.EW)

convert_button = ttk.Button(root, text=&quot;转换为语音&quot;, command=convert_to_speech)
convert_button.grid(column=0, row=7, columnspan=3, sticky=tk.EW)

root.mainloop()
运行以后是这个样子做个测试文件如下111.mp3效果还不错对吧为了做的更好一点，于是添加了度数第二版代码import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox, filedialog
import requests
import uuid
import base64
import threading

# 文字转语音合成函数
def synthesis(text, appid, cluster, voice_type, speed, token):
    url = &quot;https://openspeech.bytedance.com/api/v1/tts&quot;
    headers = {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;Authorization&quot;: f&quot;Bearer;{token}&quot;
    }
    body = {
        &quot;app&quot;: {&quot;appid&quot;: appid, &quot;cluster&quot;: cluster},
        &quot;user&quot;: {&quot;uid&quot;: &quot;default_uid&quot;},
        &quot;audio&quot;: {
            &quot;voice_type&quot;: voice_type,
            &quot;encoding&quot;: &quot;mp3&quot;,
            &quot;speed_ratio&quot;: speed,
            &quot;volume_ratio&quot;: 1.0,
            &quot;pitch_ratio&quot;: 1.0
        },
        &quot;request&quot;: {
            &quot;reqid&quot;: str(uuid.uuid4()),
            &quot;text&quot;: text,
            &quot;operation&quot;: &quot;query&quot;
        }
    }
    response = requests.post(url, json=body, headers=headers)
    response_data = response.json()
    if response.status_code == 200 and response_data.get(&quot;code&quot;) == 3000:
        audio_data = base64.b64decode(response_data[&quot;data&quot;])
        return audio_data
    else:
        raise Exception(f&quot;合成失败: {response_data.get(&#039;message&#039;, &#039;未知错误&#039;)}&quot;)

# GUI的转换函数
def convert_to_speech():
    text = text_input.get(&quot;1.0&quot;, tk.END).strip()
    if not text:
        messagebox.showwarning(&quot;警告&quot;, &quot;请输入要转换的文本！&quot;)
        return

    selected_voice = voice_type_combobox.get()
    voice_type = voice_mapping[selected_voice]

    try:
        audio_data = synthesis(text, appid_entry.get(), cluster_entry.get(), voice_type, speed_var.get(), token_entry.get())
        save_path = filedialog.asksaveasfilename(defaultextension=&quot;.mp3&quot;, filetypes=[(&quot;MP3文件&quot;, &quot;*.mp3&quot;)])
        if save_path:
            with open(save_path, &#039;wb&#039;) as f:
                f.write(audio_data)
            messagebox.showinfo(&quot;成功&quot;, &quot;音频已成功保存！&quot;)
    except Exception as e:
        messagebox.showerror(&quot;错误&quot;, str(e))

# 使用线程显示启动信息提示
def show_startup_message_threaded():
    messagebox.showinfo(&quot;信息提示&quot;, &quot;xwean.com&quot;)

# 启动信息提示线程
def start_startup_message_thread():
    startup_thread = threading.Thread(target=show_startup_message_threaded)
    startup_thread.start()

# 实时更新朗读速度显示，并保留两位小数
def update_speed_label(event=None):
    speed_label.config(text=f&quot;{speed_scale.get():.2f}&quot;)

root = tk.Tk()
root.title(&quot;文本转语音&quot;)

voice_mapping = {
    &quot;通用女声&quot;: &quot;BV001_streaming&quot;,
    &quot;通用男声&quot;: &quot;BV002_streaming&quot;,
    &quot;儒雅青年&quot;: &quot;BV102_streaming&quot;,
    &quot;知性姐姐-双语&quot;: &quot;BV034_streaming&quot;,
    &quot;温柔小哥&quot;: &quot;BV033_streaming&quot;,
    &quot;活泼女声&quot;: &quot;BV005_streaming&quot;,
    &quot;奶气萌娃&quot;: &quot;BV051_streaming&quot;,
    &quot;亲切女声&quot;: &quot;BV007_streaming&quot;,
    &quot;阳光男声&quot;: &quot;BV056_streaming&quot;,
    &quot;东北老铁&quot;: &quot;BV021_streaming&quot;
}

# 界面布局
ttk.Label(root, text=&quot;AppID：&quot;).grid(column=0, row=0, sticky=tk.W)
ttk.Label(root, text=&quot;Cluster：&quot;).grid(column=0, row=1, sticky=tk.W)
ttk.Label(root, text=&quot;Access Token：&quot;).grid(column=0, row=2, sticky=tk.W)
ttk.Label(root, text=&quot;音色选择：&quot;).grid(column=0, row=3, sticky=tk.W)
ttk.Label(root, text=&quot;朗读速度：&quot;).grid(column=0, row=4, sticky=tk.W)

appid_entry = ttk.Entry(root)
appid_entry.grid(column=1, row=0, sticky=tk.EW)

cluster_entry = ttk.Entry(root)
cluster_entry.grid(column=1, row=1, sticky=tk.EW)

token_entry = ttk.Entry(root)
token_entry.grid(column=1, row=2, sticky=tk.EW)

voice_type_combobox = ttk.Combobox(root, values=list(voice_mapping.keys()))
voice_type_combobox.grid(column=1, row=3, sticky=tk.EW)
voice_type_combobox.current(0)

speed_var = tk.DoubleVar(value=1.0)
speed_scale = ttk.Scale(root, from_=0.2, to=3, variable=speed_var, orient=tk.HORIZONTAL, command=update_speed_label)
speed_scale.grid(column=1, row=4, sticky=tk.EW)
speed_label = ttk.Label(root, text=&quot;1.00&quot;)  # 初始值
speed_label.grid(column=2, row=4, sticky=tk.W)

ttk.Label(root, text=&quot;文本内容：&quot;).grid(column=0, row=5, sticky=tk.NW)
text_input = scrolledtext.ScrolledText(root, height=10)
text_input.grid(column=0, row=6, columnspan=3, sticky=tk.EW)

convert_button = ttk.Button(root, text=&quot;转换为语音&quot;, command=convert_to_speech)
convert_button.grid(column=0, row=7, columnspan=3, sticky=tk.EW)

# 在GUI初始化完成后启动信息提示线程
root.after(100, start_startup_message_thread)

root.mainloop()第二版 主要优化了朗读速度的数值显示问题，并且做了打开提示内容信息添加了提示框也增加了滑动数值，下面试试3.0的速度7766.mp3然后是1.5 的速度6633.mp3感觉还行但是又发现了一个新的问题似乎每次下载都要手动输入以下名字第三版代码import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox, filedialog
import requests
import uuid
import base64
import threading
from datetime import datetime

# 文字转语音合成函数
def synthesis(text, appid, cluster, voice_type, speed, token):
    url = &quot;https://openspeech.bytedance.com/api/v1/tts&quot;
    headers = {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;Authorization&quot;: f&quot;Bearer;{token}&quot;
    }
    body = {
        &quot;app&quot;: {&quot;appid&quot;: appid, &quot;cluster&quot;: cluster},
        &quot;user&quot;: {&quot;uid&quot;: &quot;default_uid&quot;},
        &quot;audio&quot;: {
            &quot;voice_type&quot;: voice_type,
            &quot;encoding&quot;: &quot;mp3&quot;,
            &quot;speed_ratio&quot;: speed,
            &quot;volume_ratio&quot;: 1.0,
            &quot;pitch_ratio&quot;: 1.0
        },
        &quot;request&quot;: {
            &quot;reqid&quot;: str(uuid.uuid4()),
            &quot;text&quot;: text,
            &quot;operation&quot;: &quot;query&quot;
        }
    }
    response = requests.post(url, json=body, headers=headers)
    response_data = response.json()
    if response.status_code == 200 and response_data.get(&quot;code&quot;) == 3000:
        audio_data = base64.b64decode(response_data[&quot;data&quot;])
        return audio_data
    else:
        raise Exception(f&quot;合成失败: {response_data.get(&#039;message&#039;, &#039;未知错误&#039;)}&quot;)

# GUI的转换函数
def convert_to_speech():
    text = text_input.get(&quot;1.0&quot;, tk.END).strip()
    if not text:
        messagebox.showwarning(&quot;警告&quot;, &quot;请输入要转换的文本！&quot;)
        return

    selected_voice = voice_type_combobox.get()
    voice_info = voice_mapping[selected_voice]
    voice_type = voice_info[&quot;voice_type&quot;]

    try:
        audio_data = synthesis(text, appid_entry.get(), cluster_entry.get(), voice_type, speed_var.get(), token_entry.get())
        default_filename = datetime.now().strftime(&quot;%Y-%m-%d_%H-%M-%S.mp3&quot;)
        save_path = filedialog.asksaveasfilename(initialfile=default_filename, defaultextension=&quot;.mp3&quot;, filetypes=[(&quot;MP3文件&quot;, &quot;*.mp3&quot;)])
        if save_path:
            with open(save_path, &#039;wb&#039;) as f:
                f.write(audio_data)
            messagebox.showinfo(&quot;成功&quot;, &quot;音频已成功保存！&quot;)
    except Exception as e:
        messagebox.showerror(&quot;错误&quot;, str(e))

# 使用线程显示启动信息提示
def show_startup_message_threaded():
    messagebox.showinfo(&quot;信息提示&quot;, &quot;xwean.com&quot;)

# 启动信息提示线程
def start_startup_message_thread():
    startup_thread = threading.Thread(target=show_startup_message_threaded)
    startup_thread.start()

# 实时更新朗读速度显示，并保留两位小数
def update_speed_label(event=None):
    speed_label.config(text=f&quot;{speed_scale.get():.2f}&quot;)

root = tk.Tk()
root.title(&quot;文本转语音&quot;)

voice_mapping = {
    &quot;通用女声-通用场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV001_streaming&quot;, &quot;场景&quot;: &quot;通用场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;通用男声-通用场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV002_streaming&quot;, &quot;场景&quot;: &quot;通用场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;日语男声-多语种-日语&quot;: {&quot;voice_type&quot;: &quot;BV524_streaming&quot;, &quot;场景&quot;: &quot;多语种&quot;, &quot;语种&quot;: &quot;日语&quot;},
    &quot;甜宠少御-有声阅读-中文&quot;: {&quot;voice_type&quot;: &quot;BV113_streaming&quot;, &quot;场景&quot;: &quot;有声阅读&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;古风少御-有声阅读-中文&quot;: {&quot;voice_type&quot;: &quot;BV115_streaming&quot;, &quot;场景&quot;: &quot;有声阅读&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;炀炀-通用场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV705_streaming&quot;, &quot;场景&quot;: &quot;通用场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;重庆小伙-方言-重庆话&quot;: {&quot;voice_type&quot;: &quot;BV019_streaming&quot;, &quot;场景&quot;: &quot;方言&quot;, &quot;语种&quot;: &quot;重庆话&quot;},
    &quot;广西表哥-方言-广西普通话&quot;: {&quot;voice_type&quot;: &quot;BV213_streaming&quot;, &quot;场景&quot;: &quot;方言&quot;, &quot;语种&quot;: &quot;广西普通话&quot;},
    &quot;气质女生-多语种-日语&quot;: {&quot;voice_type&quot;: &quot;BV522_streaming&quot;, &quot;场景&quot;: &quot;多语种&quot;, &quot;语种&quot;: &quot;日语&quot;},
    &quot;通用赘婿-有声阅读-中文&quot;: {&quot;voice_type&quot;: &quot;BV119_streaming&quot;, &quot;场景&quot;: &quot;有声阅读&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;擎苍-有声阅读-中文&quot;: {&quot;voice_type&quot;: &quot;BV701_streaming&quot;, &quot;场景&quot;: &quot;有声阅读&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;活力男声-Jackson-美式发音-英语&quot;: {&quot;voice_type&quot;: &quot;BV504_streaming&quot;, &quot;场景&quot;: &quot;美式发音&quot;, &quot;语种&quot;: &quot;英语&quot;},
    &quot;灿灿-通用场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV700_streaming&quot;, &quot;场景&quot;: &quot;通用场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;活力女声-Ariana-美式发音-英语&quot;: {&quot;voice_type&quot;: &quot;BV503_streaming&quot;, &quot;场景&quot;: &quot;美式发音&quot;, &quot;语种&quot;: &quot;英语&quot;},
    &quot;儒雅青年-有声阅读-中文&quot;: {&quot;voice_type&quot;: &quot;BV102_streaming&quot;, &quot;场景&quot;: &quot;有声阅读&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;知性姐姐-双语-教育场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV034_streaming&quot;, &quot;场景&quot;: &quot;教育场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;温柔小哥-教育场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV033_streaming&quot;, &quot;场景&quot;: &quot;教育场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;活泼女声-视频配音-中文&quot;: {&quot;voice_type&quot;: &quot;BV005_streaming&quot;, &quot;场景&quot;: &quot;视频配音&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;奶气萌娃-特色音色-中文&quot;: {&quot;voice_type&quot;: &quot;BV051_streaming&quot;, &quot;场景&quot;: &quot;特色音色&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;亲切女声-客服场景-中文&quot;: {&quot;voice_type&quot;: &quot;BV007_streaming&quot;, &quot;场景&quot;: &quot;客服场景&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;阳光男声-视频配音-中文&quot;: {&quot;voice_type&quot;: &quot;BV056_streaming&quot;, &quot;场景&quot;: &quot;视频配音&quot;, &quot;语种&quot;: &quot;中文&quot;},
    &quot;东北老铁-方言-东北话&quot;: {&quot;voice_type&quot;: &quot;BV021_streaming&quot;, &quot;场景&quot;: &quot;方言&quot;, &quot;语种&quot;: &quot;东北话&quot;}
}


# 界面布局
ttk.Label(root, text=&quot;AppID：&quot;).grid(column=0, row=0, sticky=tk.W)
appid_entry = ttk.Entry(root)
appid_entry.grid(column=1, row=0, sticky=tk.EW)

ttk.Label(root, text=&quot;Cluster：&quot;).grid(column=0, row=1, sticky=tk.W)
cluster_entry = ttk.Entry(root)
cluster_entry.grid(column=1, row=1, sticky=tk.EW)

ttk.Label(root, text=&quot;Access Token：&quot;).grid(column=0, row=2, sticky=tk.W)
token_entry = ttk.Entry(root)
token_entry.grid(column=1, row=2, sticky=tk.EW)

ttk.Label(root, text=&quot;音色选择：&quot;).grid(column=0, row=3, sticky=tk.W)
voice_type_combobox = ttk.Combobox(root, values=list(voice_mapping.keys()))
voice_type_combobox.grid(column=1, row=3, sticky=tk.EW)
voice_type_combobox.current(0)

ttk.Label(root, text=&quot;朗读速度：&quot;).grid(column=0, row=4, sticky=tk.W)
speed_var = tk.DoubleVar(value=1.0)
speed_scale = ttk.Scale(root, from_=0.2, to=3, variable=speed_var, orient=tk.HORIZONTAL, command=update_speed_label)
speed_scale.grid(column=1, row=4, sticky=tk.EW)
speed_label = ttk.Label(root, text=&quot;1.00&quot;)
speed_label.grid(column=2, row=4, sticky=tk.W)

ttk.Label(root, text=&quot;文本内容：&quot;).grid(column=0, row=5, sticky=tk.NW)
text_input = scrolledtext.ScrolledText(root, height=10)
text_input.grid(column=0, row=6, columnspan=3, sticky=tk.EW)

convert_button = ttk.Button(root, text=&quot;转换为语音&quot;, command=convert_to_speech)
convert_button.grid(column=0, row=7, columnspan=3, sticky=tk.EW)

root.after(100, start_startup_message_thread)

root.mainloop()
更新的下载时，自动用时间命名！同时支持22款目前免费的声音，需要的朋友自己去官网搞一下！OK！最终教程！打开https://www.volcengine.com/该注册的去注册，然后直接登录，建议先储值2元钱 以防欠费也可以先购买优惠包，但建议后买创建选择其实也可以多选 或者 都选 【但没测试过】这是自己创建的短语音 直接点击 语音合成  长的点击 长的重要的1 音色购买，要是没有 就无法使用免费的直接全部开开！完事以后出现声音名称 和 编号也就是这个地方不过，第三版的已经整理完了，拿来就用  时间截止到2024年4月4日的所有免费声音开始填入然后就能合成了其实长语言这地方没搞懂，没有Cluster ID估计是自动的吧，，，教程到这里就结束了封装封装的是第三版链接：https://pan.baidu.com/s/1sFM_9Wf1UGgIxxfnDPLXIw?pwd=kxpp 提取码：kxpp 下载就能用嫌麻烦？有付费版本的https://console.volcengine.com/accp/works-management这上面所有的声音都能用，需要什么看个人可以对比一下 魔音 和 逗哥下课！</description>
</item>
</rdf:RDF>