VocalScope

🎤 声域 (VocalScope)

一款基于 Android 的实时人声音域测试应用,帮助你快速、准确地检测个人声音的音高范围

✨ 功能特性

🎯 实时音高检测

🎹 钢琴键盘可视化

🛡️ 多重防误判机制

📱 用户体验

📸 界面预览

VocalScope 界面预览

功能 说明
中央圆形区域 实时显示当前检测到的音名
频率显示 当前音高对应的频率值(Hz)
最低音 / 最高音 本次测试中检测到的音域极值
钢琴键盘 蓝色区域为个人音域跨度,黄色圆点为实时音高位置

🏗️ 技术架构

com.ltx.vocalscope
├── MainActivity          # 主活动,权限管理与内容视图
├── VocalScopeScreen()    # 核心 UI 组件(Compose)
├── PianoRangeChart()     # 钢琴键盘可视化组件(Canvas 绘制)
├── startAudioCapture()   # 音频采集与 YIN 音高检测
├── getMidiNoteNumber()   # 频率 → MIDI 编号转换
├── getNoteNameFromMidi() # MIDI 编号 → 音名转换
├── medianInt/Float()     # 中值滤波工具函数
└── ui/theme/             # Material 3 主题配置

核心技术栈

技术 用途 版本
Kotlin 开发语言 2.3.10
Jetpack Compose 声明式 UI 框架 BOM 2026.02
Material 3 设计系统 最新
TarsosDSP YIN 音高检测算法 2.5
Android AudioRecord 原始 PCM 音频采集 -
Kotlin Coroutines 异步音频处理 -
Compose Canvas 钢琴键盘自定义绘制 -

音高检测流程

麦克风原始 PCM 数据
    ↓
AudioRecord (44100Hz, Mono, 16-bit)
    ↓
Short → Float 转换 + RMS 计算
    ↓
TarsosDSP YIN PitchProcessor
    ↓
置信度 > 0.85 && RMS > 0.015 && 65~1100Hz
    ↓
MIDI 编号计算 (A4=440Hz 标准)
    ↓
跳变检测 + 中值滤波平滑
    ↓
UI 更新 (音名、频率、音域范围、钢琴键盘)

🚀 快速开始

环境要求

构建与运行

# 克隆项目
git clone https://github.com/tianxing-ovo/VocalScope.git
cd VocalScope

# 构建调试版本
./gradlew assembleDebug

# 安装到已连接的设备
./gradlew installDebug

权限说明

应用需要以下权限:

权限 用途
RECORD_AUDIO 通过麦克风采集人声进行音高分析

首次启动时会弹出权限请求对话框,授予后即可正常使用。

🎵 使用指南

  1. 打开应用 → 授予录音权限
  2. 点击「开始测试」 → 中央圆圈变为紫色,表示正在录音
  3. 对着手机唱出不同音高 → 观察音名和频率的实时变化
  4. 查看钢琴键盘 → 蓝色区域即为你的音域跨度
  5. 点击「停止测试」 → 结束本次录音
  6. 点击「重置记录」 → 清除音域数据,准备下一次测试

使用技巧

📂 项目结构

VocalScope/
├── app/
│   ├── build.gradle.kts          # 应用级构建配置
│   └── src/main/
│       ├── AndroidManifest.xml    # 应用清单(权限声明)
│       ├── java/com/ltx/vocalscope/
│       │   ├── MainActivity.kt   # 核心逻辑(音频采集 + UI)
│       │   └── ui/theme/         # Material 3 主题
│       └── res/
│           ├── mipmap-*/          # 应用图标(多分辨率)
│           ├── values/            # 字符串、颜色、主题资源
│           └── xml/               # 备份规则
├── gradle/
│   └── libs.versions.toml        # 统一依赖版本管理
├── build.gradle.kts              # 项目级构建配置
├── settings.gradle.kts           # 项目设置
├── LICENSE                       # MIT 开源协议
└── README.md                     # 本文件

🔧 自定义配置

你可以在 MainActivity.kt 中调整以下参数:

参数 默认值 说明
sampleRate 44100 采样率(Hz)
bufferSize 2048 TarsosDSP 缓冲区大小
probability > 0.85f YIN 置信度阈值
currentRms > 0.015f 最低音量阈值(过滤背景噪音)
频率范围 65f..1100f 人声检测频率限制
大跳变阈值 >= 7 半音 触发跳变检测的音程差
中值滤波窗口 3 平滑窗口大小
钢琴键盘范围 F2 ~ D5 (MIDI 41~74) 键盘显示的音域范围

📋 版本历史

v1.0 (2026-03-06)

📄 开源协议

本项目基于 MIT License 开源