Architecting the drum machine project
As usual, before diving into the code, let's study the structure of the project. The aim of the project is to be able to:
- Play and record a sound track from a drum machine
- Save this track to a file and load it to play it back
To play a sound, we will lay out four big buttons that will play a specific drum sound upon click (or a keyboard event): a kick, a snare, a hi-hat, and a cymbal crash. These sounds will be .wav
files loaded by the application. The user will be able to record his sequence of sounds and replay it.
For the serialization part, we do not only want to save the track to a single file format, we would rather do three:
- JSON (JavaScript Object Notation)
- XML (eXtensible Markup Language)
- Binary
Not only is it more fun to cover three formats, but it also gives us the opportunity to understand the advantages and limitations of each one, and how it fits within the Qt framework. The architecture we are going to implement will try to be flexible...