Я запускаю цикл до SynthesizeToFile
(в этом примере я буду запускать цикл 10 раз)
for(int i = 0; i< 10; i++)
{
textToSpeech.SynthesizeToFile("SOME TEXT", null, new Java.IO.File(System.IO.Path.Combine(documentsPath, i.ToString() + "_audio.wav")), i.ToString());
}
Инициализация TTS
void TextToSpeech.IOnInitListener.OnInit(OperationResult status)
{
try
{
Voice voiceobj = new Voice("en-us-x-sfg#female_2-local", Java.Util.Locale.English, VoiceQuality.VeryHigh, VoiceLatency.VeryHigh, false, null);
textToSpeech.SetVoice(voiceobj);
if (status == OperationResult.Error)
{
textToSpeech.SetLanguage(Java.Util.Locale.Default);
}
if (status == OperationResult.Success)
{
textToSpeech.SetLanguage(Java.Util.Locale.English);
textToSpeech.SetOnUtteranceProgressListener(new UtteranceProgressListener1(this));
Log.Info("101029", "Initialised successfully");
}
}
catch (Exception X)
{
Log.Info("101028", "TTF Error? " + X.Message);
}
}
Я настраиваю SetOnUtteranceProgressListener
на SetOnUtteranceProgressListener1
, что является следующим
public class UtteranceProgressListener1 : UtteranceProgressListener
{
ReadArticle _parent;
int total = 0;
public UtteranceProgressListener1(ReadArticle p_parent)
{
_parent = p_parent;
}
public override void OnStart(String utteranceId)
{
}
public override void OnError(String utteranceId)
{
Log.Info("101029", "OnError called");
}
public override void OnDone(String utteranceId)
{
Log.Info("101029", "OnDone: " + total.ToString());
total++;
_parent.AudioConvertionResults(total);
}
}
Каждый раз, когда это OnDone
, я вызываю функцию, которая в основном просто проверяет, является ли она 10-м счетом, означает, что это последний файл для обработки и делает видимыми некоторые элементы управления, такие как:
public bool AudioConvertionResults(int CompInt)
{
Log.Info("101029", "ComInt: " + CompInt.ToString() );
if (CompInt >= 10)
{
try
{
Log.Info("101029", "Triggered at " + CompInt.ToString());
FloatingActionButton FAB = FindViewById<FloatingActionButton>(Resource.Id.fab);
FAB.Visibility = ViewStates.Visible;
}
catch(Exception X)
{
Log.Info("101029", "Error Triggering? "+X.Message);
return fasle;
}
retuen true;
}
else
{
Log.Info("101029", "DID NOT Trigger at " +
CompInt.ToString());
return fasle;
}
}
Я получаю следующую ошибку
Аниматоры могут работать только в потоках Looper
когда оно достигает FloatingActionButton FAB = FindViewById<FloatingActionButton>(Resource.Id.fab);
Я также пытался сделать это глобальной переменной, но все равно не повезло.
Мне кажется, я что-то напутал, есть идеи, что мне делать?