你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

什么是嵌入式语音?

嵌入式语音设计用于云连接是间歇性有效或不可用的设备端语音转文本文本转语音方案。 例如,可以在工业设备、启用语音的空调装置或可能驶出范围的汽车中使用嵌入式语音。 还可以开发混合云和脱机解决方案。 对于设备必须位于安全环境(如银行或政府实体)的情况,应首先考虑使用断开连接的容器

重要

Microsoft 限制对嵌入式语音的访问。 可以通过 Azure AI 语音嵌入式语音受限访问评审来申请访问权限。 有关详细信息,请参阅嵌入式语音的受限访问

平台要求

嵌入式语音包含在 C#、C++ 和 Java 的语音 SDK(版本 1.24.1 和更高版本)中。 有关编程语言和目标平台特定详细信息,请参阅通用语音 SDK 安装要求

选择目标环境

在 Arm64 (arm64-v8a) 或 Arm32 (armeabi-v7a) 硬件上需要 Android 7.0(API 级别 24)或更高版本。

仅 Arm64 支持具有神经语音的嵌入式 TTS。

限制

嵌入式语音仅适用于 C#、C++ 和 Java SDK。 其他语音 SDK、语音 CLI 和 REST API 不支持嵌入式语音。

嵌入式语音识别仅支持单声道 16 位、8-kHz 或 16-kHz PCM 编码的 WAV 音频格式。

嵌入式神经语音支持 24 kHz RIFF/RAW,RAM 要求为 100 MB。

嵌入式语音 SDK 包

对于 C# 嵌入式应用程序,请安装以下适用于 C# 包的语音 SDK:

程序包 说明
Microsoft.CognitiveServices.Speech 使用语音 SDK 所必需的
Microsoft.CognitiveServices.Speech.Extension.Embedded.SR 嵌入式语音识别所必需的
Microsoft.CognitiveServices.Speech.Extension.Embedded.TTS 嵌入式语音合成所必需的
Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime 嵌入式语音识别和合成所必需的
Microsoft.CognitiveServices.Speech.Extension.Telemetry 嵌入式语音识别和合成所必需的

对于 C++ 嵌入式应用程序,请安装以下适用于 C++ 包的语音 SDK:

程序包 说明
Microsoft.CognitiveServices.Speech 使用语音 SDK 所必需的
Microsoft.CognitiveServices.Speech.Extension.Embedded.SR 嵌入式语音识别所必需的
Microsoft.CognitiveServices.Speech.Extension.Embedded.TTS 嵌入式语音合成所必需的
Microsoft.CognitiveServices.Speech.Extension.ONNX.Runtime 嵌入式语音识别和合成所必需的
Microsoft.CognitiveServices.Speech.Extension.Telemetry 嵌入式语音识别和合成所必需的

选择目标环境

对于 Java 嵌入式应用程序,请将 client-sdk-embedded (.jar) 添加为依赖项。 此包支持云、嵌入式和混合语音。

重要

请勿在同一项目中添加 client-sdk,因为它仅支持云语音服务。

按照以下步骤使用 Apache Maven 安装适用于 Java 的语音 SDK:

  1. 安装 Apache Maven
  2. 在需要新项目的地方打开命令提示符,并创建一个新的 pom.xml 文件。
  3. 将以下 XML 内容复制到 pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.microsoft.cognitiveservices.speech.samples</groupId>
        <artifactId>quickstart-eclipse</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                <source>1.8</source>
                <target>1.8</target>
                </configuration>
            </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
            <groupId>com.microsoft.cognitiveservices.speech</groupId>
            <artifactId>client-sdk-embedded</artifactId>
            <version>1.40.0</version>
            </dependency>
        </dependencies>
    </project>
    
  4. 若要安装语音 SDK 和依赖项,请运行以下 Maven 命令。
    mvn clean dependency:copy-dependencies
    

模型和语音

对于嵌入式语音,需要下载用于语音转文本的语音识别模型和用于文本转语音的声音。 将在成功完成受限访问评审进程后提供说明。

以下语音转文本模型可用:da-DK、de-DE、en-AU、en-CA、en-GB、en-IE、en-IN、en-NZ、en-US、es-ES、es-MX、fr-CA、fr-FR、it-IT、ja-JP、ko-KR、pt-BR、pt-PT、zh-CN、zh-HK 和 zh-TW。

此处的所有文本转语音区域设置(fa-IR、波斯语(伊朗)除外)可直接使用,并带有 1 个选定的女性语音和/或 1 个选定的男性语音。 欢迎提供意见,帮助我们了解你对其他语言和语音的需求。

嵌入式语音配置

