A native music player inspired by Apple Music application built with
- Expo
- React Native
- Typescript
- Zustand
![expo-logo](https://private-user-images.githubusercontent.com/2933560/369910495-44858dd9-939c-4483-82a4-b59150bff857.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDQwNjUsIm5iZiI6MTczOTI0Mzc2NSwicGF0aCI6Ii8yOTMzNTYwLzM2OTkxMDQ5NS00NDg1OGRkOS05MzljLTQ0ODMtODJhNC1iNTkxNTBiZmY4NTcucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTFUMDMxNjA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzBjZWQ3NDYzMDM4OTAwNTg3YTVlMzFlYWNjMjIwOWEzN2QyYjQxMGNhZWY1YmYzNWY4M2VjYjJkMjVjMDJiOCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.CGtvTnGPGGH6oqzpLSAi-gqMSsGatVeEQm50fONLnJ0)
![typescript-logo](https://private-user-images.githubusercontent.com/2933560/369910529-a8122b96-9219-4812-8484-59d57237b10c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDQwNjUsIm5iZiI6MTczOTI0Mzc2NSwicGF0aCI6Ii8yOTMzNTYwLzM2OTkxMDUyOS1hODEyMmI5Ni05MjE5LTQ4MTItODQ4NC01OWQ1NzIzN2IxMGMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTFUMDMxNjA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9N2JiZDIxYjE5MzI3ZDc0ZDRjMGY0MjFiZmNiZWIwZTk4OGMwNjdlYjdlMDI4NDY2ODIzYjExZTJlN2VlZGQzNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hkiMHJP2NwHpb0qvJf2yf_jX_riDQ5q3rDy3uJLzvWE)
![zustand-logo](https://private-user-images.githubusercontent.com/2933560/372847975-272b5867-20c4-4578-aa43-3706473a249b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDQwNjUsIm5iZiI6MTczOTI0Mzc2NSwicGF0aCI6Ii8yOTMzNTYwLzM3Mjg0Nzk3NS0yNzJiNTg2Ny0yMGM0LTQ1NzgtYWE0My0zNzA2NDczYTI0OWIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTFUMDMxNjA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZmVmOTEwMmFjMTBjMThhNjJkZWQ2ZTkxYzgyMjU0MTdiZmEyN2RiYzExZjcwYTcwMzdlZjIyMDc3OWQxMzdhNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hvGn6rr8fRDg6SAe-UXxjjXwDEMvt2UqnMr2PMPxu34)
- Intuitive User Interface: Sleek and user-friendly design
- Music Player: Support for background play and controls.
- Dynamic Playlists: Create and manage playlists.
- Live Updates: Real-time updates and synchronization.
- Offline Support: Play tracks even when you’re offline.
- Remote Control: Play tracks even when you’re phone locked.
![music-player-ss](https://private-user-images.githubusercontent.com/2933560/372851271-fc85057a-ea7c-44a5-add4-d88eeb14b105.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDQwNjUsIm5iZiI6MTczOTI0Mzc2NSwicGF0aCI6Ii8yOTMzNTYwLzM3Mjg1MTI3MS1mYzg1MDU3YS1lYTdjLTQ0YTUtYWRkNC1kODhlZWIxNGIxMDUucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTFUMDMxNjA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YmQ1MjIwYjM0MDMxZjhlNWVkNDFiMzc5Y2ZiMmJiN2ExYmRkYmFjMjFmMzkyMmYzZTk0ZWM4ZTQ0NDFjYTNiOSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.BU-7SGzVkywoh7LaR-EWqUTUl73436LTwVYNvLNgb1o)
![music-player-ss-2](https://private-user-images.githubusercontent.com/2933560/372851316-bab5b3ee-8b33-4c0f-8049-b57628c5b45d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkyNDQwNjUsIm5iZiI6MTczOTI0Mzc2NSwicGF0aCI6Ii8yOTMzNTYwLzM3Mjg1MTMxNi1iYWI1YjNlZS04YjMzLTRjMGYtODA0OS1iNTc2MjhjNWI0NWQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIxMSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMTFUMDMxNjA1WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YzkwYzcwM2EyMjZmM2JiOWU2ZjI0NzkzY2UyYTdiZDgyNWNkMjVkYmM1YmRlMWJlNjgzZGE2NDgwYTRlYTFjNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.IBInHKR0JjJVDzbcSHtiwbdz4-rGtEuZ6UdnWzcieIA)
yarn install
npx expo run:ios
1 - yarn create expo -t and then select blank(typescript) and give its name
2 - Add .prettierrc file with below settings
{
"semi": false,
"singleQuote": true
}
3 - To make it more readable and remove all ../.. syntax, update tsconfig.json file something like below;
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
"strict": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"],
"@/assets/*": ["./assets/*"]
}
}
}
4 - Install expo router -> https://docs.expo.dev/router/installation/#prerequisites
npx expo install expo-router react-native-safe-area-context react-native-screens expo-linking expo-constants expo-status-bar
5 - To compile app locally -> https://docs.expo.dev/guides/local-app-development/
-------------------- First commit --------------------
6 - Create contants, styles, Stack and tabs navigation
7 - Create all layouts and screens for our navigations
-------------------- Second commit --------------------
8 - Use npx expo install expo-blur
to give blur effects
9 - Add mock data and fallback images
10 - Use npx expo react-native-fast-image
to render faster/better image
11 - Use useNavigationSearch
hooks to filter with search params
-------------------- Third commit --------------------
12 - Install track player -> https://rntp.dev/docs/basics/installation
13 - Update app.json / ios section to have audio option
"infoPlist": {
"UIBackgroundModes": ["audio"]
}
14 - Initialise player and add that to root layer and implement press action to songs to start playing when user click
15 - Use react-native-loader-kit
to implement loading animation on the image
-------------------- Forth commit --------------------
16 - Install react-native-reanimated
for floatin text animation on FloatinPlayer and implement that animation
-------------------- Fifth commit --------------------
17 - Create Player screen
18 - Install react-native-gesture-handler
and react-native-awesome-slider
for progressbar gestures
19 - Install react-native-image-colors
and expo-linear-gradient
for background linear gradient effect
20 - Install ts-pattern
for The exhaustive Pattern Matching library for TypeScript with smart type inference
-------------------- Sixth commit --------------------
21 - Create Favorites screen
22 - Install zustand
with version "^4.5.2"
for state management
23 - Create queues for diffferent tracklists
-------------------- Seventh commit --------------------
24 - Add Play and shuffle buttons to track lists
25 - Implement Artists Screen, list of artists and individual artist screen
-------------------- Eighth commit --------------------
26 - Implement Playlists Screen, list of playlists and individual playlist screen
-------------------- Nineth commit --------------------
27 - Install @react-native-menu/menu
for PopupMenus
28 - Implement add to playlist feature
29 - Implement add to favorite feature
30 - Implement player remote control
-------------------- Tenth commit --------------------
Build a Music Player app with React Native, Expo, Typescript and Zustand