# CSE 8A Lecture 13 - PowerPoint PPT Presentation

1 / 26

CSE 8A Lecture 13. Reading for next class: Chapter 9 Today’s topics: Sounds! Finish PSA 6: Chromakey ! DUE TUESDAY Interm exam 3 next Thursday. CS Concept: Booleans are values. if ( absValZ < 2.0 ) { return true; } else { return false; }.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

CSE 8A Lecture 13

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

### CSE 8A Lecture 13

• Reading for next class: Chapter 9

• Today’s topics:

• Sounds!

• Finish PSA 6: Chromakey! DUE TUESDAY

• Interm exam 3 next Thursday

### CS Concept: Booleans are values

if ( absValZ < 2.0 )

{

return true;

}

else

{

return false;

}

• Which of the following is equivalent to the above code?

• return absValZ;

• return absValZ < 2.0;

• return absValZ >= 2.0;

• None of these

public static booleaninMset( double real, double imag )

{

double zReal = 0;

double zImag = 0;

double realUpdate;

intnumIter = 0;

double absValZ = Math.sqrt(zReal*zReal + zImag*zImag);

while ( absValZ < 2.0 && numIter < 25 )

{

realUpdate = zReal*zReal-zImag*zImag + real;

zImag = zReal*zImag*2+ imag;

zReal = realUpdate;

absValZ = Math.sqrt(zReal*zReal + zImag*zImag);

numIter++;

}

if ( absValZ < 2.0 )

{

return true;

}

else

{

return false;

}

}

public static booleaninMset( double real, double imag )

{

final double zLimit = 2.0;

final intmaxIter = 25;

double zReal, zImag, realUpdate;

zReal = zImag = 0;

intnumIter = 0;

double absValZ = Math.sqrt(zReal*zReal + zImag*zImag);

while ( absValZ < zLimit&& numIter < maxIter)

{

realUpdate = zReal*zReal-zImag*zImag + real;

zImag = zReal*zImag*2+ imag;

zReal = realUpdate;

absValZ = Math.sqrt(zReal*zReal + zImag*zImag);

numIter++;

}

return ( absValZ < zLimit );

}

finally, no Magic Numbers

Variables declared with the keyword final are constant. i.e. they can’t be modifiedonce they are set.

• Solo: (30 sec)

• Discuss: (2 min)

• Group: (20 sec)

### Chromakey:Visit strange new places

1

2

person (before)

person (after)

background

In order to create modify the person picture so that it looks like the after

picture, from which pictures to you take the pixels in the boxes?

• Box 1 (yellow) from background, box 2 (green) from person

• Box 1 from background, box 2 from background

• Box 1 from person, box 2 from person

• Box 1 from person, box 2 from background

• None of the above

• Solo: (30 sec)

• Discuss: (30 sec)

• Group: (20 sec)

### How will you know which part (yellow box or green) you are in?

• Condition on the Pixel coordinates(not the color)

• Condition on the Pixel colors in background

• Depends on the Pixel colors in person

• Depends on the Pixel colors in background, compared to those at the same coordinates in person

person (before)

background

1

2

• Call two chromakey methods:

• One to replace background

• One to replace tShirt

• If there 2 or more people in the picture, you can call more methods – one to replace each tShirt with a different background if you like

public void chromaKeyBlue(Picture newPicToReplaceBlue,

int blueThreshold)

for (int x = 0; x < this.getWidth(); x++)

for (int y = 0; y < this.getHeight(); y++)

{

//Do some stuff

}

OK to edit pictures before the code runs

### Modified from the lab 5 quiz

for (int x = 0; x < getWidth(); x++) {

for (int y = 0; y < getHeight() / 2; y++) {

Pixel p = getPixel(x, y);

if (x > getWidth() / 2) {

if (p.getRed() == 255 &&

p.getBlue() == 0 && p.getGreen() == 0) {

p.setColor(Color.BLACK);

}

}

}

}

• This code changes any pure red pixels in the top-right quarter of the picture to black.

• This code modifies the top-right quarter of the picture.

• This code loops over pixels in the top half of the array and, if the x coordinate is greater than half the width, checks if the red component is 255 and the blue is 0 and the green is 0, and, if so, sets the pixel to black.

### What are we doing next?

• Chapters 8,9,10: Sound!

• Continue with computational basics from Picture work:

