- #1
Divergent13
- 48
- 0
Dear Members,
I am trying to apply a windowing function to a group of notes that I have created in MATLAB.
For example, a piecewise linear function that looks like this:
[img=http://img168.imageshack.us/img168/2058/adsrenvelopepg0.th.jpg]
(No specific slopes defined).
%I first define the sampling frequency.
Fs = 8000;
%Define n.
n1 = [0:(1/Fs):(1/2)]
n2 = [0:(1/Fs):(1/4)]
n3 = [0:(1/Fs):(1)]
%Create the notes.
note1 = sin(2*pi*220*n1);
note2 = sin(2*pi*220*n2);
note3 = sin(2*pi*(220*(2^(7/12))*n2);
note3 = sin(2*pi*(220*(2^(7/12)))*n2);
note4 = sin(2*pi*(220*(2^(2/12)))*n2);
note5 = sin(2*pi*(220*(2^(3/12)))*n2);
note6 = sin(2*pi*220*n3);
%Generate 0.25 second rest.
rest = zeros(1,(Fs/4));
%Generate song.
song = [note1 rest note2 rest note3 rest note3 rest note3 rest note4 rest note5 rest note4 rest note6 rest];
This part works... and the song is heard with the appropriate rest.
Now, if I want to apply an ADSR envelope to a note, I tried this:
A = linspace(0, 1, 0.1*(Fs));
D = linspace(1, 0.8, 0.15*(Fs));
S = linspace(0.8, 0.8, 0.6*(Fs));
R = linspace(0.8, 0, 0.15*(Fs));
%I then concatenate
ADSR = [A D S R];
%Then I try applying the envelope to a note
newnote1 = ADSR .* note1;
But I am given an error saying the Matrix dimensions do not agree. Does anyone happen to know how I can fix this problem? I am rather new to Matlab in general so I am having difficulty using any other command to properly apply the ADSR envelope with the note.
Thank you kindly in advance for your response.
I am trying to apply a windowing function to a group of notes that I have created in MATLAB.
For example, a piecewise linear function that looks like this:
[img=http://img168.imageshack.us/img168/2058/adsrenvelopepg0.th.jpg]
(No specific slopes defined).
%I first define the sampling frequency.
Fs = 8000;
%Define n.
n1 = [0:(1/Fs):(1/2)]
n2 = [0:(1/Fs):(1/4)]
n3 = [0:(1/Fs):(1)]
%Create the notes.
note1 = sin(2*pi*220*n1);
note2 = sin(2*pi*220*n2);
note3 = sin(2*pi*(220*(2^(7/12))*n2);
note3 = sin(2*pi*(220*(2^(7/12)))*n2);
note4 = sin(2*pi*(220*(2^(2/12)))*n2);
note5 = sin(2*pi*(220*(2^(3/12)))*n2);
note6 = sin(2*pi*220*n3);
%Generate 0.25 second rest.
rest = zeros(1,(Fs/4));
%Generate song.
song = [note1 rest note2 rest note3 rest note3 rest note3 rest note4 rest note5 rest note4 rest note6 rest];
This part works... and the song is heard with the appropriate rest.
Now, if I want to apply an ADSR envelope to a note, I tried this:
A = linspace(0, 1, 0.1*(Fs));
D = linspace(1, 0.8, 0.15*(Fs));
S = linspace(0.8, 0.8, 0.6*(Fs));
R = linspace(0.8, 0, 0.15*(Fs));
%I then concatenate
ADSR = [A D S R];
%Then I try applying the envelope to a note
newnote1 = ADSR .* note1;
But I am given an error saying the Matrix dimensions do not agree. Does anyone happen to know how I can fix this problem? I am rather new to Matlab in general so I am having difficulty using any other command to properly apply the ADSR envelope with the note.
Thank you kindly in advance for your response.
Last edited: