Synteza mowy z użyciem Microsoft Speech Platform SDK v.11.0
W artykule przedstawiono, jak uzyskać efekt syntezy mowy przez komputer.
Zostało to osiągnięte z użyciem języka C#.
Skorzystano z Microsoft Speech Platform SDK w wersji 11.0.
1 Wymagania programu
1.1 Środowisko programowania
1.2 System operacyjny
2 Czynności wstępne
2.3 Instalacja bibliotek związanych z syntezą mowy
2.3.1 Biblioteki Microsoft Speech
2.3.2 Przykładowe głosy
2.3.2.1 Uwagi do pobieranych głosów syntezatora - zrzut ekranu rejestru
2.4 Linki do pobrania bibliotek z internetu
2.5 Utworzenie referencji do Microsoft Speech Object Library 11.0
3 Fragment programu generujący mowę
3.6 Kod C#
3.7 Zrzut ekranu programu
4 Prezentacja czytania tekstu przez syntezator mowy
5 Przydatne linki
Wymagania programu
Środowisko programowania
Microsoft Visual Studio C# Express 2010
Microsoft .NET Framework 4.0
System operacyjny
Windows 7 Professional SP1
lub
Windows 10 Professional
Czynności wstępne
Instalacja bibliotek związanych z syntezą mowy
Biblioteki Microsoft Speech
Instalacja SpeechPlatformRuntime x86
Instalacja MicrosoftSpeechPlatformSDK x86
Przykładowe głosy
Instalacja MSSpeech_TTS_pl-PL_Paulina
Instalacja MSSpeech_TTS_it-IT_Lucia
Uwagi do pobieranych głosów syntezatora - zrzut ekranu rejestru
Nie wszystkie głosy dostępne do pobrania rejestrują się w kluczu Speech Server, który jest związany SDK 11.0. Ostateczny rezultat jest widoczny w rejestrze Windows. Należy pominąć głosy zawierające w nazwie pliku fragment "TELE". Część głosów rejestruje się w kluczu Speech. Przyczyny takiego działania plików instalacyjnych nie były sprawdzane. Dla celów artkułu wystarczająca była poprawna instalacja minimum dwóch głosów w różnych językach.
Poniżej widok kluczy rejestru:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\Voices]
Linki do pobrania bibliotek z internetu
Pobierz: Microsoft Speech Platform - Runtime (Version 11)
Pobierz: Microsoft Speech Platform - Software Development Kit (SDK) (Version 11)
Pobierz: Microsoft Speech Platform - Runtime Languages (Version 11)
Utworzenie referencji do Microsoft Speech Object Library 11.0
W otwartym projekcie należy wybrać z menu głównego Project / Add Reference.
Kolejnym krokiem jest wybór odpowiedniej referencji w oknie dialogowym Add Reference. Jest to Microsoft Speech Object Library 11.0.
Fragment programu generujący mowę
Pokazano jedynie najistotniejszy fragment programu. Pełny program wymagałby dodania fragmentów związanych z:
- Zakończeniem syntezy w dowolnym momencie (Zakończ)
- Wstrzymaniem syntezy (Pauza)
- Wznowieniem syntezy po przerwie (Wznów)
Kod C#
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using SpeechLib;
namespace nsTextToSpeech
{
public partial class FormTextToSpeech : Form
{
List<ISpeechObjectToken> voices; // Lista głosów syntezatora TTS
SpVoice reader; // Obiekt przekształcający
// tekst na mowę lub pseudomowę
int voiceCount; // Ilość dostępnych głosów
public FormTextToSpeech()
{
InitializeComponent();
// Utworzenie i wyświetlenie listy dostępnych głosów
reader = new SpVoice();
voices = new List<ISpeechObjectToken>();
ISpeechObjectTokens t = reader.GetVoices();
richTextBox1.Text = "Dostępne głosy\n";
foreach (ISpeechObjectToken item in t)
{
voices.Add(item);
richTextBox1.Text += '\t' + item.GetDescription() + '\n';
}
voiceCount = voices.Count;
// Zdarzenia przycisków rozpoczynających syntezę mowy
speakButton1.Click += new EventHandler(speakButton_Click);
speakButton2.Click += new EventHandler(speakButton_Click);
}
private void speakButton_Click(object sender, EventArgs e)
{
// Ustawienie indeksu głosu, który ma zostać użyty
int voiceIndex = -1;
if (voiceCount == 2) // zainstalowane są dokładnie 2 głosy
{
if ((sender as Button) == speakButton1)
{
// Jeżeli kliknięto speakButton1
voiceIndex = 0;
}
else if ((sender as Button) == speakButton2)
{
// Jeżeli kliknięto speakButton2
voiceIndex = 1;
}
else
{
// W tym programie innej możliwości nie ma
return;
}
}
else
{
// Zakończ, jeżeli indeks głosu jest różny od zero lub jeden
return;
}
// Tablica z dwoma tekstami, odpowiednio dla języka
// używanego przez syntezator mowy i ilości zainstalowanych głosów
// Uwaga: Nie używaj zbyt długich tekstów,
// bo nie będzie można ich przerwać
string[] Text =
{
// https://pl.wikipedia.org/wiki/Lorem_ipsum
// Oryginalny tekst tłumaczenia na polski (fragment)
@"Nie ma zatem takiego człowieka,
który kocha cierpienie samo w sobie,
kto by do niego dążył
lub chciał go doświadczyć...",
// https://pl.lipsum.com
// Psudotekst po łacińsku (fragment)
@"Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua..."
};
reader = new SpVoice(); // Utworzenie obiektu głos dowolny, zaistalowany
reader.Voice = (SpObjectToken)voices[voiceIndex]; // Przypisanie do obiektu głos
// konkretnego głosu
// mówiącego w konkretnym języku (tu: polski i włoski)
//Napisy (patrz: załączony zrzut ekranu)
richTextBox1.Text += "Bieżący głos:\n\t";
string s = reader.Voice.Id.ToString() + '\n' + "\tMowa...\n";
richTextBox1.Text += s.Substring(s.LastIndexOf("\\") + 1);
Application.DoEvents();
reader.Speak(Text[voiceIndex]); // Uruchomienie syntezy mowy
// Uwaga: Syntezy mowy nie będzie można przerwać
// - nie zaprogramowano do tego odpowiedniego zdarzenia
// - nie da się zamknąć programu,
// aż nie skończy czytanie tekstu
// Nie używaj zbyt długich tekstów
richTextBox1.Text += "\tKoniec tekstu.\n"; // Synteza zakończona
Application.DoEvents();
}
}
}
Zrzut ekranu programu
Prezentacja czytania tekstu przez syntezator mowy
Do poniższej prezentacji został użyty tekst "Lorem ipsum" używany zwykle do sprawdzania rozłożenia tekstu na stronie internetowej. Użyto syntezatora mowy włoskiej i głosu żeńskiego Lucia. Ponieważ oryginał tekstu jest łaciński, prezentowaną mowę powinno się raczej nazwać mową w pseudojęzyku lub pseudomową. Przykładem syntezatora, który posiada język łaciński jest eSpeak na licencji Open Source. MS Speech SDK 11.0 nie zawiera tego języka.
Lorem ipsum it-IT Lucia MS Speech SDK 11.0.zip
Przydatne linki
Microsoft Speech Platform, MSDN Developer Network
Microsoft Speech Platform SDK 11 Documentation, MSDN Developer Network
Microsoft Speech Platform Native Code API Documentation, MSDN Developer Network
Speech Synthesis API Overview, MSDN Developer Network
Syntezator mowy Sam, Artur Protasewicz, 4programmers.net, Delphi, Windows XP
Jakby ktoś szukał gotowego programu do generowania plików dźwiękowych z tekstu, to polecam: http://www.cross-plus-a.com/balabolka.htm