Skip to content

A C++ audio editor done for a school project by 2 people in 2 weeks. It includes a SMFL UI, function to edit .wav file and a XAudio2 sound player.

Notifications You must be signed in to change notification settings

tiagzoc/AudioEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AudioEngine Project

THIS PROJECT WAS THE WORK OF 2 PEOPLE BUT I COULDN'T FORK THE ORIGINAL REPO DUE TO MY SCHOOL'S ORGANIZATION

OTHER CONTRIBUTORS :


General Information

AudioEngine is a C++ project developed using SFML for rendering and XAudio2 for sound playback.
The goal of this project was to create a parser for .wav files and a UI to modify the audio signal.

All the UI and rendering are done using SFML, and the audio processing only uses the standard C++ library.
XAudio2 was used to play all the sounds during this project.

Technologies used:

  • C++20
  • SFML 3.0.2
  • XAudio2
  • CMake for build management

How to Build and Run

Prerequisites

  • Visual Studio 2022 (or compatible)
  • CMake >= 3.23
  • Git

Steps

  1. Clone the repository:
git clone https://github.com/tiagzoc/AudioEngine
  1. Create a build directory named solution:
mkdir solution
  1. Run BUILD.bat to configure the project:
.\BUILD.bat

Note: If you get the error "AudioEditor.sln not found", simply open the .sln (or .slnx) file located in the solution folder.

  1. If the project does not launch automatically, open the solution manually:
cd solution &&  .\AudioEditor.sln
  1. Set TestProject as Set as Startup project and run the script.

How the Project Works

  • There are 7 different projects in this AudioEngine. All projects named TMM_ProjectName are personal utility projects made by REAPERtmm.
  • The Application project is the main window displayed when launching the program and contains all the core classes.
  • The AudioManip project is the core of the audio editing system and contains all audio processing functions, including the Fast Fourier Transform.
  • The Render project contains all low-level classes used by the application, such as Canvas, InfiniteCanvas, and Textbox.
  • AudioEngine allows you to edit multiple .wav files and export the result as a .wav file.
  • Audio edits can be applied either to the entire audio signal or to a selected portion, and can target one specific channel or all channels.
  • The main window contains an infinite canvas to manage audio files, an information box for the selected audio, a list of available edits, and a master volume slider.

What I Learned

  • How to set up a modular C++ project with multiple libraries and executables.
  • How a .wav file is structured and how to parse it.
  • How to edit an audio file without corrupting it.
  • How audio files are built with different channels and sample rates, and why they matter.
  • What a Fast Fourier Transform is and how to apply it to an audio signal.
  • How to create a robust UI using SFML.

Possible Improvements

  • Implement multi-selection to apply edits to multiple files at once.
  • Add a function to merge two different audio files.
  • Allow users to name the exported file.
  • Add keyboard shortcuts for editing functions.
  • Create a node-based system to link different audio files in the infinite canvas.

Demo

Gameplay Video

About

A C++ audio editor done for a school project by 2 people in 2 weeks. It includes a SMFL UI, function to edit .wav file and a XAudio2 sound player.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages