john1990_1 Ответов: 1

Преобразование текста в речь для других языков, кроме английского?


Моя программа преобразования текста в речь не обнаруживает других языков, кроме английского, почему?

Что я уже пробовал:

public static SpeechLib.SpVoice SP = new SpVoice();


foreach (SpeechLib.ISpeechObjectToken v in SP.GetVoices())
{
    comboBoxVoice.Items.Add(v.GetDescription(49));
}

1 Ответов

Рейтинг:
2

Maciej Los

Пожалуйста, прочтите это: c# - преобразование текста в речь с помощью SAPI: пользовательский язык - переполнение стека[^]

[Обновление]
Согласно обсуждению в комментариях, я бы предложил прочитать это:
Использование SSML для создания подсказок и управления TTS (Microsoft Speech Platform) | Microsoft Docs[^]
Интерфейс SpVoice (SAPI 5.3) | Microsoft Docs[^]

[Обновление #2]
c# - использование SAPI есть ли способ ввести пиньинь для китайского произношения? - переполнение стека[^]
На основе примера, приведенного выше по ссылке:

private void btnSpeakPhonems_Click(object sender, EventArgs e)
{
    if (comboBox1.SelectedIndex > 0)
    {
        SpVoice voice = new SpVoice();
        voice.Voice = voice.GetVoices().Item(comboBox1.SelectedIndex);
        voice.Speak("<pron sym=\"ang 1 zang 1\">变脏</pron>", SpeechVoiceSpeakFlags.SVSFlagsAsync);

    }
}


Удачи вам!


john1990_1

Это не то, что я ищу, моя программа приложения Windows Forms обнаруживает нажатия Ctrl+C дважды быстро и говорит текст в буфере обмена, когда они нажаты, в настоящее время она работает только на английском языке, я хочу, чтобы пользователь выбрал язык из выпадающего списка (каждый язык, на котором установлен его text-to-speech в Windows), когда пользователь выбирает язык и имя человека (например, "Microsoft Asaf" для иврита), голосовое свойство SpeechLib.SpVoice изменяется, и речь делается на этом языке для текста в буфере обмена, проблема в том, что SP.getvoices() должен обнаруживать также неанглийский язык!

Maciej Los

Не уверен, что я вас хорошо понимаю, но когда вы меняете язык в combobox, вам нужно передать xml-узел в ComboBox. Speak(Xml_data_here) метод. Это все.

john1990_1

Когда пользователь изменяет текст в выпадающем списке, SpeechLib.SpObjectToken, который существует в SP.GetVoices (), выполняется с помощью SP.Voice=v;. Я просто хочу, чтобы SP.GetVoices() тоже получал неанглийские голоса в приложении Windows Forms C#.

Maciej Los

Если GetVoices метод не работает, почему бы вам не попробовать изменить язык внутри Speak метод?
Насколько я понимаю документацию MSDN, единственный способ изменить язык для этого случая должна использовать Speak метод.
См. обновленный ответ (новые ссылки).

john1990_1

Я хочу, чтобы он работал с любым языком, выбранным пользователем в выпадающем списке, и для любого текста в его буфере обмена.

Maciej Los

ОК. Заметьте, что голос-это не язык...
Вот такой "рабочий пример": c# - использование SAPI есть ли способ ввести пиньинь для китайского произношения? - переполнение стека[^]

john1990_1

Thx, хорошо, голос-это не язык, есть проблема в синтезаторе.GetVoices() то есть он не обнаруживает голоса, чей язык отличается от английского, я хочу, чтобы эта ошибка была решена, кто-то давно сказал мне, что речь идет о 32-64-битных процессорах и о том, как строятся голоса, если это поможет...

john1990_1

Как мне выполнить инструкции здесь?

https://stackoverflow.com/questions/19864385/detecting-all-installed-sapi-voices