SSML - Можно ли убрать автоматические паузы перерыва?

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

Я использую механизм синтеза речи Microsoft с классом SpeechSynthesizer в C #.

Это результат, который я получаю. Это пример того, почему происходят автоматические разрывы? завернутые в <speak> теги с SpeechSynthesizer:

https://clyp.it/4nofhh3n

Это результат, который я хочу (полученный с помощью демонстрации TTS Oddcast):

https://clyp.it/m55wt14u

Я несколько раз прочитал документацию по SSML для w3.org, что в пункте 3.2.3 - break element, обратите внимание на следующее:

If the element is not present between tokens, the synthesis processor is expected to automatically determine a break based on the linguistic context. In practice, the break element is most often used to override the typical automatic behavior of a synthesis processor.

Вот как сейчас ведет себя мой голос. Я хочу как-то переопределить / отключить эту функцию, чтобы речь была полностью непрерывной. Я попытался поместить элемент <break> с атрибутами strength="none" и time="0ms" между словами, в которых происходит этот автоматический разрыв, как они написали выше, чтобы переопределить его, и всевозможными разными вещами, такими как перенос всей текстовой строки в теги <s> и т. Д., Но безрезультатно.

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

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


person S5amuel    schedule 06.10.2020    source источник


Ответы (1)


В моем экспериментировании с SpeechSynthesizer, если в конце вы поставите перерыв в 50 мс, он будет уважать его. - если меньше, игнорируется. Однако он всегда будет рассматривать <speak> обернутый контент как свое собственное предложение, поэтому будет говорить его как предложение / предложение, а не переносить просодию, как во втором примере. Вам необходимо отправить весь текст в одном <speak> элементе (и голосе), чтобы он обрабатывался как одно лингвистическое высказывание.

person Luke    schedule 13.10.2020
comment
Спасибо за ответ. В приведенном выше примере я помещаю весь текст в теги <voice>, заключенный в один тег <speak>, который по-прежнему создает разрывы в середине предложения. Я использую загружаемый извне голос, обычно называемый Daniel UK - стандартные голоса Microsoft не вызывают этого перерыва. Хакерский способ, которым я решил эту проблему, заключался в том, чтобы составить список каждого слова, которое вызвало разрыв (соединения), и с помощью команды регулярного выражения, заменив пробел (где будет разрыв) на тире. Результат почти эквивалентен тому, как он звучит с демонстрацией, которую я указал выше. До сих пор не знаю, как это сделать правильно. - person S5amuel; 14.10.2020
comment
Да, я тоже заметил такое поведение. Тире - хорошая идея. Я думаю, что единственный способ заставить его работать как лингвистическое высказывание - это отобразить все предложение для каждого голоса, а затем использовать <mark>s в качестве указателей, где разрезать полученные аудиофайлы. Конечно, не идеальное решение. - person Luke; 14.10.2020
comment
Да, идея <mark> потенциально может сработать, но поскольку интонация / тон слов, произнесенных в конце предложения / предложения, отличается от того, если бы это было сказано без паузы, это привело бы к очень непоследовательной речи по тональности . Думаю, черточки пока делать придется! - person S5amuel; 15.10.2020