• Iteration/looping, if statements, arrays

• Emphasis on deeper understanding

• Emphasis on Java terminology, features, mental “model” of how code is represented in the execution on the machine

• When working with Sound/SoundSample, compare and contrast to Picture/Pixel examples.

### Sounds

• Sound is a quasiperiodic pattern of waves of air pressure

• Increase in air pressure is a compression

• Decrease in air pressure is a rarefaction

• The strength of the compression and rarefaction is the amplitude of the sound

• The number of compression/rarefaction cycles per second is the frequency of the sound

### Digitizing Sounds

• To process sounds in a computer, sound must be digitized

• A microphone converts instantaneous sound pressure level into voltage (+ voltage for compression, - voltage for rarefaction)

• Then the amplitude of the voltage can be converted to bits (digital integers) with an Analog-to-Digital converter (ADC)

### Digital Sample Rate versus Sample Size

• Size determines max (and min) amplitude

• CD audio: 16 bits per sample (per stereo channel)

• Min: -32,768; Max: 32,767

• Rate is “how often we record an amplitude”

• CD audio: 44,100 samples per second

• A.k.a. 44.1 KHz sample rate

• Solo: (30 sec)

• Discuss: (2 min)

• Group: (20 sec)

### If the following sound were modified to be louder it would

• Have lower frequency and stronger compressions/rarefactions

• Have smaller amplitude and stronger compressions/rarefactions

• Have higher frequency and stronger compressions/rarefactions

• Have larger amplitude and stronger compressions/rarefactions

• None of the above

• Solo: (30 sec)

• Discuss: (2 min)

• Group: (20 sec)

### If higher pitch?

compression rarefaction explanation

• Discuss: (3 min)

### Making bad music: What’s wrong with these decisions?

• I’ve decided that I don’t like the sampling rate and sample size provided by the book authors. Comment on my decision to use…

### Our Representation of Sound

String fileName = FileChooser.pickAFile();

Sound noise = new Sound(fileName);

SoundSample[] noiseArray = noise.getSamples();

noiseArray[3].setValue(0);

intfoo = noiseArray[2].getValue();

SoundSample objects

noiseArray

0

1

2

3

4

5

6

7

8

9

### Our Representation of Sound (Shorthand)

String fileName = FileChooser.pickAFile();

Sound noise = new Sound(fileName);

SoundSample[] noiseArray = noise.getSamples();

noiseArray[3].setValue(0);

intfoo = noiseArray[2].getValue();

noiseArray

0

1

2

3

4

5

6

7

8

9

• Solo: (60 sec)

• Discuss: (2 min)

• Group: (20 sec)

### How would we fill in this SampleSound[]

• Solo: (60 sec)

• Discuss: (2 min)

• Group: (20 sec)

### How would we fill in this SampleSound[]

6

• Solo: (60 sec)

• Discuss: (2 min)

• Group: (20 sec)

### According to Nyquist’s Theoremwhat is the minimum sampling rate?

1.5Hz

3Hz

6Hz

10,000Hz

20,000Hz

• Solo: 45 sec)

• Discuss: (2 min)

• Group: (20 sec)

### Write code which makes the following changes

• Here’s a Sound

String fileName = FileChooser.pickAFile();

Sound noise = new Sound(fileName);

SoundSample[] noiseArray = noise.getSamples();

<<< PICK SOME CODE >>>

inti = 0;

while (i < noiseArray.length)

{

SoundSample sample =

noiseArray[i];

intfoo = sample.getValue();

sample.setValue(foo/2);

}

for (SoundSample sample: noiseArray)

{

intfoo = sample.getValue();

sample.setValue(foo/2);

}

for (inti = noiseArray.length/2; i < noiseArray.length)

{

SoundSample sample = noiseArray[i];

intfoo = sample.getValue();

sample.setValue(foo/2);

}

### What does that code do

• Makes a lower pitched sound during first half of play

• Makes a quieter sound during first half of play

• Makes a lower pitched sound during second half of play

• Makes a quieter sound during second half of play

• For each SoundSample element in the second half of the array it gets the Value and stores that in an int and then sets the Value with something that is half that

### For you to practice

• Write code that reduces the volume of every other SoundSample.

• What does that really sound like?

### Summary of Concepts

• Digital representations of sounds

• Manipulating sounds using loops

### TODO

• Reading for next class: Chapter 9