总的来说,我对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)
这是我的问题.
顺便说一句,这是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) 我想通过 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 Watson和Amazon Polly 的情况?
将以下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&#x259;mei&#x325;&#x27E;ou&#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) 我的理解是,这个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音素.我错过了什么?
正如一个人能够使用各种语音到文本的"听写"工具将口语转换成相应的文本,我想知道是否有类似的工具将口语转换成相应的SSML.也就是说,除了与说话者的声音中存在的任何语调,韵律,暂停/休息,变形等相关的相关SSML标签之外,它还将提供文本.
text-to-speech speech-synthesis speech-to-text ssml alexa-voice-service
我正在尝试制作一个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) 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是否支持此功能?
我的目标是让设备用人声说出文本。所以我正在使用 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) 我在我的 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)
它使用 …
使用 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 来请求音频生成。
我想在每个样本中听到不同的声音强度。
请注意,我们也尝试对 " 进行转义,但它对生成的音频没有影响。