gpt4 book ai didi

android - 在 Android 中制作文本转语音包装器

转载 作者:行者123 更新时间:2023-11-30 04:52:52 24 4
gpt4 key购买 nike

我正在尝试为 Google Android 的文本转语音功能创建一个包装器类。但是,我无法找到让系统暂停直到 onInit 函数完成的方法。附在底部的是我根据我在此处找到的内容创建的解决方案:Android speech - how can you read text in Android?

但是,这个解决方案似乎并不奏效。关于为什么这可能不起作用的任何想法,或者什么是确保在我的 onInit() 调用之后发生任何 Speak() 调用的好主意?

公共(public)类 SpeechSynth 实现 OnInitListener{

private TextToSpeech tts;
static final int TTS_CHECK_CODE = 0;
private int ready = 0;
private ReentrantLock waitForInitLock = new ReentrantLock();

SpeechSynth( Activity screen )
{
ready = 0;
tts = new TextToSpeech( screen, this );
waitForInitLock.lock();

}

public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
ready = 1;
}
waitForInitLock.unlock();
}

public int Speak( String text )
{
if( ready == 1 )
{
tts.speak(text, TextToSpeech.QUEUE_ADD, null);
return 1;
}
else
{
return 0;
}
}

我已经做到了,这样我就可以通过构造函数传递一串文本,然后在 onInit() 函数中播放它。但是,我真的很想避免每次需要让我的程序说一些不同的东西时都必须破坏和重新创建整个文本到语音引擎。

最佳答案

我建议您依赖锁而不是您的就绪状态 int。插入代码如下:

public int Speak( String text )
{
if (waitForInitLock.isLocked())
{
try
{
waitForInitLock.tryLock(180, TimeUnit.SECONDS);
}
catch (InterruptedException e)
{
Log.e(D_LOG, "interruped");
}
//unlock it here so that it is never locked again
waitForInitLock.unlock();
}

if( ready == 1 )
{
tts.speak(text, TextToSpeech.QUEUE_ADD, null);
return 1;
}
else
{
return 0;
}
}

关于android - 在 Android 中制作文本转语音包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com