George’s Status Report for 2/26

This week I worked on adding audio and making improvements to the game UI. Adding audio to the game ended up being much more challenging than I had expected.

Last week I tried to add the libraries irrKlang, SMTL, and miniaudio, but they weren’t working for me. I had trouble linking them them into the project from within my CMakeLists.txt. In my status update for last week, I mentioned that I wanted to try to add the audio library SoLoud to the code base. I tried linking that as well, but it wasn’t working out. Eventually, I came across a sound library called PortAudio, and I was able to successfully add it to the game. I got a small sound demo working. The sound demo sounded terrible, because it played a simple saw wave, but it worked nonetheless.

In addition to adding PortAudio for playing sounds, I also added libaudiodecoder for reading wav and mp3 files.

Also, I updated the game GUI to show notes raining down towards the bottom of the screen.

For next week, I will be synchronizing the audio playback to the note scrolling, and I will also be working on decoding the beatmap JSON files. I would also like to work on detecting whether the player hit the beat at the correct time. I was a little bit behind schedule last week, but I feel like I’ve caught up now. We have from now until March 20 to reach our MVP, which is more than enough time to create a playable demo of the game.

 

Team Status Report for 2/19

During the lab work sessions this week we mostly focused on the design review presentation for next week. We worked as a group on the slide deck and we sent the slides to our TA for feedback on Friday. All 3 of us worked independently on our respective aspects of the game – Stephen worked on the hardware, Shreya on signal processing, and George on graphics programming.

One concern we currently have is regarding the piezoelectric sensors, as an issue with their detection accuracy could pose a minor setback. As mitigations to this concern, we ordered several types of piezoelectric sensors in case one fails to meet our expectations and we also plan to develop a small prototype as soon as possible in case another approach needs to be taken. Stephen ordered these parts earlier this week and they arrived on 2/17, so we plan on doing small tech demos with these parts after the design presentation to make sure that they work as intended.

Another risk that we discussed this week was related detecting beats in the input music. We are going to use a Python module called Librosa for detecting the beats per minute (BPM) of the audio, but we are a little unsure to what extent this BPM measurement will help us identify the beats of the song. In this case,  a “beat” is more than just the pulse from the BPM – it also refers to the groove and rhythm of the song. We want to sample the song at regular intervals relative to the BPM of the song, and use these samples to identify important beats. These beats can be used to generate the beatmap, which is the series of notes that rain down towards the player while their song is playing. This week our team discussed strategies for beat tracking and whether we should reduce our target metric of 80% for beat accuracy to make this goal more achievable; but we haven’t reached a conclusion on this yet.

Overall, we are on schedule as a team to have an MVP by the end of March, and there are no updates to out Gantt chart in the past week.

George’s Status Report for 2/19

This week I worked on rendering textures into the game. I am using a graphics programming textbook called “Learn OpenGL – Graphics Programming” by Joey de Vries, and I followed along with the chapter on textures this week. I’m using a library called stb that can read image files and place their data into a char array. The game currently loads a test image into the window:

Additionally, I worked on importing sound libraries into our game. However, I was running into some issues with this. I tried downloading and importing Simple and Fast Multimedia Library (SFML) and IrrKlang. It seems like both of these libraries are popular for sound in C++ video games. I am using CMake to compile our game, and for some reason CMake couldn’t link IrrKlang’s dynamic library on MacOS. I spent a few hours debugging this but I wasn’t able to get anything compiled into the game. I found another audio library called SoLoud, and I want to try using this instead.

For next week I want to focus on getting a small playable demo where notes fly down the screen towards the player. I originally had wanted to get font rendering working this week, but I think that for now I will focus on getting a playable demo with sounds. I want to start testing Shreya’s beat mapping algorithm in the game as soon as possible, and having a playable demo is necessary for this. I am a couple days behind schedule – I wanted to have more of the GUI completed before today.  Our current schedule supports a little wiggle room this week because our next task from 2/21-2/28 is just reviewing our final design and making little tweaks; these tweaks won’t take much time (i.e. near 9 hours), so I’ll have extra time to work on the GUI.

 

George’s Status Report for 2/12

Hello, welcome to my first status report for Hit It!. Hit It! is a rhythm game where the user hits drum pads with drum sticks to the beat of a song. I will be programming the user interface of the game with OpenGL and C++, and I will also be writing the code for overall gameplay flow. I chose to do graphics programmings on this project mainly because I am interested in working in the video games industry as a graphics programmer, and because I enjoyed taking Computer Game Programming last fall, which required me to make games with C++ & OpenGL.

This week on Monday we had our project proposal presentation. Over the last 2 weeks, I helped create the slide deck for the presentation and I also worked on the graphics framework for the game. I am following tutorials on graphics programming from an online textbook at https://learnopengl.com/. At the beginning of the semester, this game had zero code. Since then, I have worked on the following things:

  1. Importing libraries for graphics programming into the code base: glfw, glm, and glad
  2. Creating a window with glfw
  3. Drawing a square in the window

Right now the game looks like this:

The game can draw a square…  woah!

Each of the 3 steps listed above took several hours. I had to do quite a bit of internet research to figure out how to create a Makefile and how to compile our game. Then I needed to learn how to import gladglm, and glfw into the codebase. It took me around 5 hours or so to draw a square once the window was created, because I had to debug an issue related to how I configured my vertex and fragment shaders.

Next week I would like to add texture rendering into the game. I also want to be able to import placeholder artwork and maybe even have font rendering before the end of next week. In our schedule, we have allocated 3 weeks after the proposal presentation to test our technologies. Font rendering isn’t really necessary right how, but it would be nice if I can get it working by the end of next week so that I can use it in our prototype.

Right now I am on track to create a simple rhythm game prototype before spring break. I think that the biggest challenge for me moving forward will be balancing school with interviews and job searching. Interviewing and filling out applications takes a lot of time, which means I’ll need strong time management skills to stay on top of everything.