{"id":169,"date":"2025-04-20T00:59:20","date_gmt":"2025-04-20T00:59:20","guid":{"rendered":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/?p=169"},"modified":"2025-04-20T01:02:39","modified_gmt":"2025-04-20T01:02:39","slug":"yuhes-status-report-for-4-19","status":"publish","type":"post","link":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/2025\/04\/20\/yuhes-status-report-for-4-19\/","title":{"rendered":"Yuhe&#8217;s Status Report for 4\/19"},"content":{"rendered":"<p class=\"\">This week, I tested and stabilized the Beat Map Editor and integrated it with our game\u2019s core system. I improved waveform rendering sync, fixed note input edge cases, and ensured exported beat maps load correctly into the gameplay module. I worked with teammates to align beatmap formats and timestamps. I also stress-tested audio playback, waveform scrolling, and note placement on both Ubuntu and Windows. Due to virtual audio issues on Ubuntu, I migrated the project to Windows, where SFML audio runs reliably using WASAPI. I updated the build system, linked SFML, spdlog, and verified playback stability across formats. The editor now supports consistent UI latency, note saving\/loading, and waveform visualization, meeting our design metrics.<\/p>\n<p class=\"\"><strong>What Did I Learn<\/strong><br \/>\nTo build and debug the Beat Map Editor, I learned C++17 in depth, including class design, memory safety, and STL containers. I switched from Unity to SFML to get better control and performance, and I studied SFML docs and examples to implement UI components, audio playback, waveform rendering with <code>sf::VertexArray<\/code>, and real-time input handling. I learned to parse <code>sf::SoundBuffer<\/code> and extract audio samples to draw time-synced waveforms. I also learned to serialize beatmaps using efficient C++ data structures like <code>unordered_set<\/code> for fast duplicate checking and real-time editing.<\/p>\n<p class=\"\">I faced many cross-platform dev challenges. Ubuntu\u2019s VM environment caused SFML audio issues due to OpenAL and ALSA incompatibilities. I debugged error logs, searched forums, and simplified my CMake files before deciding to migrate to Windows. There, I set up a native toolchain using Clang++, static-linked dependencies with vcpkg and built-in CMake modules. Audio playback became reliable under Windows using WASAPI.<\/p>\n<p class=\"\">Verion control is key to our project, and I picked up Git branching, rebasing, and conflict resolution to collaborate smoothly with teammates. I integrated my code with others\u2019 systems, learning how to standardize file formats and maintain compatibility. I utilized YouTube tutorials, GitHub issues, and online forums to solve low-level bugs and these informal resources were often more helpful than official docs. I also\u00a0 leanred lots of linux and windows commands, C++ syntax, SFML function use cases, git hacks, methods for resolving dependency issues from GPT. Overall, I learned engine programming, dependency management, debugging tools, and teamwork throughout this semester.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week, I tested and stabilized the Beat Map Editor and integrated it with our game\u2019s core system. I improved waveform rendering sync, fixed note input edge cases, and ensured exported beat maps load correctly into the gameplay module. I worked with teammates to align beatmap formats and timestamps. I also stress-tested audio playback, waveform &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/2025\/04\/20\/yuhes-status-report-for-4-19\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Yuhe&#8217;s Status Report for 4\/19&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1072,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[6],"_links":{"self":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/posts\/169"}],"collection":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/users\/1072"}],"replies":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/comments?post=169"}],"version-history":[{"count":2,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/posts\/169\/revisions"}],"predecessor-version":[{"id":171,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/posts\/169\/revisions\/171"}],"wp:attachment":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/media?parent=169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/categories?post=169"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s25-teamd6\/wp-json\/wp\/v2\/tags?post=169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}