How prosincerity/ghostwriter works
Ghostwriter is an offline-first Android songwriting app. The main workflow is: a writer opens or creates a project, edits and saves lyrics, optionally imports a beat, then plays it while exploring its waveform and placing timeline markers. MainActivity routes between the home, editor, settings, and about screens; EditorScreen coordinates project persistence and beat preparation. The graph also shows lyric backups and waveform processing/cache as distinct internal responsibilities. Source excerpts are partial, so some UI-to-storage wiring and documented-but-unsampled details are intentionally omitted.
Main entry points: EditorScreen.kt Lyrics editor · ProjectStorage.kt Project operations · MainActivity.kt App navigation · BeatPlayer.kt Beat playback
Components 23
App navigation
- App navigation
app/src/main/java/com/prosincerity/ghostwriter/MainActivity.kt - Project home
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/HomeScreen.kt - Settings
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/SettingsScreen.kt - About
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/AboutScreen.kt
Songwriting workspace
- Lyrics editor
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/EditorScreen.kt - Lyrics notepad
app/src/main/java/com/prosincerity/ghostwriter/ui/components/LyricsNotepad.kt - Project details
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/ProjectInfoDialog.kt - Marker dialogs
app/src/main/java/com/prosincerity/ghostwriter/ui/screens/EditorMarkerDialogs.kt
Beat and waveform
- Beat playback
app/src/main/java/com/prosincerity/ghostwriter/media/BeatPlayer.kt - Beat controls
app/src/main/java/com/prosincerity/ghostwriter/ui/components/BeatPlayerPanel.kt - Playback controls
app/src/main/java/com/prosincerity/ghostwriter/ui/components/BeatPlaybackControls.kt - Waveform timeline
app/src/main/java/com/prosincerity/ghostwriter/ui/components/WaveformView.kt - Waveform extraction
app/src/main/java/com/prosincerity/ghostwriter/logic/WaveformExtractor.kt - Waveform viewport
app/src/main/java/com/prosincerity/ghostwriter/logic/WaveformViewport.kt
Project persistence
- Project operations
app/src/main/java/com/prosincerity/ghostwriter/data/ProjectStorage.kt - Lyrics backups
app/src/main/java/com/prosincerity/ghostwriter/data/ProjectLyricsStorage.kt - Project metadata
app/src/main/java/com/prosincerity/ghostwriter/data/ProjectMetadata.kt - App settings
app/src/main/java/com/prosincerity/ghostwriter/data/Settings.kt - Waveform cache
app/src/main/java/com/prosincerity/ghostwriter/data/WaveformCache.kt
Other components
- Writer
- Local files
- Android media APIs
- Audio file picker
Connections 28
- Writer → App navigation: opens app
- App navigation → Project home: shows home
- App navigation → Lyrics editor: opens project
- App navigation → Settings: opens settings
- App navigation → About: opens about
- Project home → Project operations: manages projects
- Lyrics editor → Project operations: loads project
- Lyrics editor → Beat playback: controls playback
- Lyrics editor → Waveform extraction: prepares waveform
- Lyrics editor → Audio file picker: selects beat
- Lyrics notepad → Lyrics editor: edits lyrics
- Project details → Lyrics editor: edits details
- Marker dialogs → Lyrics editor: edits markers
- Beat controls → Beat playback: controls playback
- Beat controls → Waveform timeline: shows timeline
- Playback controls → Beat playback: controls playback
- Waveform timeline → Waveform viewport: updates viewport
- Project operations → Lyrics backups: loads and saves
- Project operations → Project metadata: reads and writes
- Project operations → Waveform cache: manages cache
- Lyrics backups → Local files: reads and writes
- Project metadata → Local files: reads and writes
- Settings → App settings: accesses settings
- App settings → Local files: persists settings
- Project operations → Local files: stores projects
- Waveform extraction → Android media APIs: decodes audio
- Beat playback → Android media APIs: plays audio
- Waveform extraction → Waveform cache: caches samples