Android Speech - 开源语音识别库完整指南

Android Speech - 开源语音识别库完整指南

【免费下载链接】android-speech Android speech recognition and text to speech made easy 【免费下载链接】android-speech 项目地址: https://gitcode.com/gh_mirrors/an/android-speech

Android Speech 是一个由 gotev 开发的开源库,它极大地简化了在 Android 应用中集成 Google 语音识别和文本转语音服务的过程。通过提供简洁易用的 API,开发者可以轻松实现语音到文本和文本到语音的功能,无需深入研究复杂的系统调用。

项目快速启动

环境要求

  • Android Studio 开发环境
  • 最低支持 SDK 版本:Android 4.0+ (API 14)
  • 需要麦克风权限和网络连接

添加依赖

在项目的 build.gradle (Module) 文件中添加以下依赖项:

dependencies {
    implementation 'net.gotev:speech:1.6.0' // 使用最新版本
}

然后同步 Gradle 项目。

基础初始化

在 Activity 中初始化语音库:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化语音库
        Speech.init(this, getPackageName());
    }

    @Override
    protected void onDestroy() {
        // 防止内存泄漏
        Speech.getInstance().shutdown();
        super.onDestroy();
    }
}

核心功能实现

语音识别功能

try {
    // 确保已获取麦克风权限
    Speech.getInstance().startListening(new SpeechDelegate() {
        @Override
        public void onStartOfSpeech() {
            Log.i("speech", "语音识别已激活");
        }

        @Override
        public void onSpeechRmsChanged(float value) {
            Log.d("speech", "当前音量级别: " + value + "dB");
        }

        @Override
        public void onSpeechPartialResults(List<String> results) {
            StringBuilder partialResult = new StringBuilder();
            for (String res : results) {
                partialResult.append(res).append(" ");
            }
            Log.i("speech", "部分识别结果: " + partialResult.toString().trim());
        }

        @Override
        public void onSpeechResult(String result) {
            Log.i("speech", "最终识别结果: " + result);
            // 处理识别结果
        }
    });
} catch (SpeechRecognitionNotAvailable exc) {
    // 设备不支持语音识别
    Log.e("speech", "此设备不支持语音识别!");
} catch (GoogleVoiceTypingDisabledException exc) {
    // Google 语音输入未启用
    Log.e("speech", "请启用 Google 语音输入!");
}

文本转语音功能

// 简单文本转语音
Speech.getInstance().say("您好,这是一个测试语音");

// 带回调的文本转语音
Speech.getInstance().say("正在处理您的请求", new TextToSpeechCallback() {
    @Override
    public void onStart() {
        Log.i("speech", "语音合成开始");
    }

    @Override
    public void onCompleted() {
        Log.i("speech", "语音合成完成");
    }

    @Override
    public void onError() {
        Log.i("speech", "语音合成出错");
    }
});

高级功能配置

语音进度动画显示

在布局文件中添加进度视图:

<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>

语音进度动画

在代码中使用进度动画:

// 自定义进度条颜色
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);

// 启动带进度动画的语音识别
Speech.getInstance().startListening(speechProgressView, speechDelegate);

多语言支持

// 获取支持的语音识别语言
Speech.getInstance().getSupportedSpeechToTextLanguages(new SupportedLanguagesListener() {
    @Override
    public void onSupportedLanguages(List<String> supportedLanguages) {
        // 处理支持的语言列表
        for (String language : supportedLanguages) {
            Log.d("speech", "支持的语言: " + language);
        }
    }

    @Override
    public void onNotSupported(UnsupportedReason reason) {
        // 处理不支持的情况
    }
});

// 设置语音识别语言
Locale chineseLocale = new Locale("zh", "CN");
Speech.getInstance().setLocale(chineseLocale);

// 获取支持的文本转语音声音
List<Voice> supportedVoices = Speech.getInstance().getSupportedTextToSpeechVoices();

// 设置文本转语音声音
if (!supportedVoices.isEmpty()) {
    Speech.getInstance().setVoice(supportedVoices.get(0));
}

权限处理

在 AndroidManifest.xml 中添加必要权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

运行时权限请求:

private static final int PERMISSIONS_REQUEST = 1;

private void requestMicrophonePermission() {
    if (ContextCompat.checkSelfPermission(this, 
            Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.RECORD_AUDIO},
                PERMISSIONS_REQUEST);
    } else {
        // 权限已授予,开始语音识别
        startSpeechRecognition();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
        @NonNull int[] grantResults) {
    if (requestCode == PERMISSIONS_REQUEST) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            startSpeechRecognition();
        } else {
            Toast.makeText(this, "需要麦克风权限才能使用语音功能", Toast.LENGTH_LONG).show();
        }
    }
}

错误处理与调试

启用调试日志

// 启用详细日志
Logger.setLogLevel(LogLevel.DEBUG);

// 自定义日志输出
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) {
        // 自定义信息日志处理
    }
});

异常处理

try {
    Speech.getInstance().startListening(speechDelegate);
} catch (SpeechRecognitionNotAvailable exc) {
    // 提示用户安装 Google App
    SpeechUtil.redirectUserToGoogleAppOnPlayStore(this);
} catch (GoogleVoiceTypingDisabledException exc) {
    // 提示用户启用 Google 语音输入
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("请启用Google语音输入以使用语音识别功能")
            .setPositiveButton("确定", null)
            .show();
}

最佳实践建议

  1. 用户体验优化

    • 在开始语音识别前提供明确的视觉反馈
    • 处理无网络连接的情况
    • 提供取消语音识别的选项
  2. 性能考虑

    • 在 onDestroy 中调用 shutdown() 防止内存泄漏
    • 合理管理语音识别会话的生命周期
    • 避免在后台长时间运行语音识别
  3. 隐私保护

    • 明确告知用户语音数据的使用方式
    • 提供隐私政策说明
    • 允许用户随时撤销麦克风权限

应用场景

  • 智能助手应用:实现语音命令控制
  • 无障碍应用:为视障用户提供语音交互
  • 教育应用:语言学习和发音练习
  • 车载应用:驾驶时的语音控制功能
  • 智能家居:语音控制家居设备

项目示例

项目中包含完整的演示应用,位于 examples/demoapp 目录。演示应用展示了:

  • 基本的语音识别功能
  • 文本转语音功能
  • 多语言支持
  • 进度动画显示
  • 权限处理

通过这个开源库,开发者可以快速为 Android 应用添加强大的语音交互功能,提升用户体验和应用价值。

【免费下载链接】android-speech Android speech recognition and text to speech made easy 【免费下载链接】android-speech 项目地址: https://gitcode.com/gh_mirrors/an/android-speech

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值