-
Notifications
You must be signed in to change notification settings - Fork 12
1 Overview
Relevant source files
The following files were used as context for generating this wiki page:
This document provides a high-level introduction to AudioScape, a React Native mobile application for streaming music from YouTube Music on Android devices. This overview covers the application's core purpose, key features, technology stack, and system architecture.
For detailed information about specific subsystems, see:
- Architecture details: Architecture Overview
- User interface components: User Interface System
- Audio playback implementation: Music Playback System
- Data management and external integrations: Data and State Management
- Development setup and configuration: Development Environment
AudioScape is an Android music streaming application built with React Native and Expo that provides access to YouTube Music content through a custom API integration. The application offers a native mobile experience for discovering, playing, and managing music from YouTube Music's catalog without requiring a YouTube Music subscription.
The app operates as a standalone client that communicates with YouTube Music's backend services through a custom proxy API, enabling features like background playback, offline downloads, playlist management, and synchronized lyrics display.
Sources: README.md:5, package.json:1-4
AudioScape provides the following core functionality:
| Feature | Description |
|---|---|
| Music Streaming | Play songs directly from YouTube Music catalog |
| Background Playback | Continue playback when app is minimized or screen is off |
| Offline Downloads | Download songs for offline listening |
| Playlist Management | Create and manage custom playlists |
| Favorites System | Save favorite tracks for quick access |
| Synchronized Lyrics | Display time-synced lyrics during playback |
| Search Functionality | Search for songs, artists, and albums |
| Dynamic Themes | Adaptive UI colors based on album artwork |
| Auto Updates | Automatic checking and installation of app updates |
Sources: README.md:47-57
The following diagram shows the core technologies and dependencies that power AudioScape:
graph TD
subgraph "Frontend Framework"
expo["expo ~52.0.47"]
rn["react-native 0.76.9"]
router["expo-router ~4.0.21"]
end
subgraph "Audio Engine"
trackplayer["react-native-track-player ^4.1.1"]
reanimated["react-native-reanimated ^3.16.7"]
end
subgraph "State Management"
redux["@reduxjs/toolkit ^2.8.2"]
mmkv["react-native-mmkv ^2.12.2"]
reactredux["react-redux ^9.2.0"]
end
subgraph "External Services"
firebase["firebase ^11.10.0"]
youtubejs["youtubei.js (custom fork)"]
lrclib["lrclib-api ^2.0.0"]
end
subgraph "UI Components"
paper["react-native-paper ^5.14.5"]
fastimage["@d11/react-native-fast-image ^8.10.0"]
slider["react-native-awesome-slider ^3.1.0"]
end
subgraph "Device Integration"
filesystem["expo-file-system ~18.0.12"]
medialibrary["expo-media-library ~17.0.6"]
notifications["expo-notifications ~0.29.14"]
netinfo["@react-native-community/netinfo 11.4.1"]
end
expo --> rn
expo --> router
rn --> trackplayer
rn --> reanimated
redux --> reactredux
redux --> mmkv
trackplayer --> filesystem
firebase --> notifications
youtubejs --> netinfo
Sources: package.json:17-62
AudioScape follows a layered architecture pattern with clear separation between the presentation layer, business logic, and data access:
graph TB
subgraph "Presentation Layer"
navigation["expo-router Navigation System"]
screens["Screen Components"]
modals["Modal Components"]
floating["FloatingPlayer Component"]
end
subgraph "State Management Layer"
musiccontext["MusicPlayerContext"]
reduxstore["Redux Store"]
lyricscontext["LyricsProvider"]
end
subgraph "Business Logic Layer"
playbackservice["Playback Service"]
downloadservice["Download Service"]
searchservice["Search Service"]
updateservice["Update Service"]
end
subgraph "Data Access Layer"
trackplayer["react-native-track-player"]
mmkvstorage["MMKV Storage"]
filesystem["File System"]
customapi["YouTube 'po token' API"]
lrclibapi["LrcLib API"]
firebaseapi["Firebase Services"]
end
subgraph "External Systems"
youtubemusic["YouTube Music Backend"]
githubapi["GitHub Releases API"]
renderhost["Render.com Hosting"]
end
navigation --> musiccontext
screens --> reduxstore
modals --> lyricscontext
floating --> musiccontext
musiccontext --> playbackservice
reduxstore --> downloadservice
lyricscontext --> searchservice
playbackservice --> trackplayer
downloadservice --> filesystem
searchservice --> customapi
updateservice --> githubapi
trackplayer --> mmkvstorage
customapi --> youtubemusic
lrclibapi --> youtubemusic
firebaseapi --> renderhost
customapi -.->|"Hosted on"| renderhost
The architecture enables:
- Separation of Concerns: UI components are decoupled from business logic and data access
- Scalability: Modular design allows for easy addition of new features
- Testability: Clear boundaries between layers facilitate unit and integration testing
- Maintainability: Well-defined interfaces between components reduce coupling
Sources: README.md:65-75, package.json:17-62
This overview provides the foundation for understanding AudioScape's structure. For implementation details of specific subsystems, refer to the following documentation pages:
- Architecture Overview: Detailed system design and component interactions
- User Interface System: Screen hierarchy, navigation patterns, and UI components
- Music Playback System: Audio engine integration and playback management
- Data and State Management: Redux store, local storage, and external API integrations
- Development Environment: Build system, tooling, and development workflow