Firebase AI Logic(firebase-js-sdk)多说话人语音合成配置指南:MultiSpeakerVoiceConfig 详解
开发工具后端【免费下载链接】firebase-js-sdkFirebase Javascript SDK项目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk点击查看免费下载本文基于 firebase-js-sdk 仓库中packages/aiAI Logic模块的 API 参考文档与源码讲解多说话人multi-speaker语音合成配置接口MultiSpeakerVoiceConfig的字段结构、与周边类型MultiSpeakerSpeechConfig、SpeakerVoiceConfig、VoiceConfig的组装关系以及如何将其嵌入generateContent请求实现旁白 角色式的多角色对话语音输出。读完本文你将能独立构造一份完整的多说话人speechConfig配置并理解其在 SDK 请求流水线中是如何被透传与校验的。一、MultiSpeakerVoiceConfig 是什么MultiSpeakerVoiceConfig是 Firebase AI LogicGemini TTS / speech synthesis 能力中用于描述多说话人语音方案的配置接口。它定义在 packages/ai/src/types/requests.ts源码与参考文档一致/** * Configuration for multi-speaker setup. * * beta */ export interface MultiSpeakerVoiceConfig { /** All the enabled speaker voices. */ speakerVoiceConfigs: SpeakerVoiceConfig[]; }官方参考文档docs-devsite/ai.multispeakervoiceconfig.md给出的签名与注释完全对应Signatureexport interface MultiSpeakerVoiceConfig说明Configuration for multi-speaker setup多说话人方案配置该接口是Public Preview公开预览API文档明确提示可能随反馈调整不要在生产环境使用。这一约束同样体现在源码的beta标注上。唯一属性speakerVoiceConfigs属性类型说明speakerVoiceConfigsSpeakerVoiceConfig[]所有启用的说话人声音配置speakerVoiceConfigs是一个数组数组中的每一项对应一个说话人speaker。换句话说多说话人语音合成本质上是为多个角色分别指定声音让模型按角色发声。二、speakerVoiceConfigs 的组成SpeakerVoiceConfig数组元素类型为SpeakerVoiceConfigdocs-devsite/ai.speakervoiceconfig.md源码定义于 packages/ai/src/types/requests.tsexport interface SpeakerVoiceConfig { /** The name of the speaker to use (same as in prompt). */ speaker: string; /** The configuration for the voice to use. */ voiceConfig: VoiceConfig; }两个字段均为必填属性类型说明speakerstring说话人名称必须与提示词prompt中使用的名字一致voiceConfigVoiceConfig该说话人使用的声音配置这里有一个关键语义speaker字段的值是一个角色名/说话人标识符SDK 并不会自动定义它而是要求开发者在 prompt 中以相同名称指代该角色。例如你希望生成一段旁白narrator与角色character对话的语音那么 prompt 里就要让模型明确输出这两个角色的台词同时在speakerVoiceConfigs中用同名speaker分别绑定不同的声音。voiceConfig 的嵌套结构voiceConfig的类型是VoiceConfigdocs-devsite/ai.voiceconfig.md源码见 packages/ai/src/types/requests.tsexport interface VoiceConfig { prebuiltVoiceConfig?: PrebuiltVoiceConfig; }它目前只承载一个可选字段prebuiltVoiceConfig类型为PrebuiltVoiceConfigdocs-devsite/ai.prebuiltvoiceconfig.md定义于 packages/ai/src/types/requests.tsexport interface PrebuiltVoiceConfig { voiceName?: string; }voiceName用于语音合成的预置声音名称字符串类型、可选。官方文档提示完整的声音列表与试听可参考 Chirp 3: HD Voices 声音表源码注释中也保留了这一引用。因此一个说话人的完整配置链为speakerVoiceConfigs[] → SpeakerVoiceConfig ├─ speaker: 角色名与 prompt 一致 └─ voiceConfig: VoiceConfig └─ prebuiltVoiceConfig: PrebuiltVoiceConfig └─ voiceName: 预置声音名三、MultiSpeakerVoiceConfig 在类型体系中的位置MultiSpeakerVoiceConfig不是孤立存在的它被MultiSpeakerSpeechConfig引用而后者又归属于统一的SpeechConfig联合类型。整条类型链在 packages/ai/src/types/requests.ts 中一次定义清楚export type SpeechConfig SingleSpeakerSpeechConfig | MultiSpeakerSpeechConfig; export interface BaseSpeechConfig { /** IETF BCP-47 language code. */ languageCode?: string; } export interface SingleSpeakerSpeechConfig extends BaseSpeechConfig { voiceConfig?: VoiceConfig; /** Multi-speaker configuration must not be set when using a single speaker. */ multiSpeakerVoiceConfig?: never; } export interface MultiSpeakerSpeechConfig extends BaseSpeechConfig { /** Single-speaker voice configuration must not be set when using multiple speakers. */ voiceConfig?: never; /** Configuration for multi-speaker setup. */ multiSpeakerVoiceConfig?: MultiSpeakerVoiceConfig; }从源码结构可以总结出三个要点二选一的互斥约束SingleSpeakerSpeechConfig中multiSpeakerVoiceConfig的类型是neverMultiSpeakerSpeechConfig中voiceConfig的类型是never。这意味着多说话人与单说话人两种配置不能同时出现SDK 通过 TypeScript 类型系统在编译期强制这一约束——若在设置multiSpeakerVoiceConfig的同时又设置了voiceConfig将无法通过类型检查。共享基类两者都继承BaseSpeechConfig因此可以共用可选的languageCodeIETF BCP-47 语言代码如en-US。挂载点SpeechConfig以可选字段speechConfig的形式出现在两类配置入口上GenerationConfig.speechConfigpackages/ai/src/types/requests.ts面向 TTS 模型的文本生成请求LiveGenerationConfig.speechConfigpackages/ai/src/types/requests.ts面向 Live API 模型。对应的 API 参考文档为 docs-devsite/ai.multispeakerspeechconfig.md。四、完整配置示例来自 SDK 测试的真实用法仓库中的单元测试给出了最可信的用法范本。packages/ai/src/requests/request-helpers.test.ts 中的preserves SpeechConfig for multi-speaker setups用例演示了多说话人配置如何嵌入generateContent请求const result formatGenerateContentInput({ contents: [ { role: user, parts: [{ type: text, text: Write a dialogue. }] } ], generationConfig: { speechConfig: { languageCode: en-US, multiSpeakerVoiceConfig: { speakerVoiceConfigs: [ { speaker: narrator, voiceConfig: { prebuiltVoiceConfig: { voiceName: Aoede } } }, { speaker: character, voiceConfig: { prebuiltVoiceConfig: { voiceName: Charon } } } ] } } } });测试断言result.generationConfig?.speechConfig与上述输入深度相等deep.equal即formatGenerateContentInput会原样保留多说话人配置不做任何改写。这验证了多说话人配置可以直接放在generationConfig.speechConfig.multiSpeakerVoiceConfig下speakerVoiceConfigs数组中每个元素独立指定speaker与voiceConfig该配置在请求格式化阶段会被完整透传pass-through不会丢失。此外同文件中的另一个用例preserves SpeechConfig alongside other GenerationConfig parameterspackages/ai/src/requests/request-helpers.test.ts展示了speechConfig可以与其他生成参数如temperature、maxOutputTokens、responseMimeType共存于同一个generationConfig中。单说话人对照示例作为对照单说话人配置同一测试文件 request-helpers.test.ts使用voiceConfig而非multiSpeakerVoiceConfigspeechConfig: { languageCode: en-US, voiceConfig: { prebuiltVoiceConfig: { voiceName: Puck } } }两相对照可以更直观地理解多说话人 multiSpeakerVoiceConfig.speakerVoiceConfigs[]为每个角色各配一个声音单说话人 直接用voiceConfig指定一个声音两者不可混用。五、如何传递到请求底层调用链多说话人配置从业务代码到网络请求的传递路径在源码中有清晰的实现依据业务层构造调用GenerativeModel.generateContent()时传入GenerateContentRequest其中generationConfig.speechConfig即承载多说话人配置相关类型见 packages/ai/src/types/requests.ts。请求格式化formatGenerateContentInput()packages/ai/src/requests/request-helpers.ts负责把字符串、数组或对象统一成GenerateContentRequest结构并对contents、systemInstruction做标准化对generationConfig.speechConfig则原样透传这正是测试用例断言deep.equal的原因。模型层转发GenerativeModel将格式化后的请求交给底层makeRequest发起推理请求。测试 packages/ai/src/models/generative-model.test.ts 验证了speechConfig中的languageCode与voiceName会出现在实际发出的请求体字符串中value.includes(en-US) value.includes(Puck)证明该配置最终会随请求送达后端模型。也就是说MultiSpeakerVoiceConfig不是 SDK 内部消费的私有类型而是面向调用方开放、由后端 TTS 模型解释的公开配置结构。六、使用要点与注意事项综合参考文档与源码使用MultiSpeakerVoiceConfig时有以下几点需要留意Public Preview 限制整个SpeechConfig家族含MultiSpeakerVoiceConfig都是beta/ Public Preview API接口可能随反馈变更官方明确不建议在生产环境使用。角色名必须与 prompt 对齐SpeakerVoiceConfig.speaker的值要与提示词中使用的角色名一致否则模型无法把台词对号入座到指定声音上。单/多说话人互斥MultiSpeakerSpeechConfig的voiceConfig被声明为never不能在多说话人模式下同时设置单说话人声音反之亦然。languageCode可选但建议设置继承自BaseSpeechConfig使用 IETF BCP-47 语言代码例如en-US测试示例中均显式给出。voiceName需来自预置声音表prebuiltVoiceConfig.voiceName应选用后端支持的声音名称源码注释指引到 Chirp 3: HD Voices 声音列表无效名称将导致合成失败。透传行为formatGenerateContentInput对speechConfig不做校验或改写配置的最终解释权在后端模型因此配置错误通常会在请求阶段以 API 错误形式暴露如AIErrorCode相关错误而非本地类型错误。七、小结MultiSpeakerVoiceConfig是 firebase-js-sdkpackages/ai模块中多说话人语音合成配置的核心承载接口它通过speakerVoiceConfigs: SpeakerVoiceConfig[]为每个角色绑定独立的voiceConfig目前落到prebuiltVoiceConfig.voiceName并由MultiSpeakerSpeechConfig挂载到generateContent/ Live API 请求的generationConfig.speechConfig上。其类型定义见 packages/ai/src/types/requests.ts真实调用范式可参考 packages/ai/src/requests/request-helpers.test.ts 的多说话人测试用例。对于需要旁白 角色多音色对话输出的场景这套配置是开箱即用的标准答案。赞分享开发工具后端【免费下载链接】firebase-js-sdkFirebase Javascript SDK项目地址https://gitcode.com/gh_mirrors/fi/firebase-js-sdk点击查看免费下载相关推荐Firebase AI Logicfirebase-js-sdkCountTokensRequest 接口详解Token 计数请求的完整配置指南Firebase AI Logicfirebase js sdkCountTokensRequest 接口详解Token 计数请求的完整配置指南 Coun开发工具后端Firebase AIGemini多扬声器语音合成配置指南MultiSpeakerSpeechConfig 接口详解Firebase AIGemini多扬声器语音合成配置指南MultiSpeakerSpeechConfig 接口详解 本篇技术指南以 firebase j开发工具后端Firebase AIAI LogicModelParams 接口详解getGenerativeModel() 参数配置指南Firebase AIAI LogicModelParams 接口详解getGenerativeModel 参数配置指南 ModelParams 是 Fi开发工具后端上一篇深入解析 CozeLoop 前端多语言包 cozeloop/loop-lng结构、合并机制与 i18n 集成实践下一篇Android Studio中文界面插件3步告别英文困扰提升开发效率200%创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

