标签: text-to-speech

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
查看次数

TTS的默认音频流是什么?

据我所知,Android目前有7个音频流:

STREAM_ALARM         (for alarms)
STREAM_DTMF          (for DTMF Tones)
STREAM_MUSIC         (for music playback)
STREAM_NOTIFICATION  (for notifications)
STREAM_RING          (for the phone ring)
STREAM_SYSTEM        (for system sounds)
STREAM_VOICE_CALL    (for phone calls)
Run Code Online (Sandbox Code Playgroud)

我也知道可以明确告诉TTS引擎使用哪个流:

params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
mTts.speak(text, TextToSpeech.QUEUE_ADD, params);
Run Code Online (Sandbox Code Playgroud)

但是,我没有找到的是当我没有指定音频流时默认使用的流.

Android的TextToSpeech引擎的默认音频流是什么?

有没有办法查询Android的TextToSpeech引擎当前正在使用哪个流?

UPDATE: TextToSpeech.Engine有一个常量定义为DEFAULT_STREAM,但不清楚它所引用的7个流中的哪一个.但它具有与STREAM_MUSIC相同的十六进制值(0x3).是这个吗?

android text-to-speech android-audiomanager

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

德尔福SAPI Text-To-Speech

首先:这不是Delphi和SAPI的重复.我对"Delphi中的SAPI"主题有一个具体问题.

我在Delphi 2009中使用了优秀的Import Type-Library指南来获取组件面板中的TSpVoice组件.这非常有效.同

var
  SpVoice: TSpVoice;
Run Code Online (Sandbox Code Playgroud)

我可以写

SpVoice.Speak('This is an example.', 1);
Run Code Online (Sandbox Code Playgroud)

获得异步音频输出.

第一个问题

根据文档,我可以写

SpVoice.Speak('This is an example.', 0);
Run Code Online (Sandbox Code Playgroud)

获得同步音频输出,但我获得了EZeroDivide异常.为什么?

第二个问题

但更重要的是,我希望能够动态创建SpVoice对象(我认为这被称为"后期绑定"SpVoice对象),部分原因是我的应用程序的所有会话中只有一小部分会使用它,部分是因为我不想假设最终用户系统上存在SAPI服务器.

为此,我试过了

procedure TForm1.FormClick(Sender: TObject);
var
  SpVoice: Variant;
begin
  SpVoice := CreateOleObject('SAPI.SpVoice');
  SpVoice.Speak('this is a test', 0);
end;
Run Code Online (Sandbox Code Playgroud)

显然什么也没做!(将0替换为0可以获得EZeroDivide异常.)

放弃

我是COM/OLE自动化的新手.对于我在这篇文章中所表现出的任何无知或愚蠢,我感到很抱歉......

更新

为了让每个人遇到与我一样的问题,François的视频解释说SAPI/Windows中存在一个错误(某些地方不兼容),这使得以下代码引发了EZeroDivide异常:

procedure TForm1.FormClick(Sender: TObject);
var
  SpVoice: variant;
begin
  SpVoice := CreateOleObject('SAPI.SpVoice');
  SpVoice.Speak('This is a text.');
end;
Run Code Online (Sandbox Code Playgroud)

视频中提供的解决方案是更改FPU控制字:

procedure TForm1.FormClick(Sender: TObject);
var
  SpVoice: variant;
  SavedCW: Word;
begin
  SpVoice := CreateOleObject('SAPI.SpVoice'); …
Run Code Online (Sandbox Code Playgroud)

delphi sapi text-to-speech createoleobject

10
推荐指数
1
解决办法
1万
查看次数

onUtteranceCompleted没有被调用?

即使我正确设置它:

HashMap<String, String> myHashRender = new HashMap<String, String>();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utid");
mTts.speak("Speak something", TextToSpeech.QUEUE_ADD, myHashRender);
Run Code Online (Sandbox Code Playgroud)

mTts.setOnUtteranceCompletedListener(this);
Run Code Online (Sandbox Code Playgroud)

在onInit函数中返回成功.onUtteranceCompleted仍未被调用.虽然有重复的问题,但没有我能找到答案的地方.

我的Activity还实现了OnUtteranceCompletedListener.

请帮忙.

android text-to-speech onutterancecompleted

10
推荐指数
1
解决办法
4011
查看次数

Firefox和语音合成API

我正在创建HTML5语音合成应用程序,如下面的链接.

http://updates.html5rocks.com/2014/01/Web-apps-that-talk---Introduction-to-the-Speech-Synthesis-API

Windows7和Android Chrome33beta或Mac的Safari可以正常使用.

但Windows7-Firefox 27似乎支持Speech-Synthesis-API,但因为返回空语音列表而无法正常工作.

有什么解决方案吗?

firefox html5 text-to-speech

10
推荐指数
1
解决办法
6676
查看次数

gTTS直接输出

我想用音频和文本方式做出聊天机器人的响应。

所有使用 gTTS 的示例代码似乎都需要“将文本保存到文件中,然后播放该文件”。

