Можно извлечь фонемы по умолчанию для данного слова через SAPI:
- Голосовое слово с преобразованием текста в речь и сохранение вывода в формате .wav
- Используйте .wav в качестве входных данных для распознавания речи
- При распознавании слова извлеките фонемы из распознанных элементов словосочетания.
Однако мне не удалось зафиксировать (если они доступны) маркеры акцента («1» и «2» в соответствии с Таблица фонем американского английского). Есть ли способ сделать это?
РЕДАКТИРОВАТЬ: вот что я пытался до сих пор (не красиво, но функционально). К сожалению, похоже, что SpeechVisemeFeature всегда показывает «SVF_None», даже когда я вручную добавляю ударение к слову через SAPI Speech. Модификация словаря. Кто-нибудь знает, почему это так?
using System;
using System.Threading;
using SpeechLib;
using System.Windows.Forms;
namespace PhoneEmphasis
{
class Program
{
static string myWord = "hello";
static SpPhoneConverter c = new SpPhoneConverter();
static Thread t = null;
static void Main(string[] args)
{
c.LanguageId = 1033;
t = new Thread(test);
t.Start();
t.Join();
Console.WriteLine("done");
Console.ReadLine();
}
private static void test()
{
SpVoice v = new SpVoice();
//v.EventInterests = SpeechVoiceEvents.;
v.Phoneme += new _ISpeechVoiceEvents_PhonemeEventHandler(Phoneme_Handler);
v.EndStream += new _ISpeechVoiceEvents_EndStreamEventHandler(EndStream_Handler);
v.Speak(myWord, SpeechVoiceSpeakFlags.SVSFlagsAsync);
Application.Run();
}
private static void Phoneme_Handler(int StreamNumber, object StreamPosition, int Duration, short NextPhoneId, SpeechVisemeFeature Feature, short CurrentPhoneId)
{
Console.WriteLine("Phoneme = " + c.IdToPhone(CurrentPhoneId).ToString() + " , VisemeFeature = " + Feature.ToString());
}
private static void EndStream_Handler(int StreamNumber, object StreamPosition)
{
Console.WriteLine("end stream!");
t.Abort();
}
}
}
ISpPhoneticAlphabetSelection::SetAlphabetToUPS
< /a>, который реализован ISpVoice, и посмотрите, работает ли вам изменение алфавита фонем лучше. К сожалению, для этого вам придется использовать C++. - person Eric Brown   schedule 25.05.2019