Cse 8a lecture 13
This presentation is the property of its rightful owner.
Sponsored Links
1 / 26

CSE 8A Lecture 13 PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on
  • Presentation posted in: General

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; }.

Download Presentation

CSE 8A Lecture 13

An Image/Link below is provided (as is) to download presentation

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 - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Cse 8a lecture 13

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

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


Cse 8a lecture 13

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;

}

}

Magic Numbers!! (BAD)


Cse 8a lecture 13

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.


Chromakey visit strange new places

  • 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


How will you know which part yellow box or green you are in

  • 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


Your chromakey

Your chromakey

  • 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

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

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.


Chapter 8 sound

Chapter 8: Sound!


Sounds

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

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

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


If the following sound were modified to be louder it would

  • 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


If higher pitch

  • Solo: (30 sec)

  • Discuss: (2 min)

  • Group: (20 sec)

If higher pitch?

compression rarefaction explanation


Making bad music what s wrong with these decisions

  • 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

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

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


How would we fill in this samplesound

  • Solo: (60 sec)

  • Discuss: (2 min)

  • Group: (20 sec)

How would we fill in this SampleSound[]


How would we fill in this samplesound1

  • Solo: (60 sec)

  • Discuss: (2 min)

  • Group: (20 sec)

How would we fill in this SampleSound[]

6


According to nyquist s theorem what is the minimum sampling rate

  • 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


Write code which makes the following changes

  • 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

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

For you to practice

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

    • What does that really sound like?


Summary of concepts

Summary of Concepts

  • Digital representations of sounds

  • Manipulating sounds using loops


Cse 8a lecture 13

Load Phet simulator

TODO

  • Reading for next class: Chapter 9

    • Read more about Sounds.

  • Finish PSA6


  • Login