You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Text-to-Speech API调用报错:无法识别JSON凭据类型求助

问题根因

你加载的client_secret.json是OAuth客户端凭据,仅用于需要用户登录授权的场景,不是GoogleCredential.FromStream()支持的服务账号密钥类型,因此抛出「Unrecognized credential type」错误。

解决步骤
  • 进入GCP控制台对应项目的「IAM与管理」-「服务账号」页面
  • 新建服务账号,为其分配Cloud Text-to-Speech User权限角色;如果已有符合权限的服务账号可直接使用
  • 进入对应服务账号的「密钥」标签页,选择「添加密钥」-「创建新密钥」,密钥类型选择JSON,下载生成的服务账号密钥文件
  • 替换掉你代码中加载的client_secret.json为新下载的服务账号密钥文件
代码修正说明

你原代码中误用了Logging服务的Scope和Endpoint,也不需要手动创建Grpc Channel,正确逻辑如下:
如果配置了环境变量GOOGLE_APPLICATION_CREDENTIALS指向服务账号JSON路径,可直接使用默认构造:

// 只要环境变量配置正确,直接调用Create即可自动加载凭据
var client = await TextToSpeechClient.CreateAsync();

如果需要手动加载指定路径的凭据,使用如下代码:

using (var stream = new FileStream("C:/textToSpeech/你的服务账号密钥文件名.json", FileMode.Open, FileAccess.Read))
{
    var credential = GoogleCredential.FromStream(stream).CreateScoped(TextToSpeechClient.DefaultScopes);

    var client = new TextToSpeechClientBuilder
    {
        Credential = credential
    }.Build();

    var input = new SynthesisInput
    {
        Text = "This is Demo of the Google Cloud Text-to-Speech API"
    };
    VoiceSelectionParams voiceSelection = new VoiceSelectionParams
    {
        LanguageCode = "en-US",
        SsmlGender = SsmlVoiceGender.Female,

    };
    var audioConfig = new AudioConfig
    {
        AudioEncoding = AudioEncoding.Mp3
    };

    var response = await client.SynthesizeSpeechAsync(input, voiceSelection, audioConfig);
    using (var output = File.Create("output.mp3"))
    {
        response.AudioContent.WriteTo(output);
    }

    Console.WriteLine("Audio content written to file output.mp3");
}
额外验证点
  • 打开你下载的服务账号JSON文件,确认顶层type字段值为service_account
  • 确认GCP项目已启用「Cloud Text-to-Speech API」
  • 确认服务账号已正确分配TTS调用权限,没有额外权限限制

内容的提问来源于stack exchange,提问作者mia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 17:54:03