Обидва ці кошти підтримуються класами з збірки System.Speech.dll. За замовчуванням Visual Studio Не додає посилань на цю збірку в нові проекти WPF, так що в своїх проектах це знадобиться робити самостійно.
Мова - це другорядна частина WPF. Хоча підтримка мови формально вважається частиною WPF, і вона з'явилася, починаючи з версії NET Framework 3.0, простору імен класів для підтримки мови починаються з System.Speech, а не System.Windows.
Синтез мови - це засіб, що генерує звук розмови на основі наданого тексту. Синтез мови не є вбудованим засобом в WPF - це засіб доступності операційної системи Windows. Такі системні утиліти, як Narrator (полегшене засіб читання екрану), включені в Windows і використовують синтез мови для допомоги користувачам в навігації по основним діалоговим вікнам. У загальному випадку, синтез мови може застосовуватися для створення аудіоруководств і "говорять" інструкцій, хоча заздалегідь записане аудіо забезпечує більш високу якість.
Синтез мови має сенс, коли потрібно створити аудіо для динамічного тексту - іншими словами, коли на момент компіляції невідомо, які слова повинні бути вимовлені під час виконання. Але якщо аудіо незмінно, то попередньо записане легше використовувати, це більш ефективно, до того ж якість звуку вище. Єдина причина віддати перевагу синтезу мови - це коли потрібно прочитати величезний обсяг тексту, і попередня його запис непрактична.
Хоча всі сучасні версії Windows мають вбудований синтез мови, які вони використовують комп'ютеризований голос відрізняється. У Windows ХР використовується голос, схожий на голос робота і званий Sam, в той час як в Windows Vista і Windows 7 включає понад натуральний жіночий голос на ім'я Anna. Для всіх цих систем доступні для завантаження і установки також додаткові голоси.
Відтворення мови оманливе просто. Все, що знадобиться - це створити екземпляр класу SpeechSynthesizer з простору імен System.Speech.Synthesis і викликати його метод Speak () з рядком тексту, наприклад:
При використанні такого підходу - передачі простого тексту об'єкту SpeechSynthesizer - в деякій мірі втрачається контроль. Можуть зустрічатися слова, які вимовляються неправильно, з неправильними наголосами або ні з належною швидкістю. Щоб отримати більший контроль над їх вимовляють текстом, необхідно використовувати клас PromptBuilder для конструювання розпізнавання мови.
Ось як можна змінити попередній приклад з повністю еквівалентним кодом, в якому застосовується PromptBuilder:
Цей код не дає ніяких переваг. Однак клас PromptBuilder містить в собі безліч інших методів, які можна застосовувати для настройки вимови тексту. Наприклад, можна акцентувати певне слово (або кілька слів), використовуючи перевантажену версію методу AppendText (). яка приймає значення з перерахування PromptEmphasis. Хоча точний ефект від акцентування слова залежить від використовуваного голосу, наступний код підкреслює слово "are" в реченні "How are you?":
Метод AppendText () має ще дві перевантаження: одна приймає значення PromptRate, яке дозволяє збільшувати або зменшувати швидкість, а інша - значення PromptVolume, що дозволяє збільшувати або зменшувати гучність.
Для зміни відразу декількох деталей необхідно використовувати об'єкт PromptStyle. Цей об'єкт є оболонкою для значень PromptEmphasis, PromptRate і PromptVolume. Можна задавати значення для всіх трьох параметрів або тільки для одного або двох, які потрібні.