项目简介
Android Speech 是一个简单易用的 Android 语音识别和文本转语音的库。它提供了精简的 API,使开发者能够轻松地在 Android 应用中集成语音相关的功能。
项目设置
Gradle 依赖
要在你的项目中使用 Android Speech,只需在 build.gradle
文件中添加以下依赖:
implementation 'net.gotev:speech:x.y.z'
请将 x.y.z
替换为 Maven Central 上的最新版本。
初始化
若要开始使用该库,需要在你的 Activity 中进行初始化:
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
Speech.init(this, getPackageName());
}
@Override
protected void onDestroy() {
// 防止 Activity 销毁时内存泄漏
Speech.getInstance().shutdown();
}
}
示例与用法
在项目的 examples
目录中可以找到一个完全可工作的示例应用程序,该应用展示了如何使用此库。
语音识别
在 Activity 中,可以按照以下方式使用语音识别:
try {
// 确保已授予 android.permission.RECORD_AUDIO 权限
Speech.getInstance().startListening(new SpeechDelegate() {
@Override
public void onStartOfSpeech() {
Log.i("speech", "speech recognition is now active");
}
@Override
public void onSpeechRmsChanged(float value) {
Log.d("speech", "rms is now: " + value);
}
@Override
public void onSpeechPartialResults(List<String> results) {
StringBuilder str = new StringBuilder();
for (String res : results) {
str.append(res).append(" ");
}
Log.i("speech", "partial result: " + str.toString().trim());
}
@Override
public void onSpeechResult(String result) {
Log.i("speech", "result: " + result);
}
});
} catch (SpeechRecognitionNotAvailable exc) {
Log.e("speech", "Equipment does not support speech recognition!");
} catch (GoogleVoiceTypingDisabledException exc) {
Log.e("speech", "Google voice typing must be enabled!");
}
资源释放
在 Activity 的 onDestroy
方法中,添加以下代码以防止内存泄漏:
@Override
protected void onDestroy() {
Speech.getInstance().shutdown();
}
显示进度动画
可以在布局中添加 SpeechProgressView
来显示语音识别过程中的音量变化:
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/linearLayout">
<net.gotev.speech.ui.SpeechProgressView
android:id="@+id/progress"
android:layout_width="120dp"
android:layout_height="150dp"/>
</LinearLayout>
启动语音识别时,还需传递 SpeechProgressView
对象:
Speech.getInstance().startListening(speechProgressView, speechDelegate);
自定义颜色和最大高度
公司可以自定义进度条的颜色和最大高度:
int[] colors = {
ContextCompat.getColor(this, android.R.color.black),
ContextCompat.getColor(this, android.R.color.darker_gray),
ContextCompat.getColor(this, android.R.color.black),
ContextCompat.getColor(this, android.R.color.holo_orange_dark),
ContextCompat.getColor(this, android.R.color.holo_red_dark)
};
speechProgressView.setColors(colors);
int[] heights = {60, 76, 58, 80, 55};
speechProgressView.setBarMaxHeightsInDp(heights);
文本转语音
在 Activity 中使用文本转语音功能:
Speech.getInstance().say("say something");
提供回调以接收状态:
Speech.getInstance().say("say something", new TextToSpeechCallback() {
@Override
public void onStart() {
Log.i("speech", "speech started");
}
@Override
public void onCompleted() {
Log.i("speech", "speech completed");
}
@Override
public void onError() {
Log.i("speech", "speech error");
}
});
配置
可以通过设置方法对演讲实例进行配置。详细信息可以参考 Java 文档。
日志管理
默认情况下,库的日志记录是禁用的。可以通过以下方法启用调试日志:
Logger.setLogLevel(LogLevel.DEBUG);
日志通过 android.util.Log
输出到 LogCat
中。如果希望将日志重定向到其他输出或使用不同的日志记录器,可以实现自己的委托:
Logger.setLoggerDelegate(new Logger.LoggerDelegate() {
@Override
public void error(String tag, String message) {
// 自定义实现
}
@Override
public void error(String tag, String message, Throwable exception) {
// 自定义实现
}
@Override
public void debug(String tag, String message) {
// 自定义实现
}
@Override
public void info(String tag, String message) {
// 自定义实现
}
});
其他功能
从版本 1.5.0 开始,Speech 库提供了一些 API 用于获取和设置语音转文本和文本转语音的语言和声音。详细使用请查看示例应用。
致谢和许可证
特别感谢 @zagum 提供的原始 speech recognition view 实现,以及 Kristiyan Petrov 对代码的审核、bug 修复和改进建议。
该项目遵循 Apache 2.0 许可证。请参阅 LICENSE 文档以了解更多信息。