Szybkie pytanie, ReadAllText -> Speech

Szybkie pytanie, ReadAllText -> Speech
A7
  • Rejestracja:około 10 lat
  • Ostatnio:11 miesięcy
  • Postów:46
0

Witam

Od razu zaznaczę że dopiero zaczynam przygodę z c#. Mam do stworzenia program który po kliknięciu przycisku będzie wypowiadał tekst z pliku. Próbowałem to zrobić na milion sposobów cały czas jest coś nie tak. W tym kodzie jak klikam przycisk to mi się okno zamyka i nic więcej się nie dzieje. Jak zamienię w tej linijce zmienna text na normalnego Stringa np. "Hello" to wszystko ładnie mi czyta "Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(text); ". Natomiast z pliku jakbym nie próbował to nie działa :(

Proszę o pomoc

Kod https://4programmers.net/Pastebin/7550

SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:około godziny
  • Postów:1494
0

To może zrób debug krok po kroku i zobacz co zawiera zmienna text. Bo może jest puste

Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 6 godzin
0

Uruchom pod debuggerem i zobacz jaki dostajesz błąd. Ja dostałem InvalidOperationException, że w wątku UI nie wolno wykonywać operacji synchronicznych (np. ReadAllText()). Zalecane jest użycie Task.Run(). Ale po objęciu tego wszystkiego w Task.Run() i tak wystąpuje wyjątek - tym razem UnauthorizedAccessException z komunikatem "Access to the path '[ścieżka]' is denied."

I w sumie nie musiałem testować, od razu mogłem to powiedzieć - to jest UWP. Aplikacjom UWP nie wolno pisać i czytać sobie po całym dysku.

Użyj FileOpenPicker, aby użytkownik ci wybrał i plik i wtedy możesz z nim sobie już zrobić, co chcesz:

Kopiuj
FileOpenPicker fop = new FileOpenPicker();
fop.FileTypeFilter.Add(".txt");
var file = await fop.PickSingleFileAsync();

var text = await FileIO.ReadTextAsync(file);

if (text != null)
{
    MediaElement mediaElement = new MediaElement();
    var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();
    Windows.Media.SpeechSynthesis.SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync(text);
    mediaElement.SetSource(stream, stream.ContentType);
    mediaElement.Play();
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.