README.en.md
June 9, 2026 · View on GitHub
Echo Loop — Efficient English Listening & Speaking Training
You no longer have to figure out how to practice English on your own.
Blind listening · Intensive listening · Shadowing · Retelling · Review — Echo Loop guides you through every step at a scientifically-paced rhythm.
This project is academically advised by Yang Yan from the School of Foreign Studies, Minzu University of China.
🇨🇳 Note for China users: The China App Store listing is temporarily off the shelf while we complete ICP registration. Users in mainland China can still install Echo Loop with an App Store account from another region (e.g. US or Hong Kong). It will be relisted once registration is complete.
📱 Screenshots
![]() Import audio, start practicing |
![]() Scientific practice, listen-speak loop |
![]() Auto reminders, visible progress |
![]() Sentence-by-sentence intensive listening |
![]() Sense-group split, hard sentence analysis |
![]() Retelling: turn comprehension into output |
![]() Saved hard sentences, practice to mastery |
![]() Flashcard review with original context |
![]() Practice freely at your own pace |
✨ Features
- 🤖 Auto-driven learning rhythm: Shadowing repetitions, review timing, and hard-sentence marking all advance automatically — you just focus on listening and speaking.
- 🎯 Listen-speak loop: Intensive listening, shadowing, and retelling flow seamlessly. From understanding the content, to imitating expression, to saying it in your own words.
- 🧩 Sense-group splitting for long sentences: Long sentences are split by sense groups, breaking complex structures into digestible chunks.
- ⭐ Save hard sentences and review them on demand: Hard sentences are auto-archived for focused shadowing and repeated practice — no more "marked and forgotten".
- 📚 Contextualized flashcard review: Saved words and sense groups are reviewed alongside their original sentence context — memorize in context, not in isolation.
- 💡 AI translation, analysis, and vocabulary explanation: Bilingual translation, sentence analysis, word usage and collocations — expand on demand without breaking your flow.
- 📍 Resume where you left off: Automatically records your stage and current sentence, so you can pick up instantly — even 5-minute fragments count.
- 📊 Learning statistics: Tracks practice time, input/output ratio, and unique vocabulary — see exactly how much you've practiced and spoken.
- 🎙️ AI shadowing evaluation: Automatically aligns ASR results with the original text, highlights matched words, and gives a shadowing rating.
- 🎧 Local audio import + AI subtitles: Batch-import local audio, import existing subtitles, or auto-transcribe with AI.
🤔 Why we built this
When using other English-learning apps, you have to decide for yourself: how many times should I listen today? Intensive or extensive? Which sentence haven't I mastered yet? Should I shadow it? When should I review?
Those decisions themselves are what drains your willpower — it's not that you can't understand, it's that you don't know what to do next.
Echo Loop takes those decisions off your plate. Pick a piece of audio you want to understand, hit start, and from blind listening to completion, every step tells you "what to do right now".
You just need to keep opening the app — Echo Loop handles the rest. Practicing one piece thoroughly beats listening to 100 random ones.
🆚 How it differs from other solutions
We picked four English-learning apps most familiar to Chinese learners for comparison. Each individual feature exists, more or less, in other apps. But Echo Loop's real difference is this: it strings every step together and drives you through automatically — you don't need to figure out the method, control repetition counts, or manage review intervals yourself.
| Feature | Echo Loop | Daily English Listening | Kekenet | Liulishuo | Anki |
|---|---|---|---|---|---|
| App-driven learning rhythm | ✅ Fully automatic | ❌ | ❌ | ❌ | ❌ |
| Listen → speak loop (intensive + shadowing + retelling) | ✅ | ⚠️ Partial | ⚠️ Partial | ⚠️ Partial | ❌ |
| Sense-group splitting for long sentences | ✅ | ❌ | ❌ | ❌ | ❌ |
| Saved-sentence focused review | ✅ | ❌ | ❌ | ❌ | ❌ |
| Contextualized flashcard review | ✅ | ❌ | ❌ | ❌ | ⚠️ Manual cards required |
| AI translation / sentence analysis / word deep-dive | ✅ | ⚠️ Partial | ⚠️ Partial | ❌ | ❌ |
| Resume where you left off | ✅ | ⚠️ Partial | ⚠️ Partial | ⚠️ Partial | ⚠️ Partial |
| Stats: time / input-output ratio / unique vocabulary | ✅ | ⚠️ Partial | ⚠️ Partial | ⚠️ Partial | ❌ |
| AI shadowing evaluation | ✅ | ✅ | ✅ | ✅ | ❌ |
| Local audio import | ✅ | ✅ | ❌ | ❌ | ⚠️ Manual cards |
| Offline available | ✅ | ✅ | ✅ | ⚠️ Partial | ✅ |
| Open source | ✅ | ❌ | ❌ | ❌ | ✅ |
🧠 Methodology
Blind listening → Intensive listening → Shadowing → Retelling → Spaced review → Completion.
flowchart LR A[Blind listening<br/>Listen through once, gauge overall difficulty] --> B[Intensive listening<br/>Understand sentence by sentence, mark hard ones] B --> C[Shadowing<br/>Imitate pronunciation and intonation] C --> D[Retelling<br/>Express in your own words, build output ability] D --> E[Spaced review<br/>Re-practice before forgetting, consolidate long-term memory] E --> F[Completion<br/>Finish this round of learning]
Every step above is auto-driven by Echo Loop — no judgment calls required.
You don't need to manage "how many times should I listen" or "is it time to review last week's material". Open the app, and what to do today appears right in front of you.
The full process is quantified: practice time · input/output ratio · unique vocabulary.
How are spaced reviews scheduled?
Each piece of material is split into 1 first-pass session + 7 spaced reviews. Intervals stretch from 6 hours to 28 days, hitting the memory trace just before forgetting — aligned with the Ebbinghaus forgetting curve.
| Stage | Interval since last | Tasks |
|---|---|---|
| First pass | — | Blind → Intensive → Shadowing → Retelling |
| Review 1 | After 6 hours | Hard-sentence drills + retelling |
| Review 2 | After 1 day | Blind listening + drills + retelling |
| Review 3 | After 2 days | Blind listening + drills + retelling |
| Review 4 | After 4 days | Blind listening + drills + retelling |
| Review 5 | After 7 days | Blind listening + drills + retelling |
| Review 6 | After 14 days | Blind listening + drills + retelling |
| Review 7 | After 28 days | Blind listening + drills + retelling |
📥 Download & try it
|
Desktop: macOS in development · Windows planned · Web not planned |
![]() Scan to download iOS |
💬 Join the community
Practice English alongside other committed learners: share methods, give feedback, and be the first to hear about new features.
![]() Scan to join WeChat group |
If the QR code expires or the group hits the 200-member cap, add WeChat |
🗺️ Roadmap
✅ 1 · Core features
- Learning loop: blind / intensive / shadowing / retelling
- Spaced review scheduling (6h → 28d)
- Sense-group splitting for long sentences
- Saved hard sentences + focused review
- Contextualized flashcard review
- AI translation / sentence analysis
- iOS / macOS native ASR shadowing evaluation
- Resume where you left off
- Learning statistics
🚧 2 · AI capabilities
- AI speaking partner
- AI learning assistant (on-demand Q&A)
- Word deep-dive analysis
- Personalized material recommendations
🔭 3 · Experience & platforms
- Custom task flows
- Streaks / learning badges
- Official macOS / Windows desktop release
🔭 4 · Content ecosystem
- Official curated collections (by topic + difficulty)
- User-shared collections / UGC learning materials
⭐ Star History
🎓 Academic guidance & acknowledgements
Academic guidance
Thanks to Yang Yan (School of Foreign Studies, Minzu University of China; PhD in English Language and Literature, Peking University) for guiding this project's methodology.
Core dependencies
- Audio & speech: just_audio · audio_session · flutter_tts · sherpa_onnx
- Data & state: drift · flutter_riverpod
- Text processing: subtitle · lemmatizerx
- System capabilities: file_picker · flutter_local_notifications
🧑💻 For developers
🚀 Quick start
git clone git@github.com:echo-loop/Echo-Loop.git
cd Echo-Loop
cp .dev.env.template .dev.env # fill in Supabase / Google / API base URL
flutter pub get
dart run build_runner build
flutter run -d <ios|android|macos> --dart-define-from-file=.dev.env
Compile-time variables (
SUPABASE_URL,SUPABASE_PUBLISHABLE_KEY,GOOGLE_WEB_CLIENT_ID,API_BASE_URL) live in.dev.env(debug) /.prod.env(release) and are injected via--dart-define-from-file. Both files are gitignored — do not commit them..prod.envuses the same keys with the productionAPI_BASE_URL.
🤝 How to contribute
Issues and PRs are welcome. Before submitting, please run:
flutter analyze
flutter test
Commit titles follow the PREFIX: content format (check git log for common prefixes — FEAT / FIX / DOCS / MOD / OPT / CHORE / CI / RELEASE, etc.). A detailed contribution guide will live in CONTRIBUTING.md (TBD). This project follows the Contributor Covenant code of conduct.
🛠️ Tech stack
| Category | Technology | Purpose |
|---|---|---|
| UI framework | Flutter + Material 3 | Cross-platform UI |
| State management | Riverpod (code generation) | Unidirectional data flow |
| Audio playback | just_audio + audio_session | Audio engine layer |
| Subtitle parsing | subtitle | SRT/VTT |
| File picker | file_picker | Local audio/subtitle import |
| Persistence | Drift (SQLite) + shared_preferences | Progress, favorites, cache |
| i18n | flutter_localizations + ARB | 简体中文 / English |
| Testing | flutter_test + mocktail | Unit / widget / integration |
| Static analysis | flutter_lints | Code style |
📁 Project structure
lib/
├── l10n/ # i18n files (ARB format)
├── models/ # Data models (AudioItem, Sentence, Collection, etc.)
├── providers/ # Riverpod state management
│ ├── audio_engine/ # Audio engine layer (low-level playback control)
│ └── listening_practice/ # Listening practice layer (business logic)
│ ├── sentence_tracker.dart # Sentence locator (binary search)
│ └── bookmark_manager.dart # Bookmark manager
├── screens/ # Pages
├── services/ # Service layer (StorageService, SubtitleParser)
└── widgets/ # Reusable components
integration_test/ # End-to-end tests
test/ # Unit / widget tests
⌨️ Dev commands cheat sheet
Run
flutter run -d ios # iOS
flutter run -d android # Android
flutter run -d macos # macOS (in development, unreleased)
flutter run -d chrome # Web (debug only, no release plan)
# iOS Simulator
xcrun simctl list devices available
xcrun simctl boot <DEVICE_UDID>
open -a Simulator
Test / quality checks
flutter analyze # Static analysis
flutter test # All tests
flutter test integration_test -d macos # Integration tests
dart format . # Format
Code generation (after modifying Riverpod providers)
dart run build_runner build
Build
# Compile-time variables are injected from an env file (.dev.env for debug, .prod.env for release)
flutter build macos --dart-define-from-file=.prod.env
flutter build apk --dart-define-from-file=.prod.env
flutter build ios --dart-define-from-file=.prod.env
# Run on device
flutter run --release -d <DEVICE_ID> --dart-define-from-file=.dev.env
The release scripts
scripts/run_simulator.sh(reads.dev.env) andscripts/release_{android,ios,macos}.sh(read.prod.env) already pass--dart-define-from-filefor you.
Requirements
- Flutter SDK 3.9.2+
- iOS Simulator / Android emulator / physical devices
- Desktop: macOS / Windows / Linux dev environment










