ECE 301 Homework #1: Playing Sounds in Matlab
Michael James
Question explanations and sound files:
- The sound file for the combined three versions of "Smoke on the Water" by Deep Purple can be found here:
www.projectrhea.org/rhea/images/1/1a/SmokeOnTheWater_MichaelJames.wav
- The forward repeated phrase is "number nine." In reverse, the message sounds like "turn me on, dead man."
The sound file for the reversed "Revolution 9" by the Beetles can be found here:
www.projectrhea.org/rhea/images/8/82/BeatlesReversed_MichaelJames.wav
Matlab Program:
%-------------------------------------------------------------------------- % ECE 301 Homework #1 % Playing Sounds in MATLAB % % Michael James % January 19th, 2011 %-------------------------------------------------------------------------- clear %This erases all previous variables in MatLab %-------------------------------------------------------------------------- % Part 1: Three renditions of "Smoke on the Water" %-------------------------------------------------------------------------- BPM = 112; % Number of beats per minute in which the song was written for MIN = 60; % Number of second in a minute (constant) FS = 8000; % Sampling Rate (Hz) delta = 1 / FS; % Seconds of each interval in the data set (1 / Hz) qn = 0: delta : (MIN / BPM); % Timing of a quarter note (sec) hn = 0: delta : (2 * (MIN / BPM)); % Timing of a a half note (sec) en = 0: delta : (.5 * (MIN / BPM)); % Timing of a an eigth note (sec) dq = 0: delta : (1.5 * (MIN / BPM)); % Timing of a a dotted quarter note (sec) fA = 440; % Frequency of A (Hz) fG = 2 ^ (-2 / 12) * fA; % Frequency of G (Hz) fBf = 2 ^ (1 / 12) * fA; % Frequency of B-flat (Hz) fC = 2 ^ (3 / 12) * fA; % Frequency of C (Hz) fDf = 2 ^ (4 / 12) * fA; % Frequency of D-flat (Hz) %-------------------------------------------------------------------------- % Part 1A: "Smoke on the Water" at original speed %-------------------------------------------------------------------------- x = .02 * [sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fC*dq),sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fDf*en),sin(2*pi*fC*hn),sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fC*dq),sin(2*pi*fBf*qn),sin(2*pi*fG*qn)]; %-------------------------------------------------------------------------- % Part 1B: "Smoke on the Water" played twice as fast. The signal in this % case is not transformed. Rather, the notes are played at half their % original length. %-------------------------------------------------------------------------- BPM = 112 * 2; % This doubles the speed of the music qn = 0: delta : (MIN / BPM); % Timing of a quarter note (sec) hn = 0: delta : (2 * (MIN / BPM)); % Timing of a a half note (sec) en = 0: delta : (.5 * (MIN / BPM)); % Timing of a an eigth note (sec) dq = 0: delta : (1.5 * (MIN / BPM)); % Timing of a a dotted quarter note (sec) x2 = .02 * [sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fC*dq),sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fDf*en),sin(2*pi*fC*hn),sin(2*pi*fG*qn),sin(2*pi*fBf*qn),sin(2*pi*fC*dq),sin(2*pi*fBf*qn),sin(2*pi*fG*qn)]; %-------------------------------------------------------------------------- % Part 1C: "Smoke on the Water" with transformation y(t) = x(2t). In This % case, the original song (x) is time scaled. In addition to the speed % increasing to twice the original speed, the frequencies increase as well. %-------------------------------------------------------------------------- % This loop performs the required transformation by scaling the original % signal to data points in the new signal for n = 1 : (size(x,2) / 2) y(n) = x(2 * n); % This is the matrix that holds the time scaled signal end %-------------------------------------------------------------------------- % Part 1 End: Write all three songs into a single sound file %-------------------------------------------------------------------------- total = [x, x2, y]; % This combines all three parts into one matrix sound(total, FS); % This plays all three parts at once wavwrite(total, 'SmokeOnTheWater_MichaelJames.wav'); % Writes the sound file to a .wav %-------------------------------------------------------------------------- % Part 2: Reversal of Beetles Song %-------------------------------------------------------------------------- [original, fs] = wavread('beatles.wav'); % Reads the original "Beatles.wav" file with a sampling rate of fs reversed = flipud(original); % Reverses the original matrix, thus reversing the song wavwrite(reversed,fs,'BeatlesReversed_MichaelJames.wav'); % Writes the reversed file to a .wav file