是否有另一种方法可以简化流程,例如使用 gTTS 自动播放“聊天机器人的响应”?

python text-to-speech

10
推荐指数
1
解决办法
3万
查看次数

SpeechSynthesizer 无法获取所有已安装的语音 3

我使用区域和语言下的“添加语言”添加了许多声音。这些显示在“语音”中的“文本转语音”下。(我使用的是Windows 10)

我想在我的应用程序中将这些SpeechSynthesizerSystem.Speech.Synthesis.

当在我的应用程序中列出可用的语音时,仅显示少数实际可用的语音:

static void Main()
{
    SpeechSynthesizer speech = new SpeechSynthesizer();

    ReadOnlyCollection<InstalledVoice> voices = speech.GetInstalledVoices();
    if (File.Exists("available_voices.txt"))
    {
        File.WriteAllText("available_voices.txt", string.Empty);
    }
    using (StreamWriter sw = File.AppendText("available_voices.txt"))
    {
        foreach (InstalledVoice voice in voices)
        {                 
            sw.WriteLine(voice.VoiceInfo.Name);                           
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查看available_voices.txt仅列出这些声音:

Microsoft David Desktop
Microsoft Hazel Desktop
Microsoft Zira Desktop
Microsoft Irina Desktop
Run Code Online (Sandbox Code Playgroud)

但是在设置中的“文本转语音”下还有更多内容,例如Microsoft GeorgeMicrosoft Mark

这里接受的答案: SpeechSynthesizer 没有获取所有已安装的声音 建议将平台更改为 x86。我尝试过,但没有看到任何变化。

这个答案: SpeechSynthesizer 没有获取所有已安装的声音 2 建议使用 .NET v4.5,因为 .NET v4.5 中存在错误 …

.net c# text-to-speech windows-10 visual-studio-2017

10
推荐指数
3
解决办法
5870
查看次数

如何判断是否检查(启用)特定的TTS引擎?

此问题仅适用于Android 2.2:

以下屏幕截图显示了安装的3种不同的文本到语音引擎:

  1. PIco TTS(截至Froyo 2.2的Android默认版本)
  2. IVONA文字转语音总部
  3. SVOX Classic TTS

在此屏幕截图中,您可以看到并非所有3都已选中(已启用).相反,IVONA未经检查,仅留下Pico(暗示,因为它是硬编码的)和SVOX(已检查).

在此输入图像描述

我希望能够以编程方式从我的应用程序查询特定的TTS引擎(如IVONA)是否被选中(假设我知道在编码时的包名,当然).

在安卓2.2所有我是getDefaultEngine()不能在一个情况下真正帮助被选定为默认和SVOX检查(换句话说,我怎么知道SVOX如果被选中的Pico是默认?)

如何在Android 2.2中实现这一目标?

这是可能吗?

PS Android 4.x(API> = 14)引入了getEngines(),这可能会让您相信ICS +已经解决了这个问题,但仔细研究后发现:

  1. getEngines()仅列出已安装但未检查(已启用)的软件包.
  2. 每个列出的包附带的EngineInfo仅提供名称,标签,图标,优先级以及它是否是系统映像的一部分.换句话说,与Android 2.2中的限制相同.

android text-to-speech android-2.2-froyo

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

Android TTS无法说出大量文字

我正在尝试使用Android Text To Speech讲出大量文本.我使用默认的Google语音引擎.以下是我的代码.

 public class Talk extends Activity implements TextToSpeech.OnInitListener {

        private ImageView playBtn;

        private EditText textField;

        private TextToSpeech tts;
        private boolean isSpeaking = false;

        private String finalText;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_talk);

            //Intialize the instance variables
            playBtn = (ImageView)findViewById(R.id.playBtn);

            textField = (EditText)findViewById(R.id.textField);


            //Resister the listeners
            playBtn.setOnClickListener(new PlayBtnAction());

            //Other things
            tts = new TextToSpeech(this,this);

            //Get the web page text if called from Share-Via
            if (Intent.ACTION_SEND.equals(getIntent().getAction())) 
            {

                   new GetWebText().execute("");

            }
        }


        //This class will execute the text …
Run Code Online (Sandbox Code Playgroud)

java eclipse android text-to-speech google-text-to-speech

9
推荐指数
2
解决办法
6531
查看次数

如何获取iOS 9上的所有语音列表?

获取"所有"AVSpeechSynthesisVoice对象列表的标准方法是要求它:

[AVSpeechSynthesisVoice speechVoices]
Run Code Online (Sandbox Code Playgroud)

但是,这仅显示每个语言区域对的唯一默认语音.例如,对于en-US:

"Language: en-US, Name: Samantha, Quality: Default",
Run Code Online (Sandbox Code Playgroud)

如果我查看常规→辅助功能→语音→语音→英语下的设置应用程序,我看到我选择了'Siri Female(增强版)',但该语音无法从代码中选择.完整列表是

1

所以最大的问题是:如何从代码中选择Alex或Siri Female作为声音?

cocoa speech text-to-speech ios

9
推荐指数
2
解决办法
4481
查看次数