3步装好foobox-cn:foobar2000界面美化的完整指南

3步装好foobox-cn:foobar2000界面美化的完整指南

3步装好foobox-cn:foobar2000界面美化的完整指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobar2000 音质是真的好,可默认界面黑底白字,怎么看都像十年前的…

2026/10/15 3:04:35 阅读更多 →
practical-aspnetcore 实战:ASP.NET Core Output Cache 输出缓存中间件入门(默认 1 分钟过期与 64 MB 响应体上限)

practical-aspnetcore 实战:ASP.NET Core Output Cache 输出缓存中间件入门(默认 1 分钟过期与 64 MB 响应体上限)

示例工程 【免费下载链接】practical-aspnetcore Practical samples of ASP.NET Core 11, 10, 9, 8.0, 7.0, 6.0, 5.0, 3.1, 2.2, and 2.1,projects you can use. Readme contains explanations on all projects. 项目地址: https://gitcode.com/gh_mirrors/pr/prac…

2026/10/15 3:04:35 阅读更多 →
coreboot 集成 Cavium BDK 实战指南:DRAM/PCIe 初始化、自研 Devicetree 与调试配置

coreboot 集成 Cavium BDK 实战指南:DRAM/PCIe 初始化、自研 Devicetree 与调试配置

固件嵌入式操作系统驱动开发 【免费下载链接】coreboot Read-only mirror of https://review.coreboot.org/coreboot.git. Synced every hour. We dont handle Pull Requests. 项目地址: https://gitcode.com/gh_mirrors/co/coreboot 点击查看 免费下载 本文聚焦 c…

