Xamarin.Essentials: Převod textu na řeč
Třída TextToSpeech umožňuje aplikaci využívat integrované moduly pro převod textu na řeč k mluvení textu ze zařízení a také dotazování dostupných jazyků, které může modul podporovat.
Začínáme
Pokud chcete začít používat toto rozhraní API, přečtěte si úvodní příručkuXamarin.Essentials, abyste měli jistotu, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.
Pro přístup k funkci TextToSpeech se vyžaduje následující nastavení specifické pro platformu.
Pokud je cílová verze androidu vašeho projektu nastavená na Android 11 (R API 30), musíte aktualizovat manifest Androidu pomocí dotazů, které se používají s novými požadavky na viditelnost balíčku.
Otevřete soubor AndroidManifest.xml ve složce Vlastnosti a přidejte do uzlu manifestu následující kód:
<queries>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
Použití převodu textu na řeč
Přidejte do Xamarin.Essentials předmětu odkaz:
using Xamarin.Essentials;
Převod textu na řeč funguje voláním SpeakAsync
metody s textem a volitelnými parametry a vrací se po dokončení promluvy.
public async Task SpeakNowDefaultSettings()
{
await TextToSpeech.SpeakAsync("Hello World");
// This method will block until utterance finishes.
}
public void SpeakNowDefaultSettings2()
{
TextToSpeech.SpeakAsync("Hello World").ContinueWith((t) =>
{
// Logic that will run after utterance finishes.
}, TaskScheduler.FromCurrentSynchronizationContext());
}
Tato metoda přebírá nepovinnou funkci CancellationToken
, aby se po spuštění promluvy zastavila.
CancellationTokenSource cts;
public async Task SpeakNowDefaultSettings()
{
cts = new CancellationTokenSource();
await TextToSpeech.SpeakAsync("Hello World", cancelToken: cts.Token);
// This method will block until utterance finishes.
}
// Cancel speech if a cancellation token exists & hasn't been already requested.
public void CancelSpeech()
{
if (cts?.IsCancellationRequested ?? true)
return;
cts.Cancel();
}
Převod textu na řeč automaticky zařadí požadavky na řeč ze stejného vlákna.
bool isBusy = false;
public void SpeakMultiple()
{
isBusy = true;
Task.Run(async () =>
{
await TextToSpeech.SpeakAsync("Hello World 1");
await TextToSpeech.SpeakAsync("Hello World 2");
await TextToSpeech.SpeakAsync("Hello World 3");
isBusy = false;
});
// or you can query multiple without a Task:
Task.WhenAll(
TextToSpeech.SpeakAsync("Hello World 1"),
TextToSpeech.SpeakAsync("Hello World 2"),
TextToSpeech.SpeakAsync("Hello World 3"))
.ContinueWith((t) => { isBusy = false; }, TaskScheduler.FromCurrentSynchronizationContext());
}
Nastavení řeči
Pokud chcete mít větší kontrolu nad tím, jak se zvuk mluví zpět, SpeechOptions
umožňuje nastavit hlasitost, výšku a národní prostředí.
public async Task SpeakNow()
{
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Následující hodnoty jsou podporované pro tyto parametry:
Parametr | Minimum | Maximum |
---|---|---|
Výška | 0 | 2.0 |
Objem | 0 | 1.0 |
Národní prostředí řeči
Každá platforma podporuje různá národní prostředí pro mluvený text v různých jazycích a zvýrazňujících jazycích. Platformy mají různé kódy a způsoby určení národního prostředí, což je důvod, proč Xamarin.Essentials poskytuje třídu pro různé platformy Locale
a způsob, jak je dotazovat pomocí GetLocalesAsync
.
public async Task SpeakNow()
{
var locales = await TextToSpeech.GetLocalesAsync();
// Grab the first locale
var locale = locales.FirstOrDefault();
var settings = new SpeechOptions()
{
Volume = .75f,
Pitch = 1.0f,
Locale = locale
};
await TextToSpeech.SpeakAsync("Hello World", settings);
}
Omezení
- Fronta promluvy není zaručená, pokud je volána napříč více vlákny.
- Přehrávání zvuku na pozadí není oficiálně podporováno.