# android-audio-client **Repository Path**: notvip/android-audio-client ## Basic Information - **Project Name**: android-audio-client - **Description**: 一个专注于Android平台音频处理的开源项目,提供高质量的音频输入输出功能,适用于音乐、语音识别和实时通讯等应用。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-19 - **Last Updated**: 2026-04-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Audio Client Android App 基于 Python `audio_device_client.py` 移植的 Android 音频客户端应用。 ## 功能特性 - **WebSocket 连接**:连接到服务端进行实时通信 - **音频采集**:使用手机麦克风采集音频(16kHz, 16bit PCM) - **音频播放**:接收并播放服务端返回的 TTS 音频(8kHz) - **消息协议**:支持完整的 JSON 消息协议 - **实时日志**:显示连接状态和识别结果 ## 项目结构 ``` android-audio-client/ ├── app/ │ ├── src/main/java/com/example/audioclient/ │ │ ├── MainActivity.kt # 主界面 │ │ ├── WebSocketManager.kt # WebSocket 连接管理 │ │ ├── AudioRecorder.kt # 音频录制器 │ │ ├── AudioPlayer.kt # 音频播放器 │ │ └── MessageModels.kt # 消息数据类 │ ├── src/main/res/ # 布局和资源文件 │ └── build.gradle.kts # 模块构建配置 ├── build.gradle.kts # 项目构建配置 └── settings.gradle.kts # 项目设置 ``` ## 技术栈 - **语言**:Kotlin - **架构**:Android + Coroutines - **网络**:Java-WebSocket - **音频**:Android AudioRecord / AudioTrack - **UI**:Material Design Components ## 使用说明 ### 1. 环境要求 - Android Studio Hedgehog (2023.1.1) 或更高版本 - Android SDK 34 - Kotlin 1.9.20 - Gradle 8.2 ### 2. 构建项目 ```bash # 打开项目 cd android-audio-client # 使用 Android Studio 打开,或命令行构建 ./gradlew assembleDebug ``` ### 3. 配置服务器地址 在应用界面的输入框中输入服务端地址: - 默认:`ws://192.168.20.177:8766` - 请根据实际服务端 IP 地址修改 **注意**: - 手机和电脑需要在同一 WiFi 网络下 - 服务端需要监听 `0.0.0.0` 而不是 `localhost` ### 4. 权限说明 应用需要以下权限: - `RECORD_AUDIO` - 录音权限 - `INTERNET` - 网络连接 - `MODIFY_AUDIO_SETTINGS` - 修改音频设置 首次启动时会自动申请权限。 ## 消息协议 与 Python 客户端完全兼容的消息类型: | 消息类型 | 方向 | 说明 | | ----------------- | -- | ---------------- | | `connected` | 接收 | 连接成功,包含 call\_id | | `speech_start` | 接收 | 服务端检测到语音开始 | | `speech_end` | 接收 | 服务端检测到语音结束 | | `asr_result` | 接收 | ASR 识别结果 | | `llm_start` | 接收 | 大模型开始处理 | | `llm_first_token` | 接收 | 收到首字响应 | | `llm_complete` | 接收 | 大模型回复完成 | | `tts_audio` | 接收 | TTS 音频元数据 | | `tts_complete` | 接收 | TTS 音频发送完成 | | `error` | 接收 | 错误消息 | | `ping` | 发送 | 心跳消息 | ## 音频参数 ### 发送(麦克风采集) - 采样率:16000 Hz - 位深度:16 bit - 声道:单声道 - 块大小:512 采样点 - 格式:Float32(与 Python 一致) ### 接收(TTS 播放) - 采样率:8000 Hz - 位深度:16 bit - 声道:单声道 - 格式:PCM ## 与 Python 客户端对比 | 功能 | Python 客户端 | Android App | | --------- | ------------- | ----------------- | | WebSocket | websockets | Java-WebSocket | | 音频采集 | pyaudio | AudioRecord | | 音频播放 | pyaudio | AudioTrack | | 数据格式 | numpy float32 | Kotlin FloatArray | | 并发 | asyncio | Kotlin Coroutines | ## 注意事项 1. **网络权限**:Android 9+ 需要 `android:usesCleartextTraffic="true"` 才能使用 ws\:// 2. **后台限制**:应用在后台时录音可能会被系统暂停 3. **电池优化**:建议关闭电池优化以获得更好的体验 4. **服务端配置**:确保服务端监听 `0.0.0.0:8766` 而非 `127.0.0.1:8766` ## 调试技巧 1. 使用 Android Studio 的 Logcat 查看详细日志 2. 检查网络连接:确保手机和电脑在同一网络 3. 检查防火墙:确保端口 8766 未被阻止 4. 使用 Chrome 开发者工具远程调试 WebSocket ## License MIT License