Skip to content

pchapman-uat/AstroTune

Repository files navigation

AstroTune

GitHub latest release GitHub commit activity GitHub last commit

Static Badge Static Badge Static Badge Static Badge Static Badge

AstroTune (Previously known as Foobar Controller Mobile) is a mobile app that uses the BeefWeb API to allow users to control Foobar2000 and DeaDBeeF remotely.

This project was created for Preston Chapman's Student Innovation Project (SIP) at the University of Advancing Technology (UAT). The SIP is UAT's equivalent of a master’s thesis; all students graduating with a bachelor's degree are required to innovate and create a product. For more information, view https://www.uat.edu/student-innovation-projects.

UAT does not own this project; however, it has been granted a non-exclusive, royalty-free license to use, copy, display, describe, mark-on, modify, retain, or make other use of the student’s work. For more information, view https://www.uat.edu/catalog.

Information in the README and LICENSE may not properly reflect the above at the moment.

Setup

Please view the Wiki - Setup for a full guide on setting up the application.

Evaluation Criteria

  • – Can the user control playback of Foobar2000? (i.e., Pause, Play, Skip, Seek, Volume)

  • – Is the application Open Sourced?

  • – Does the application follow the licenses of all dependencies and third-party assets?

  • – Can the user view their music library?

  • – Can the user view their playlists?

  • – Can the user change the playing song from their Library?

  • – Is the app free to use?

  • – Does the app NOT have ads?

  • – Does the app work fully without an internet connection?

  • – Can the user use the app without crashing or bugs?

  • – Does the app have a good User Interface? (UI)

  • – Does the app have a good User Experience? (UX)

  • – Is the app customizable?

  • – Does the app follow the methodologies of Foobar2000? (Freeware and advanced)

  • – Is the app secure and follow best practices for network traffic? 1

Objectives

Details

ACS.1: Document the software development process to analyze a problem and to design, build, and test software solutions

This project has full Git Management, with Releases, Versions, and Tags. This project also features a Wiki that provides explanations about the project and how to use the application. Multiple documents have been created documenting the process of creating this application, along with the use of services such as Trello.

ACS.3 Implement data-driven solutions.

Although this project does not store any data locally, Foobar2000 uses SQLite to store its data. The Beefweb API provides a uniform way to retrieve data from Foobar2000, including now-playing information, libraries, album art, tags, and more. Understanding how the tags work in Foobar is crucial for this app to function, since all the requests use the tags like %title%

ACS.4 Design and implement software solutions for multiple platforms, including mobile devices.

This project is created in React Native, which means it is supported on Android and iOS. This project can even be modified to work with React Native Web as well, which would allow a web-based interface. However, having this fully client-sided and supported on the web would require a rework, so that is currently not an option. This project is created to be a link between a Computer running any Foobar2000-supported operating system and the user's mobile device.

ACS.5 Design, develop, and maintain object-oriented software solutions utilizing inheritance, encapsulation, polymorphism, and abstraction.

This project uses OOP in multiple places, ranging from the base classes for the API, custom elements, as well as types and interfaces. This project uses inheritance with classes like the Themes, as well as the Settings and Settings Groups. All classes use public/private methods, and some even with get methods. Multiple Settings classes override methods as needed by their setting type. All Settings are generic, which allows for subtypes of different values. The Themes use an abstract base class, where each one overrides and fills in the missing values. This allows for each theme to be its own class type, so new values can be adjusted, rather than there being objects for each Theme. Browser also uses abstraction as there is a Browser Item, which could be a Folder, or File, there is also recursion and generic, so each folder could have children folders/files, it can also be searched recursively fully, or at a specific depth level.

5.6 Within software solutions, describe, implement, and analyze data structure techniques.

This application deals with a large amount of data, particularly when it comes to the browser. This will be able to recursively do API calls to be able to get the contents of a Folder, with each File/Folder inside of it. This is then displayed to the user, where they can navigate in and out of the folders, can then play the song.

Resources

Usage

Development

References

Below is information regarding the assets and libraries used for this project.

Assets

Note

Assets are subject to change. All rights belong to their original owners. This application is not ready for release, so its license may prohibit the use of these icons.

Packages

Note

Due to this project being early in development the packages below will likely be inaccurate, please reference package.json for exact modules.

  • @react-native-async-storage/async-storage: ^2.1.2,
    • Storage of settings
  • @react-native-community/slider: 4.5.6,
    • UI Element
  • @react-native-documents/picker: ^11.0.3,
    • Export/Import Settings
  • @react-native-picker/picker: 2.11.0,
    • UI Element
  • @react-navigation/native: ^7.1.9,
    • Navigation
  • @react-navigation/native-stack: ^7.3.14,
    • Navigation
  • axios: ^1.12.0,
    • Web Requests to the Beefweb API
  • expo: ~53.0.9,
    • Framework
  • expo-dev-client: ^5.1.8,
    • Dev Backend
  • expo-screen-orientation: ^8.1.6,
    • Horizontal and Vertical views
  • expo-secure-store: ~14.2.3,
    • Storage of encrypted settings (passwords)
  • lottie-react-native: 7.2.2,
    • Animated Icons
  • react: 19.0.0,
    • Framework
  • react-native: 0.79.6,
    • Framework
  • react-native-audio-pro: ^9.9.1,
    • Audio Controller in notification bar/lock screen
  • react-native-elements: ^3.4.3,
    • UI Elements
  • react-native-fs: ^2.20.0,
    • Export/Import Settings
  • react-native-gesture-handler: ^2.27.1,
    • Required for color picker
  • react-native-network-info: ^5.2.1,
    • Finding available servers
  • react-native-reanimated: ^3.18.0,
    • Required for color picker
  • react-native-restart: ^0.0.27,
    • Restart the application
  • react-native-safe-area-context: ^5.4.0,
    • UI Elements
  • react-native-screens: ^4.11.1,
    • Navigation
  • react-native-svg: ^15.12.0,
    • SVG Support
  • reanimated-color-picker: ^4.1.0
    • Color Picker

VSCode Extensions

This is a list of all VSCode extensions that were used for this project.

Footnotes

  1. Due to the API using HTTP only, the network traffic is not encrypted.

About

AstroTune is a mobile app that uses the BeefWeb API to allow users to control Foobar2000 and DeaDBeeF remotely.

Topics

Resources

License

Stars

Watchers

Forks

Contributors