对于云连接的应用程序,如大多数语音 SDK 示例中所示,可以使用具有语音资源密钥和区域的 SpeechConfig 对象。 对于嵌入式语音,不使用语音资源。 使用下载到本地设备的模型和语音,而非云资源。

使用 EmbeddedSpeechConfig 对象可设置模型或语音的位置。 如果应用程序同时用于语音转文本和文本转语音,则可以使用相同的 EmbeddedSpeechConfig 对象来设置模型和声音的位置。

// Provide the location of the models and voices.
List<string> paths = new List<string>();
paths.Add("C:\\dev\\embedded-speech\\stt-models");
paths.Add("C:\\dev\\embedded-speech\\tts-voices");
var embeddedSpeechConfig = EmbeddedSpeechConfig.FromPaths(paths.ToArray());

// For speech to text
embeddedSpeechConfig.SetSpeechRecognitionModel(
    "Microsoft Speech Recognizer en-US FP Model V8",
    Environment.GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig.SetSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    Environment.GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig.SetSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm);

提示

语音转文本快速入门文本转语音快速入门中定义了 GetEnvironmentVariable 函数。

// Provide the location of the models and voices.
vector<string> paths;
paths.push_back("C:\\dev\\embedded-speech\\stt-models");
paths.push_back("C:\\dev\\embedded-speech\\tts-voices");
auto embeddedSpeechConfig = EmbeddedSpeechConfig::FromPaths(paths);

// For speech to text
embeddedSpeechConfig->SetSpeechRecognitionModel((
    "Microsoft Speech Recognizer en-US FP Model V8",
    GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig->SetSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    GetEnvironmentVariable("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig->SetSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat::Riff24Khz16BitMonoPcm);
// Provide the location of the models and voices.
List<String> paths = new ArrayList<>();
paths.add("C:\\dev\\embedded-speech\\stt-models");
paths.add("C:\\dev\\embedded-speech\\tts-voices");
var embeddedSpeechConfig = EmbeddedSpeechConfig.fromPaths(paths);

// For speech to text
embeddedSpeechConfig.setSpeechRecognitionModel(
    "Microsoft Speech Recognizer en-US FP Model V8",
    System.getenv("EMBEDDED_SPEECH_MODEL_LICENSE"));

// For text to speech
embeddedSpeechConfig.setSpeechSynthesisVoice(
    "Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)",
    System.getenv("EMBEDDED_SPEECH_MODEL_LICENSE"));
embeddedSpeechConfig.setSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff24Khz16BitMonoPcm);

嵌入式语音代码示例

可以在 GitHub 上找到现成的嵌入式语音示例。 有关从头开始的项目的注解,请参阅示例特定文档:

可以在 GitHub 上找到现成的嵌入式语音示例。 有关从头开始的项目的注解,请参阅示例特定文档:

可以在 GitHub 上找到现成的嵌入式语音示例。 有关从头开始的项目的注解,请参阅示例特定文档:

混合语音

默认情况下,具有 HybridSpeechConfig 对象的混合语音使用云语音服务,在云连接受限或速度缓慢时把嵌入式语音作为备用。

对于具有混合语音配置的语音转文本(识别模型),当反复尝试连接到云服务失败时,将使用嵌入式语音。 如果稍后恢复连接,那么识别模型可能会再次继续使用云服务。

使用文本转语音(声音)的混合语音配置,嵌入式语音和云合成并行运行,并且根据响应速度选择最终结果。 对于每个新的合成请求会再次评估最佳结果。

云语音

对于云语音,请使用 SpeechConfig 对象,如语音转文本快速入门文本转语音快速入门所示。 若要运行嵌入式语音的快速入门,可以将 SpeechConfig 替换为 EmbeddedSpeechConfigHybridSpeechConfig。 大多数其他语音识别和合成代码都是相同的(无论是使用云、嵌入式还是混合配置)。

嵌入式语音功能

对于嵌入式语音,必须注意的是,由于模型结构的差异,目前可能不支持某些 SSML 标记。 有关不支持的 SSML 标记的详细信息,请参阅下表。

1 级 2 级 Sub 值 在嵌入式 NTTS 中受支持
audio src
bookmark
break 力量
时间
silence type Leading、Tailing、Comma-exact 等
value
emphasis level
lang
lexicon uri
算术
msttsaudioduration value
msttsbackgroundaudio src
fadein
fadeout
msttsexpress-as style
styledegree
role
msttssilence
msttsviseme type redlips_front、FacialExpression
p
音素 alphabet ipa、sapi、ups 等
ph
prosody contour 句子级别支持,单词级别仅限 en-US 和 zh-CN
pitch
range
费率
s
say-as interpret-as characters、spell-out、number_digit、date 等
format
detail
sub 别名
speak
voice