Revision as of 11:28, 7 April 2019 by Trujilla (Talk | contribs)

Play Stephen Foster's "Beautiful Dreamer" Using MATLAB

Combine your love for math with your love for music by utilizing the exponential and sine functions in MATLAB to create signals that recreate a piece of music. This example delves into the replication of Stephen Foster’s classic parlor song “Beautiful Dreamer.”

"Beautiful Dreamer" sheet music found at http://www.loc.gov/creativity/hampson/dreamer_2.html

Playing “Beautiful Dreamer” on the piano requires the range of keys B3, the key immediately left to Middle C, to D5. Additionally, this song includes only one sharp note, C#4. Each note has its own unique frequency, which we can use to create sine waves on MATLAB for each note at lengths we specify. How can the exponential function aid in the production of a note then? The addition of the exponential function serves to aid in the production of a more natural sounding note. Multiplying the sine waves by a negative exponential gradually quiets the sound of the note as time goes on just as a note slowly fades to silence after hitting a key on the piano.

delta = 0.00005; notelength = 0:delta:0.6;  %length of notes in seconds longernote = 0:delta:1;  %length of longer notes in seconds B3 = exp((-1)*notelength*2).*sin(2*pi*246.942*notelength);  %Sine wave to produce a B3 note MiddleC = exp((-1)*longernote*2).*sin(2*pi*261.626*longernote);  %Sine wave to produce a C4 note Csharp = exp((-1)*notelength*2).*sin(2*pi*277.183*notelength);  %Sine wave to produce a C#4 note D4 = exp((-1)*notelength*2).*sin(2*pi*293.665*notelength);  %Sine wave to produce a D4 note E4 = exp((-1)*notelength*2).*sin(2*pi*329.628*notelength);  %Sine wave to produce an E4 note F4 = exp((-1)*notelength*2).*sin(2*pi*349.228*notelength);  %Sine wave to produce an F4 note G4 = exp((-1)*notelength*2).*sin(2*pi*391.995*notelength);  %Sine wave to produce a G4 note A4 = exp((-1)*notelength*2).*sin(2*pi*440.000*notelength);  %Sine wave to produce an A4 note B4 = exp((-1)*notelength*2).*sin(2*pi*493.883*notelength);  %Sine wave to produce a B4 note C5 = exp((-1)*notelength*2).*sin(2*pi*523.251*notelength);  %Sine wave to produce a C5 note D5 = exp((-1)*notelength*2).*sin(2*pi*587.330*notelength);  %Sine wave to produce a D5 note %create a vector to store the notes of the song in order beautiful = [C5 B4 C5 G4 E4 D4 Csharp D4 A4 G4 B4 A4 A4 G4 F4 F4 E4 D4 E4 C5 B4 C5 G4 E4 D4 Csharp D4 A4 G4 B4 A4 A4 G4 F4 F4 E4 D4 MiddleC G4 F4 D4 B3 A4 A4 G4 E4 MiddleC C5 B4 C5 A4 D5 C5 B4 C5 A4 G4 C5 B4 C5 G4 E4 D4 Csharp D4 A4 G4 B4 A4 A4 G4 F4 F4 E4 D4 E4 A4 B4 C5 C5 G4 E4 F4 E4 D4 MiddleC]; %play the song at a sample rate of 1/delta sound(beautiful,1/delta);

Use the code above to listen to the MATLAB version of the beautiful melody or listen to the attached audio recording of the MATLAB output right now.

Alumni Liaison

Prof. Math. Ohio State and Associate Dean
Outstanding Alumnus Purdue Math 2008

Jeff McNeal