Presentation is loading. Please wait.

Presentation is loading. Please wait.

Week 7 - Wednesday.  What did we talk about last time?  Introduction to arrays  Lab 6.

Similar presentations


Presentation on theme: "Week 7 - Wednesday.  What did we talk about last time?  Introduction to arrays  Lab 6."— Presentation transcript:

1 Week 7 - Wednesday

2  What did we talk about last time?  Introduction to arrays  Lab 6

3

4

5

6

7  When you declare an array, you are only creating a variable that can hold an array  At first, it holds nothing, also know as null  To use it, you have to create an array, supplying a specific size:  This code creates an array of 100 int s int[] list; list = new int[100]; int[] list; list = new int[100];

8  You can access an element of an array by indexing into it, using square brackets and a number  Once you have indexed into an array, that variable behaves exactly like any other variable of that type  You can read values from it and store values into it  Indexing starts at 0 and stops at 1 less than the length list[9] = 142; System.out.println(list[9]); list[9] = 142; System.out.println(list[9]);

9  When you instantiate an array, you specify the length  Sometimes (like in the case of args ) you are given an array of unknown length  You can use its length member to find out int[] list = new int[42]; int size = list.length; System.out.println("List has " + size + " elements"); //prints 42 int[] list = new int[42]; int size = list.length; System.out.println("List has " + size + " elements"); //prints 42

10

11  Recently, we showed you how to add a set of numbers together as they were input by a user  Although this is a useful technique, not every operation is possible  We can find the sum or the average of the numbers because we only need to see the numbers once  What operation needs to see the numbers more than once?

12  Variance is a measurement of how spread out numbers are from their mean  To calculate it, you have to calculate the mean first  The formula is:  Where N is the number of elements, x i is the i th element, and is the mean

13  Given an array of doubles called numbers, here’s the code for finding their variance double average = 0; double variance = 0; double temp; for( int i = 0; i < numbers.length; i++ ) average += numbers[i]; average /= numbers.length; for( int i = 0; i < numbers.length; i++ ) { temp = numbers[i] – average; variance += temp*temp; } variance /= numbers.length; double average = 0; double variance = 0; double temp; for( int i = 0; i < numbers.length; i++ ) average += numbers[i]; average /= numbers.length; for( int i = 0; i < numbers.length; i++ ) { temp = numbers[i] – average; variance += temp*temp; } variance /= numbers.length;

14  We can represent a deck of cards as an array of 52 items  One easy way is to make each item a String giving the name of the card  We can extend last time's lab and store each of these names in an array

15  Swapping the values of two variables is a fundamental operation in programming  It is going to become more important in arrays because now the order of variables has become important  The simplest way to swap two variables involves using a third variable as a temporary location

16  Here is an example of swapping two String s indexed i and j in an array of String s called array int i = in.nextInt(); int j = in.nextInt(); int temp; temp = array[i]; array[i] = array[j]; array[j] = temp; int i = in.nextInt(); int j = in.nextInt(); int temp; temp = array[i]; array[i] = array[j]; array[j] = temp;

17  Using the swap code, we can do a random shuffling of a deck  To do so, we go through each element of the array, and randomly swap it with any of the later elements for( int i = 0; i < n; i++ ) { exchange = i + (int)(Math.random() * (n - i)); temp = deck[i]; deck[i] = deck[exchange]; deck[exchange] = temp; } for( int i = 0; i < n; i++ ) { exchange = i + (int)(Math.random() * (n - i)); temp = deck[i]; deck[i] = deck[exchange]; deck[exchange] = temp; }

18  Searching through an array is an important operation  The simplest way to do so is just linear search: check every element in the array  Searching and sorting are really key to all kinds of problems  We’ll cover both topics in depth in a few weeks

19

20  Like light, sound is a wave  For those physics buffs here, sound is usually transmitted as a compression wave  In contrast, light is a transverse wave  It doesn’t really matter, we can pretend that sound is a transverse wave

21  The human ear can hear between about 12 Hz and 20,000 Hz  The higher the frequency of the wave, the higher the frequency of the note  Note (ha, ha) that the A an octave above A440 has twice the frequency  Each half-step is an increase in the frequency by a factor of about 1.06 NoteFrequency A440 B493.88 C523.25 D587.33 E659.26 F698.46 G783.99 A880

