Skip to content

About

视唱练耳定制版

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

Repository files navigation

音程听辨训练(Ear Training)

一款面向 Android、iOS、Windows 和 macOS 的离线音程听辨训练应用。它不仅记录答题对错,还会分析“实际音程被误认为哪个音程”,建立个人混淆矩阵,并优先强化最容易混淆的组合。

核心功能

  • 支持一个八度内除纯一度外的 12 种音程:小二度至纯八度。
  • 可明确选择两个音“轮流播放”或“同时播放”,默认轮流播放。
  • 轮流播放支持上行、下行或随机方向;随机方向不会混入和声题。
  • 默认只考上行,可在设置中切换为只考下行或上行下行都考。
  • 答案按钮默认仅显示 m2、M3 等简称,可在设置中改为中文名称或同时显示。
  • 支持固定根音、有限随机根音和 C3–C6 范围内的完全随机根音。
  • 提供“合成键盘”和“合成拨弦”两种离线音色。
  • 支持普通多选识别和大按钮二选一混淆训练。
  • 记录不确定回答、重播次数、响应时间及首次播放正确率。
  • 错题后可重听本题、试听误选音程、交替播放正确/错误音程及立即强化。
  • 今日闯关包含 4 关,每关 5 题:基础辨认、音区变化、全音程挑战和薄弱冲刺。
  • 关卡通过增加答案范围、根音随机程度和音色变化逐步提升难度。
  • 每关需要连续答对 5 题;答错或选择“不确定”会重置当前关进度,但不会退回上一关。
  • 报告包含总体指标、各音程掌握度、分类表现及混淆矩阵。
  • 全部数据保存在本地,不需要网络、账号或麦克风权限。
  • 设置页可开启隐秘模式:使用中性界面文案、简写反馈,并可按 H 一键切换到工作清单遮罩;公共环境仍需佩戴耳机。

桌面端快捷键

按键 操作
Space 重播当前题目
1–9 选择第 1–9 个答案
0 选择第 10 个答案
U 记录为“不确定”
Enter 进入下一题
Esc 关闭当前反馈并继续

Windows 和 macOS 共用这组快捷键,并与鼠标/触摸按钮共用同一业务逻辑。输入焦点位于文本输入控件时,Flutter 焦点系统会优先处理输入事件。

音频实现

应用运行时生成 44.1 kHz、16-bit、单声道 WAV:

  • 合成键盘使用多谐波叠加和指数衰减包络。
  • 合成拨弦使用更丰富的谐波与快速衰减包络。
  • 音符带有短攻击和释放,减少爆音。
  • 和声音程由两个音直接混合。
  • 音频结果使用有限缓存;新播放会取消旧播放,避免重叠。

频率遵循十二平均律:

frequency = 440 × 2 ^ ((midiNote - 69) / 12)

本地数据

训练数据保存在 Flutter getApplicationSupportDirectory() 返回的应用支持目录中:

interval_training_data.json

数据包含:

schemaVersion
settings
attempts
sessions

写入时先生成临时文件再替换正式文件。文件整体损坏时恢复默认数据;单条训练记录异常时仅跳过该记录。设置页面支持清空数据和导出 JSON。iOS 导出文件保存到应用 Documents 目录,可在“文件”App 的“我的 iPhone/iPad”中访问。

项目结构

lib/
  app/                         # 应用组合、主题、字符串
  features/
    home/presentation/         # 首页
    training/
      domain/                  # 音程、题目、会话、仓储和音频契约
      data/                    # JSON 仓储与 WAV 合成播放实现
      presentation/            # 自由配置和训练页面
    report/
      domain/                  # 混淆矩阵、权重和掌握度算法
      presentation/            # 训练报告
    settings/presentation/     # 设置、清空和导出

领域算法使用纯 Dart 实现,音频和本地存储均通过接口注入,UI 不直接操作文件。

开发环境

  • Flutter 3.22 或兼容版本
  • Dart 3.4 或兼容版本
  • Android SDK(构建 Android)
  • Visual Studio C++ Desktop Development 工具链(构建 Windows)
  • macOS 10.14 或更高版本与 Xcode(构建 macOS)
  • iOS 12.0 或更高版本、macOS、Xcode 与 CocoaPods(构建 iOS)

安装依赖并验证:

flutter pub get
flutter analyze
flutter test

构建:

flutter build apk --debug
flutter build windows
flutter build macos
# 在 macOS 上构建并生成带 versionCode 后缀的 IPA
bash tool/build_ios_versioned.sh

构建产物会读取 pubspec.yaml 中 version: x.y.z+X 的 X,并在文件名末尾附加 -vX。例如当前 versionCode 为 4:

EarTraining-debug-v4.apk
EarTraining-release-v4.apk
EarTraining-v4.exe
EarTraining-v4.app
EarTraining-v4.ipa

测试覆盖

当前测试覆盖:

  • MIDI 频率和半音计算。
  • 上行、下行、和声及根音音域边界。
  • 二选一出题平衡。
  • 自适应权重、混淆矩阵和掌握度。
  • 首听正确率、重播统计。
  • JSON 往返序列化及损坏数据恢复。
  • 重播、正确/错误/不确定反馈、下一题和桌面端快捷键 Widget 行为。

第三方依赖

  • audioplayers:跨平台播放内存 WAV。
  • path_provider:获取应用支持目录,并在 iOS 的 Documents 目录中保存导出文件。
  • file_selector:Windows 和 macOS 原生文件导出位置选择。

第三方组件分别遵循其自身许可证。

许可证

Copyright © 2026 zero1151. All rights reserved.

本项目未授予开源许可。除适用法律或第三方组件许可证明确允许的范围外,未经版权所有者书面许可,不得复制、修改、分发、再许可或将本项目及其源代码用于商业用途。完整声明见 LICENSE。

About

视唱练耳定制版

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages