Before we can create our groove, we need to make functions that will allow us to modify the sound signals in various ways. After all, wouldn't it be boring to make a groove out of the same note over and over again? Let's create some functions that will let us time scale, reverse, delay, fade, and repeat a sound, and mix two sounds together.
There are many functions built into MATLAB. One that will be useful here is fliplr, which is a one step way of time reversing a signal. Try this with the bell sound.
Another function that we created for you is timescale.m, which you can use to speed up or slow down a signal. Download it and give it a try. Notice that it also changes the pitch of a sound -- why?
Download the function fade.m, make sure you save it as fade.m. Start MATLAB, and go to the directory where you saved the function. You can see and change your current directory at the top of the MATLAB screen. Enter "help fade" at the MATLAB prompt. If you did everything correctly, you should see the help text (in the .m file) in response
to help fade. Notice that we've now added a new command to MATLAB
that can be used as if it were a built-in function.
Enter the following commands at the MATLAB prompt:
>> time = 0:.01:1;
>> y = cos(time .* pi .* 25);
>> plot(time, fade(y));
You can see in the plot that fade does indeed fade-out the cosine wave. You can use this function on audio signals as well.
-
Modify the fade function so that you can adjust the slope of the ramp which will affect the level of the fade. Use the variable
level (which is already in the parameter list for you in the function) to represent the strength of the fade as a decimal fraction. The function should make sure that the value is between 0 and 1.
-
Like in the code example above, plot your function with the cosine wave to see its effect. Throughout this lab you may find it helpful to plot functions (use the plot command).
-
Demonstrate to the TA that your fade function works.
-
Create a function that repeats a sound N times. Use a
for loop for this. Inside the for loop you will need to concatenate sound signals. For example, if you have two vectors x and y, you can concatenate them like this:
>> x = [1 4 2 2 3];
>> y = [5 8 3 9 0];
>> x = [x y];
The first line of your function might look like this:
function [ out ] = repeat(in, N)
-
Demonstrate your repeater using an N specified by the TA.
-
Optional: Add an argument that let's you insert silence in between each repetition.