Ever wanted to play a piece of music but you don't have enough hands to turn the page? Look no further! With ScoreSwipe, you can flip through the pages of your digital sheet music effortlessly by using your mind simply tilting your head.
ScoreSwipe is a unique and innovative application that leverages computer vision technology to simplify the experience of reading sheet music. With ScoreSwipe, you can flip through the pages of your digital sheet music effortlessly by simply tilting your head.
- Hands-Free Page Flipping: Tilt your head left to flip the page backward and right to flip the page forward.
- Digital Sheet Creation: Upload your own PDFs, photos from your gallery, or take and crop photos from within the app.
- Customizable Sensitivity: Adjust the sensitivity of head tilts to match your preferences.
Create & Navigate Score | Edit & Delete Score |
---|---|
Screen_Recording_20240108_222434.mp4 |
Screen_Recording_20240108_222535.mp4 |
The application is entirely built using Flutter, a cross-platform UI toolkit for building applications for mobile, web, and desktop from a single codebase. Flutter uses the Dart programming language.
- Install Flutter
- Clone the repository
- Run
flutter pub get
to install dependencies - Run
flutter run
to run the app - Run
flutter test
to run the tests - Run
flutter build apk
to build the apk
Important files and directories:
.
βββ assets # Static assets (eg. logo)
βββ fonts # Custom fonts
βββ lib # Source files. Contains all the logic for the app.
β βββ main.dart # Entry point for the app
β βββ common # Common files used throughout the app
β β βββ data # Deals with fetching and storing data
β β βββ models # Data models
β βββ features # Contains the separate features of the app (UI and logic)
β β βββ score_browser # Browser for viewing and selecting scores
β β βββ score_creator # Editor for creating new scores
β β βββ score_viewer # Displays score and handles page flipping
βββ test # Automated tests. Consists of unit tests
βββ pubspec.yaml # Contains all the dependencies for the app
βββ README.md # This file
The user interface is in lib/features
. Each feature is contained in its own directory and consists of screen(s) and/or widgets. The UI layer is responsible for communicating with the business logic layer.
note: not all the logic and UI is completely separated
The business logic is also contained in lib/features
. When state management becomes complex, we switch to blocs (using the Business Logic Component pattern). Complex features consist of a bloc
and event
and state
classes. The bloc
class contains the business logic and the event
and state
classes are used to communicate with the bloc
. The bloc
class is also responsible for communicating with the data layer through the repositories.
Models are in lib/common/models
. This folder contains the data models used throughout the app. Currently there is only one model, Score
, which represents a score.
Data is handled in lib/common/data
. This folder contains the logic for fetching and storing data. The repositories are responsible for communicating with the data sources. The data sources are responsible for fetching and storing data from the respective sources: local database with the Flutter SQLite plugin sqflite and local filestorage with dart:io
and path_provider.
Tests are in test
. Currently, there are only unit tests that test the models and datasources. The tests are run using the Flutter test framework.
The gesture tracking leverages ML Kit's face detection API for precise landmarking and rotational information. When the user's head rotation surpasses a predefined threshold, the app flips to the next page. The app waits for the user's head to return below the threshold to reset the process.
@floofysaur - User Interface and Logo Design