2026/10/15 3:03:35 阅读更多 →

最新新闻

Path of Building 完整使用指南

Path of Building 完整使用指南

Path of Building 完整使用指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 新赛季开荒前,最常见的纠结是这样的:照着规划了三天,在…

2026/10/15 3:46:43 阅读更多 →
klogg 日志探索工具完全指南:核心特性、多平台安装与源码构建实战

klogg 日志探索工具完全指南:核心特性、多平台安装与源码构建实战

桌面应用开发工具 【免费下载链接】klogg Really fast log explorer based on glogg project 项目地址: https://gitcode.com/gh_mirrors/kl/klogg 点击查看 免费下载 klogg 是一款基于 Qt 的开源跨平台图形化日志浏览与搜索工具,可视为 grep、less 与 …

2026/10/15 3:46:43 阅读更多 →
AugLy 工具包 augly.utils 深度解析:资源路径、常量与多模态增强的底层支撑

AugLy 工具包 augly.utils 深度解析:资源路径、常量与多模态增强的底层支撑

机器学习AI 应用 【免费下载链接】AugLy A data augmentations library for audio, image, text, and video. 项目地址: https://gitcode.com/gh_mirrors/au/AugLy 点击查看 免费下载 本文以 AugLy 开源数据增强库中的 augly.utils 工具包为核心,系统梳…

