标签: ssml

为Android TTS引擎指定发音的最佳做法?

总的来说,我对Android的默认文本到语音引擎(即com.svox.pico)印象非常深刻.正如预期的那样,它会错误地发音一些词(就像我一样),因此偶尔需要一些发音指导.所以我想知道最好的做法是用语音拼写出pico TTS引擎错误发音的那些词.

例如,查查拉卡鸟的正确发音是CHAH-chah-LAH-kah.这是TTS引擎产生的:

mTts.speak("Chachalaca", TextToSpeech.QUEUE_ADD, null); // output: chuh-KAL-uh-KUH
mTts.speak("CHAH-chah-LAH-kah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-EL-AY-AYCH-dash-kuh
mTts.speak("CHAHchahLAHkah", TextToSpeech.QUEUE_ADD, null); // output: CHA-chah-LAH-ka
mTts.speak("CHAH chah LOCKah", TextToSpeech.QUEUE_ADD, null); // output: CHAH-chah-LAH-kah
Run Code Online (Sandbox Code Playgroud)

这是我的问题.

  • 是否有Android TTS引擎识别的标准拼音?
  • 如果没有,是否有制作自发音拼写,这将使更多的拼写可能是正确的未来TTS引擎/版本的一些一般的规则?
  • 似乎Android TTS引擎忽略了文本案例.指定重点的最佳方法是什么?

顺便说一句,这是TTS引擎写入logcat的内容:

V/TtsService(294):TTS处理:姜查姜查洛克
V/TtsService(294):TtsService.setLanguage(ENG,USA)
I/SVOX微微引擎(294):语言已经被加载(EN-US == EN-US )
I/SynthProxy(294):将语速设置为100
I/SynthProxy(294):将音高设置为100

[UPDATE]

我尝试将XML文档传递给TextToSpeech.Speak(),如下所示:

            String text = "<?xml version=\"1.0\"?>" +
                "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                    "xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis " +
                        "http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" " +
                    "xml:lang=\"en-US\">" +

                    "That is a big car! " +
                    "That <emphasis>is</emphasis> a big car! …
Run Code Online (Sandbox Code Playgroud)

android text-to-speech ssml

17
推荐指数
2
解决办法
9977
查看次数

如何从 Google Cloud text-to-speech API 获取 SSML &lt;mark&gt; 时间戳

我想通过 Google Cloud text-to-speech API使用SSML 标记来请求音频流中这些标记的时间。这些时间戳是必要的,以便为用户提供效果提示、单词/部分突出显示和反馈。

我发现这个问题是相关的,尽管这个问题是指每个单词的时间戳而不是 SSML<mark>标签。

以下 API 请求返回 OK,但显示缺少请求的标记数据。这是使用Cloud Text-to-Speech API v1.

{
 "voice": {
  "languageCode": "en-US"
 },
 "input": {
  "ssml": "<speak>First, <mark name=\"a\"/> second, <mark name=\"b\"/> third.</speak>"
 },
 "audioConfig": {
  "audioEncoding": "mp3"
 }
} 
Run Code Online (Sandbox Code Playgroud)

回复:

{
 "audioContent":"//NExAAAAANIAAAAABcFAThYGJqMWA..."
}
Run Code Online (Sandbox Code Playgroud)

它只提供没有任何上下文信息的合成音频。

是否有我忽略的 API 请求可以公开有关这些标记的信息,例如IBM WatsonAmazon Polly 的情况

markers ssml google-text-to-speech google-cloud-speech

14
推荐指数
2
解决办法
797
查看次数

Android TTS是否支持语音合成标记语言?

将以下SSML(语音合成标记语言)文档传递给com.svox.pico TextToSpeech引擎会导致读取XML主体,但无法通过音素元素或强调元素进行控制.这个结果(没有明显的SSML控制)在运行Android 2.2的Nexus One以及运行SDK级别为8的AVD的模拟器上是相同的.

            String text = "<?xml version=\"1.0\"?>" +
                "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" " +
                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
                    "xsi:schemaLocation=\"http://www.w3.org/2001/10/synthesis " +
                        "http://www.w3.org/TR/speech-synthesis/synthesis.xsd\" " +
                    "xml:lang=\"en-US\">" +

                    "tomato " +
                    "<phoneme alphabet=\"ipa\" ph=\"t&amp;#x259;mei&amp;#x325;&amp;#x27E;ou&amp;#x325;\"> tomato </phoneme> " +

                    "That is a big car! " +
                    "That <emphasis> is </emphasis> a big car! " +
                    "That is a <emphasis> big </emphasis> car! " +
                    "That is a huge bank account! " +
                    "That <emphasis level=\"strong\"> is </emphasis> a huge bank account! …
Run Code Online (Sandbox Code Playgroud)

android text-to-speech ssml

11
推荐指数
1
解决办法
4701
查看次数

Android TTS XML中phoneme属性的正确语法是什么?

我的理解是,这个X-SAMPA XML样本,就像这里的其他样本一样,甚至在这里这里,都应该听起来像是什么.

String text = "<speak xml:lang=\"en-US\"> <phoneme alphabet=\"xsampa\" ph=\"faIv\"/>.</speak>";
mTts.speak(text, TextToSpeech.QUEUE_ADD, null); 
Run Code Online (Sandbox Code Playgroud)

然而,由于一些奇怪的原因,它没有说什么(完全沉默).

我错过了什么?

为了澄清:我的TTS示例应用程序设置正常:如果我.在该</speak>标记之前将其更改为任何单词,Android TTS只是说这个单词很好.我唯一的问题是我无法以<phoneme alphabet=\"xsampa\" ph=\"faIv\"/>任何方式利用它.

我知道a .应该是静默的,但根据这些样本的海报,它应该是XML中的XSAMPA音素.我错过了什么?

android text-to-speech ssml

9
推荐指数
1
解决办法
2222
查看次数

有没有办法将语音直接转换为SSML?

正如一个人能够使用各种语音到文本的"听写"工具将口语转换成相应的文本,我想知道是否有类似的工具将口语转换成相应的SSML.也就是说,除了与说话者的声音中存在的任何语调,韵律,暂停/休息,变形等相关的相关SSML标签之外,它还将提供文本.

text-to-speech speech-synthesis speech-to-text ssml alexa-voice-service

8
推荐指数
1
解决办法
562
查看次数

如何在Alexa Skill lambda函数中正确指定SSML?

我正在尝试制作一个Alexa技能,其中Alexa说的是用SSML标记的东西.我试图模仿这个回购中的例子,但我总是收到一个lambda响应

{
  ...
  "response": {
    "outputSpeech": {
      "type": "SSML",
      "ssml": "<speak> [object Object] </speak>"
    },
  ...
}
Run Code Online (Sandbox Code Playgroud)

和Alexa字面上说"对象对象".


这是我输入到我的lambda函数(使用node.js):

var speechOutput = {
    type: "SSML",
    ssml: 'This <break time=\"0.3s\" /> is not working',
};

this.emit(':tellWithCard', speechOutput, SKILL_NAME, "ya best not repeat after me.")
Run Code Online (Sandbox Code Playgroud)

像这样设置speechOutput也不起作用:

var speechOutput = {
    type: "SSML",
    ssml: 'This <break time=\"0.3s\" /> is not working',
};
Run Code Online (Sandbox Code Playgroud)


编辑:

index.js

'使用严格';

var Alexa = require('alexa-sdk');

var APP_ID = "MY_ID_HERE";
var SKILL_NAME = "MY_SKILL_NAME";

exports.handler = function(event, context, …
Run Code Online (Sandbox Code Playgroud)

ssml alexa node.js aws-lambda alexa-skills-kit

6
推荐指数
2
解决办法
8093
查看次数

无法在Google Home SSML中使用IPA音素

Alexa有能力使用IPA音素发声说话......下面的示例

<speak>
    You say, <phoneme alphabet="ipa" ph="p??k??n">pecan</phoneme>. 
    I say, <phoneme alphabet="ipa" ph="?pi.kæn">pecan</phoneme>.
</speak>
Run Code Online (Sandbox Code Playgroud)

我无法在Google Home中的任何地方看到这种支持.任何人都知道Googles SSML是否支持此功能?

ssml actions-on-google google-home

6
推荐指数
1
解决办法
671
查看次数

TTS:如何将文本转换为 SSML?

我的目标是让设备用人声说出文本。所以我正在使用 Google 的 Text-to-Speech API。

这是我的代码的样子:

package ch.yourclick.kitt;

import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayout;
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.texttospeech.v1.AudioConfig;
import com.google.cloud.texttospeech.v1.AudioEncoding;
import com.google.cloud.texttospeech.v1.SsmlVoiceGender;
import com.google.cloud.texttospeech.v1.SynthesisInput;
import com.google.cloud.texttospeech.v1.SynthesizeSpeechResponse;
import com.google.cloud.texttospeech.v1.TextToSpeechClient;
import com.google.cloud.texttospeech.v1.TextToSpeechSettings;
import com.google.cloud.texttospeech.v1.VoiceSelectionParams;
import com.google.common.html.HtmlEscapers;
import com.google.protobuf.ByteString;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

import ch.yourclick.kitt.ui.main.SectionsPagerAdapter;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); …
Run Code Online (Sandbox Code Playgroud)

java android text-to-speech ssml

6
推荐指数
1
解决办法
387
查看次数

C# SAPI 可以讲 SSML 字符串吗?

我在我的 C# WPF 项目中实现了 TTS。

以前,我使用 System.Speech.Synthesis 命名空间中的 TTS 来说话。说话内容为SSML格式(语音合成器标记语言,支持自定义语速、语音、强调)如下:

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><prosody rate="x-fast">hello world. This is a long sentence speaking very fast!</prosody></speak>
Run Code Online (Sandbox Code Playgroud)

但不幸的是,System.Speech.Synthesis TTS 存在内存泄漏问题,正如我在问题Memory Leak in .Net Speech.Synthesizer?中提到的那样。

所以我决定使用SAPI COM组件。我可以轻松地让SAPI讲纯文本内容。但后来我继续尝试让它说出 SSML 字符串,但失败了。代码如下:

//Initialize TTS instance

SpeechLib.SpVoiceClass tts = new SpeechLib.SpVoiceClass();

//Generate SSML string

string textToSpeak = "hello world speak Extra Fast.";
PromptBuilder pb = new PromptBuilder();
pb.StartStyle(new PromptStyle(PromptRate.ExtraFast));
pb.AppendText(textToSpeak);
pb.EndStyle();

ssmlString = pb.ToXml();    //ssmlString = @"<speak version=""1.0"" .... 

//Speak!

tts.Speak(ssmlString, SpeechLib.SpeechVoiceSpeakFlags.SVSFParseSsml);
Run Code Online (Sandbox Code Playgroud)

代码的重要部分是

tts.Speak(ssmlString, SpeechLib.SpeechVoiceSpeakFlags.SVSFParseSsml);
Run Code Online (Sandbox Code Playgroud)

它使用 …

c# speech sapi text-to-speech ssml

5
推荐指数
1
解决办法
2763
查看次数

不同的 &lt;prosody&gt; ssml 值在 Google Text to Speech 中生成相同的音频

使用 WaveNet 语音时使用 ssml 时无法生成不同的音频波。

<prosody rate="slow" pitch="-2st">Can you hear me now?</prosody>
<prosody rate="medium" pitch="1st">Can you hear me now?</prosody>
<prosody rate="high" pitch="5st">Can you hear me now?</prosody>
Run Code Online (Sandbox Code Playgroud)

使用强调标签会产生相同的结果。

我们正在使用来自 Google Cloud Text-to-Speech 的 Python API 来请求音频生成。

我想在每个样本中听到不同的声音强度。

请注意,我们也尝试对 " 进行转义,但它对生成的音频没有影响。

https://issuetracker.google.com/issues/131618213

ssml google-text-to-speech

5
推荐指数
1
解决办法
246
查看次数