22  We can take a sound:  And reproduce that sound at double the frequency:  Notice that we have to add twice as much information to have the sound fill the same amount of time

23  The amplitude of a wave is the distance from the trough of a wave to its peak  In sound, amplitude is a measure of volume  The larger the amplitude, the louder the sound Amplitude

24  We can take a sound:  And make the sound with half the amplitude:  The frequency is exactly the same, but the sound is half is loud

25  Something that looks like a sine wave is called a pure tone  No real instruments play anything like that  Even the purest real sound has overtones and harmonics  Real sound is the result of many messy waves added together:

26

27  On a computer, we cannot record a wave form directly  As usual, we have to figure out a way to store a wave as a series of numbers  We are going to use these numbers to approximate the heights of the wave at various points

28  As we all know by now, Hertz (Hz) is a unit that means a number of times per second  Equivalent to Hz is s -1  We are going to break down the wave into lots of slices  We are going to have 44,100 slices in a second  Thus, we are slicing at 44,100 Hz

29  We slice up a wave and record the height of the wave  Each height value is called a sample  By getting 44,100 samples per second, we get a pretty accurate picture of the wave

30  There are many different formats for sampling audio  In our system, each sample will be recorded as a double  The minimum value of a sample will be -1.0 and the maximum value of a sample is 1.0  A series of samples with value 0.0 represents silence  Our samples will be stored in an array

31

32  Audio data on Windows machines is sometimes stored in a WAV file  A WAV file is much simpler than an MP3 because it has no compression  Even so, it contains two channels (for stereo) and can have many different sample rates and formats for recording sound  The StdAudio class lets you read and write a WAV file easily and always deal with a single array of sound, sampled at 44,100 Hz

33  Everything you’d want to do with sound:  To do interesting things, you have to manipulate the array of samples  Make sure you added StdAudio.java to your project before trying to use it MethodUse double[] read(String file) Read a WAV file into an array of double s void save(String file, double[] input) Save an array of double s (samples) into a WAV file void play(String file) Play a WAV file void play(double[] input) Play an array of double s (samples)

34  Let’s load a file into an array:  If the song has these samples:  Perhaps samples will contain: String file = "song.wav"; double[] samples = StdAudio.read(file); String file = "song.wav"; double[] samples = StdAudio.read(file); -.9-.7-.6-.4-.2-.1.1.2.3.4.5.6.5.4.3.20-.2-.4

35  With the audio samples loaded into the array named samples, we can play them as follows: StdAudio.play(samples);

36  Or, we could generate sound from scratch with StdAudio  This example from the book creates 1 second of the pitch A440: double[] sound = new double[StdAudio.SAMPLE_RATE + 1]; for( int i = 0; i < sound.length; i++ ) sound[i] = Math.sin(2 * Math.PI * i * 440 / StdAudio.SAMPLE_RATE); StdAudio.play(sound); double[] sound = new double[StdAudio.SAMPLE_RATE + 1]; for( int i = 0; i < sound.length; i++ ) sound[i] = Math.sin(2 * Math.PI * i * 440 / StdAudio.SAMPLE_RATE); StdAudio.play(sound);

37  What if we wanted to play the second half of a sound followed by the first half?  I know, why would we want to do that? double[] samples = StdAudio.read(file); double[] switched = new double[samples.length]; for(int i = 0; i < samples.length/2; i++ ) switched[i + samples.length/2] = samples[i]; for(int i = samples.length/2; i < samples.length; i++ ) switched[i - samples.length/2] = samples[i]; StdAudio.play(switched); double[] samples = StdAudio.read(file); double[] switched = new double[samples.length]; for(int i = 0; i < samples.length/2; i++ ) switched[i + samples.length/2] = samples[i]; for(int i = samples.length/2; i < samples.length; i++ ) switched[i - samples.length/2] = samples[i]; StdAudio.play(switched);

38

39

40  Finish StdAudio  Lab 7

41  Keep reading Chapter 6 of the textbook  Start working on Project 3


Download ppt "Week 7 - Wednesday.  What did we talk about last time?  Introduction to arrays  Lab 6."

Similar presentations


Ads by Google