I am sure most of you would have heard some beautiful melodies or maybe can play some yourself, in this blog we will see how it's possible to create some tunes in MATLAB. In this blog, we will use the terms keyboard and piano interchangeably since we are going to make a virtual piano application.
Pianos come in many different key number layouts like 88,67,32 keys etc. We will be considering a 32 key piano as shown below and understand the layout and terms related to it.
The above piano configuration has 19 white keys and 13 black ones. Each of these keys plays a sound of different frequency when they are struck. An octave is an interval between two keys where one of the keys has double the frequency of the other. Conventionally ‘C’ is considered the first key of an octave. We can design a simple piano layout in MATLAB using push buttons which in our program looks like this:
Piano note frequencies
Since the different sounds played using a piano is dictated by their frequency we can make use of this formula to determine the same:
As we mentioned each octave starts with ‘C’ and is followed by ‘D’,’ E’,’ F’,’ G’,’ A’, and ‘B’. The keys have a letter followed by a number to represent the octave. In our program, we start with the 3rd octave and F note so the white keys will be ‘F3’,’ G3’,’ A3’,’ B3’,’ C4’,’ D4’ and so on. If we take a look at the black keys we see that they have 2 names: 1 for a higher note and 1 for a lower note. These are called half frequencies and they are called flat or sharp. For example, the note between F and G can be called as F sharp or G flat, in general, it is called as a sharp of the lower note and flat of a higher note.
In the formula seen above, the letter ‘n’ refers to the note number which is assigned to each note in a piano. The note number of some notes can be referred from Wikipedia as shown below.
Hence we can just plug in the note number to the above formula to get the required frequency of a note. This frequency is then passed to a function that forms the waveform for the sound wave and then played using the sound function in MATLAB.
MATLAB function to produce the piano sound waveforms
t = 0:1/app.samplefreq:4/time;
%Formula to determine frequency of anote from its notenumber
freq = 440*2^((notenum-49)/12);
%Code to waves to simulate the sound of a piano
wave = sin(1* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 1;
wave = wave+sin(2* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 2;
wave = wave+sin(3* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 4;
wave = wave+sin(4* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 8;
wave = wave+sin(5* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 16;
wave = wave+sin(6* 2 * pi *freq * t) .* exp(-0.0004 * 2 * pi * freq * t) / 32;
MATLAB code for callback of the push buttons
Improving the design and functionality of the application
Since our application is very bland at the current stage we can add a background image to make it look better. Also, to improve the functionality we add 3 more buttons:
- Record: This push button allows us to record our piano keypresses and finally store them in a .wav file format
- Long press: This state button allows us to enable and disable long-press which allows us to simulate the sound of a long press that is possible on a real piano.
- Happy Birthday theme: This push button has a pre-defined code that automatically plays the happy birthday theme song.
After changing the look and adding more buttons, the application looks like this
Happy birthday theme song
We can make use of the following image to write the pre-defined code to play the happy birthday song:
To write the code, we just have to follow the notes given above and pass the frequency to the ‘wavefunc’ and sound function accordingly to get the song. In our program, we start from the third octave. So the notes for the first line will be A3A3 B3A3 D4C4#.
Code for first line of the song
notenum=37; % A3
notenum=39; % B3
notenum=37; % A3
notenum=42; % D4
notenum=41; % C4#
Sample audio of the song
We made use of the frequency properties of a piano and the sound function in MATLAB to make a piano application. This allows us to play tunes of our choice. Hence MATLAB can be used to make many interesting and fun applications like this.
Did you find some helpful content from our video or article and now looking for its code, model, or application? You can purchase the specific Title, if available, and instantly get the download link.
Thank you for reading this blog. Do share this blog if you found it helpful. If you have any queries, post them in the comments or contact us by emailing your questions to [email protected]. Follow us on LinkedIn Facebook, and Subscribe to our YouTube Channel. If you find any bug or error on this or any other page on our website, please inform us & we will correct it.
If you are looking for free help, you can post your comment below & wait for any community member to respond, which is not guaranteed. You can book Expert Help, a paid service, and get assistance in your requirement. If your timeline allows, we recommend you book the Research Assistance plan. If you want to get trained in MATLAB or Simulink, you may join one of our training modules.
If you are ready for the paid service, share your requirement with necessary attachments & inform us about any Service preference along with the timeline. Once evaluated, we will revert to you with more details and the next suggested step.
Education is our future. MATLAB is our feature. Happy MATLABing!