### Install dependencies Source: https://github.com/chimera-studio/ritmo/blob/main/app/README.md Run this command to install all required project dependencies. ```sh yarn (install) ``` -------------------------------- ### Development and build commands Source: https://github.com/chimera-studio/ritmo/blob/main/app/README.md Commands for starting the development server, building for simulators, and running tests. ```sh yarn start ``` ```sh yarn android ``` ```sh yarn ios ``` ```sh yarn release ``` ```sh yarn test ``` ```sh yarn test:coverage ``` -------------------------------- ### Location Routing Hook Source: https://context7.com/chimera-studio/ritmo/llms.txt Custom hook to easily access and determine the current route information within the application. It provides properties for the current path and boolean flags for common routes like home, settings, and guide. Requires `useLocation` from `react-router`. ```typescript import { useLocation } from 'react-router'; // Location/routing hook export const useLocationInfo = () => { const location = useLocation(); return { current: location.pathname, isHome: location.pathname === '/', isSettings: location.pathname === '/settings', isGuide: location.pathname === '/guide', }; }; ``` -------------------------------- ### Manage Sound Sample Libraries Source: https://context7.com/chimera-studio/ritmo/llms.txt Defines the structure for sound libraries and demonstrates how to select a library within a React component. ```typescript import { getSamples } from '@utils/lists'; type Sample = { label: string; hihatSound: string; snareSound: string; kickSound: string; }; // Available sound libraries const samples: Sample[] = [ { label: 'Acoustic', hihatSound: 'acoustic_hihat.mp3', snareSound: 'acoustic_snare.mp3', kickSound: 'acoustic_kick.mp3' }, { label: 'Hip-hop', hihatSound: 'hiphop_hihat.mp3', snareSound: 'hiphop_snare.mp3', kickSound: 'hiphop_kick.mp3' }, { label: 'Trap', hihatSound: 'trap_hihat.mp3', snareSound: 'trap_snare.mp3', kickSound: 'trap_kick.mp3' }, { label: 'Lo-fi', hihatSound: 'lofi_hihat.mp3', snareSound: 'lofi_snare.mp3', kickSound: 'lofi_kick.mp3' }, { label: 'Latin', hihatSound: 'latin_hihat.mp3', snareSound: 'latin_snare.mp3', kickSound: 'latin_kick.mp3' }, { label: 'African 1', hihatSound: 'african1_hihat.mp3', snareSound: 'african1_snare.mp3', kickSound: 'african1_kick.mp3' }, { label: 'African 2', hihatSound: 'african2_hihat.mp3', snareSound: 'african2_snare.mp3', kickSound: 'african2_kick.mp3' }, { label: 'Toms', hihatSound: 'toms_hihat.mp3', snareSound: 'toms_snare.mp3', kickSound: 'toms_kick.mp3' }, { label: 'Epic Toms', hihatSound: 'epictoms_hihat.mp3', snareSound: 'epictoms_snare.mp3', kickSound: 'epictoms_kick.mp3' }, { label: 'Taiko', hihatSound: 'taiko_hihat.mp3', snareSound: 'taiko_snare.mp3', kickSound: 'taiko_kick.mp3' }, ]; // Using samples in a component function SampleSelector() { const dispatch = useAppDispatch(); const samples = getSamples(); const currentSample = useAppSelector((state) => state.global.ui.useSample); const handleSelect = (sample: Sample) => { dispatch(actions.updateSelectedSample(sample)); }; return (