Inspiration

A lot of us have had unideal experiences when trying to listen to the perfect set of songs while working out on the treadmill. Instead of manually queueing songs or relying on shuffle, we wanted to create a hardware solution that adapts music playback to the user's pace in real time.

What it does

beatbuddy is a smart music synchronization system designed for gym workouts. It dynamically selects songs based on the speed of the user's steps. It features:

  • It features two pads that go under your feet, measuring the time between each step to compute your step speed -- your cadence
  • A button to trigger generation of a new song based on the current tempo
  • Integration with user’s Spotify account

To use it, go to the website on your phone, paste the link of your playlist on the front page and click enter. Press the big blue play button on the next page to play a song from your own Spotify account on your phone!

How we built it

We built our project using a combination of software and hardware technologies. The core functionality was implemented in Python, handling data processing and backend logic. For hardware integration, we used Arduino to interface with sensors and collect real-time inputs. Our frontend mobile app was developed using HTML, providing a simple and user-friendly interface for interaction. To connect everything, we utilized Flask as our web framework, enabling seamless communication between the backend and frontend. Additionally, we incorporated JavaScript to enhance interactivity and ensure smooth functionality. By integrating these diverse technologies, we created a cohesive system that effectively combined software, hardware, and web-based elements.

Challenges we ran into

The team’s biggest challenge was implementing Spotify’s API to extract a song’s BPM. After hours of work and nearing completion, we encountered persistent permission errors—only to discover that Spotify had discontinued the feature months earlier. Adapting quickly, we attempted to retrieve BPM data from Last.fm, but it failed to provide accurate BPMs for most popular songs. Having already invested significant time and resources, we pivoted once more, ultimately building and integrating a large database of popular songs with their BPMs into our code.

Accomplishments that we're proud of

We are especially proud of our ability to maintain a positive attitude and stay motivated throughout the project, even when faced with unexpected challenges. Despite working for over 17 hours consecutively, we remained focused and determined to find solutions rather than dwell on setbacks. When obstacles arose—such as the discontinued Spotify API and unreliable BPM data—we adapted quickly, brainstorming and implementing alternative approaches. Another key accomplishment was our flexibility in switching roles as needed. Whether debugging, researching, or coding, team members stepped in wherever they were most needed, ensuring steady progress. Our perseverance, teamwork, and problem-solving mindset were instrumental in overcoming challenges and successfully completing the project.

What we learned

Throughout this project, we also learned how to use Git for collaborative version control, which was essential for managing our code efficiently as a team. We practiced branching, merging, and resolving conflicts, ensuring that multiple team members could work on different aspects of the project simultaneously without overwriting each other's work. Additionally, we gained experience in structuring a Python project with multiple .py files, learning how to organize our code into modular components and use imports effectively. This approach improved code readability, maintainability, and debugging, reinforcing best practices for working on larger software projects in a team setting.

What's next for beatbuddy

Our next steps for beatbuddy involve building a more user-friendly implementation that allows users to move more freely while connected to the wires and shoe pads. While the technology works as of now, there are certain limitations to the movements users can make with the given setup.

Share this project:

Updates