2026/10/15 3:46:43 阅读更多 →
The Book of Shaders 实战:GLSL 片段着色器的第一个 Hello World 逐行解析

The Book of Shaders 实战:GLSL 片段着色器的第一个 Hello World 逐行解析

【免费下载链接】thebookofshaders Step-by-step guide through the abstract and complex universe of Fragment Shaders. 项目地址: https://gitcode.com/gh_mirrors/th/thebookofshaders 点击查看 免费下载 本文基于 The Book of Shaders 仓库的第二章内容&…

2026/10/15 3:46:43 阅读更多 →
TheBigPromptLibrary 实战:拆解「22.500+ Best Custom GPTs」——如何用一份指令构建 GPT 检索推荐 Agent

TheBigPromptLibrary 实战:拆解「22.500+ Best Custom GPTs」——如何用一份指令构建 GPT 检索推荐 Agent

提示工程AI 安全治理 【免费下载链接】TheBigPromptLibrary A collection of prompts, system prompts and LLM instructions 项目地址: https://gitcode.com/gh_mirrors/th/TheBigPromptLibrary 点击查看 免费下载 导读:本文以 TheBigPromptLibrary 仓…

2026/10/15 3:46:43 阅读更多 →
企业布局 GEO 要避开哪些陷阱,传播易解析 AI 采信底层规则

企业布局 GEO 要避开哪些陷阱,传播易解析 AI 采信底层规则

随着大语言模型、AI智能搜索逐步取代传统关键词检索,成为用户信息获取的核心渠道,企业品牌营销的底层逻辑正在发生根本性、结构性变革。生成式引擎优化(GEO)的核心逻辑,是依托人工智能模型整合全网权威信源,自动生成精准答案、输出…

2026/10/15 3:45:43 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →