逆向出来的谷歌文字转语音(TTS),可直接调用

没多的话直接贴代码(python): 

import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import requests
import base64


class GetVoice:
    headers = {
        "accept": "*/*",
        "accept-language": "en-US,en;q=0.9",
        "referer": "https://www.google.com/",
        "sec-ch-ua": "\"Chromium\";v=\"124\", \"Google Chrome\";v=\"124\", \"Not-A.Brand\";v=\"99\"",
        "sec-ch-ua-arch": "\"x86\"",
        "sec-ch-ua-bitness": "\"64\"",
        "sec-ch-ua-full-version": "\"124.0.6367.208\"",
        "sec-ch-ua-full-version-list": "\"Chromium\";v=\"124.0.6367.208\", \"Google Chrome\";v=\"124.0.6367.208\", \"Not-A.Brand\";v=\"99.0.0.0\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-model": "\"\"",
        "sec-ch-ua-platform": "\"Windows\"",
        "sec-ch-ua-platform-version": "\"15.0.0\"",
        "sec-ch-ua-wow64": "?0",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
        "x-dos-behavior": "Embed"
    }
    # 代理选填
    '''proxies = {
        "http": "http://127.0.0.1:7890",
        "https": "http://127.0.0.1:7890",
    }'''
    
    @staticmethod
    def write_speech(text, language, outputfile):
        if not outputfile.lower().endswith(".mp3"):
            outputfile += ".mp3"

        text = text.replace(",", "%2C")
        text = requests.utils.quote(text)
        url = f"https://www.google.com/async/translate_tts?&ttsp=tl:{language},txt:{text},spd:1&cs=0&async=_fmt:jspb"
        response = requests.get(url, headers=GetVoice.headers)
        #response = requests.get(url, headers=GetVoice.headers, proxies=GetVoice.proxies)
        try:
            response.raise_for_status()
        except requests.exceptions.HTTPError:
            return False

        response_body = response.text
        response_body = response_body[response_body.find("[\"") + 2:response_body.rfind("\"]")]

        try:
            data = base64.b64decode(response_body)
            with open(outputfile, "wb") as file:
                file.write(data)
            return True
        except Exception as e:
            print(e)
            return False


class Language:
    Chinese = "zh-CN"
    English = "en"


class App:
    def __init__(self, root):
        self.root = root
        self.root.title("Text to Speech Converter")

        tk.Label(root, text="Enter Text:").pack()
        self.text_input = tk.Text(root, height=10, width=50)
        self.text_input.pack()

        tk.Label(root, text="Select Language:").pack()
        self.language_var = tk.StringVar(root)
        self.language_var.set("English")  # default value
        languages = ("English", "Chinese")
        self.language_option = tk.OptionMenu(root, self.language_var, *languages)
        self.language_option.pack()

        self.save_button = tk.Button(root, text="Save as MP3", command=self.save_as)
        self.save_button.pack()

    def save_as(self):
        text = self.text_input.get("1.0", "end-1c")
        language = self.language_var.get()
        lang_code = Language.English if language == "English" else Language.Chinese

        outputfile = filedialog.asksaveasfilename(
            defaultextension=".mp3",
            filetypes=[("MP3 files", "*.mp3")],
        )
        if outputfile:
            success = GetVoice.write_speech(text, lang_code, outputfile)
            if success:
                messagebox.showinfo("Success", f"语音文件已成功保存为 {outputfile}")
            else:
                messagebox.showerror("Error", "语音文件生成失败")


if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()

运行效果

.

注意:无法直连google的需要修改下代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值