Introducing Computer Programming with Multimedia Barb Ericson

advertisement
Introducing Computer
Programming with
Multimedia
Barb Ericson
Institute for Computing Education
Georgia Institute of Technology
ericson@cc.gatech.edu
Computer Science Crisis
• 40% drop in majors since 2001 Nationwide
– Up to 60% drop in some places
• Percentage of women is down to about
12%
– From a high of 30% in the 1980s
• Never attracted many African Americans,
Hispanics, Native Americans
Why the Decline?
• Dot com crash in 2001
– Loss of jobs
• AP Exam switched from C++ to Java
– Many schools quit teaching AP Computer Science
• Visual Basic changed
– In .net to be object-oriented
• Perceptions of Computer Science
– boring, antisocial, not creative, and just programming
Looming Shortage
• Only a few jobs have gone overseas
– About 2-3%
• We have recovered from the dot com
crash
– There are now more jobs in this area than in
2001
• Computing jobs are some of the fastest
growing
– US Dept of Labor predicts 45.93% growth
Reversing the Trend
• We need to get more students interested
in computer science
– Not drive them away
• We need to appeal to a diverse group of
students
– Not just geeks
• All students need to have some
understanding of computer science
– Our society relies on technology
Our Solution
• Use multimedia projects to introduce
computing concepts
– Pictures, sounds, movies, text
• Use open-ended projects to encourage
creativity
– Create an image collage, create a sound
collage, create a movie
• Make computing social
– Encourage students to show off their work
Choice of Languages
• Python
– Used by many companies: IL&M, Google, Nextel, etc.
– Easier syntax than many languages
– Can use to teach functional, procedural, or objectoriented programming
– Used as a scripting or extension language for many
applications
– Growing in popularity
• Java
– Popular language used for AP CS
Digitizing Pictures
• We digitize pictures into
lots of little dots
• Enough dots and it looks
like a continuous whole to
our eye
• Each picture element is
referred to as a pixel
– Each pixel knows its color
– It also knows where it is in
its picture
Encoding Color: RGB
• In RGB, each color has
three component colors:
– Red, Green, and Blue
• In most computer-based
models of RGB, a single
byte (8 bits) is used for
each
– So a complete RGB color
is 24 bits, 8 bits of each
– 0,0,0 is black
– 255,255,255 is white
– 255,0,0 is red
Make and Show a Picture
Use pickAFile function
To select a picture file
(ends in .jpg)
Use makePicture(file)
to create the picture
Use show(picture) to
display the picture
Use MediaTools
• Click on MediaTools
• Select the picture to
explore
• Move the cursor while
holding down the left
mouse button
– To see x,y,r,g,b
• Click on zoom
– To zoom in or out
Creating a Python Function
Define
a
function
Load
the
function
Try the
function
Rules for Python Functions
• Use the keyword def
to define a function
def pickAndShow():
myFile = pickAFile()
– Followed by the
myPicture =
function name
makePicture(myFile)
• Use parentheses after
show(myPicture)
the name
– Name parameters
• End with a colon
• Indent the body of the
function
Using a Loop
def decreaseRed(picture):
for p in getPixels(picture):
value = getRed(p)
setRed(p,value * 0.5)
More Picture Functions
def greyscale(picture):
for p in getPixels(picture):
redness=getRed(p)
greenness=getGreen(p)
blueness=getBlue(p)
luminance=(redness+blueness+greenness)/3
setColor(p,
makeColor(luminance,luminance,luminance))
def negate(picture):
for px in getPixels(picture):
red=getRed(px)
green=getGreen(px)
blue=getBlue(px)
negColor=makeColor(255-red,255-green,255blue)
setColor(px,negColor)
How Sound Works:
• Sounds are waves of
air pressure
– Sound comes in
cycles
– The frequency of a
wave is the number of
cycles per second
(cps), or Hertz
– The amplitude is the
maximum height of the
wave
Volume and Pitch
• Our perception of volume is related
(logarithmically) to changes in amplitude
– If the amplitude doubles, it’s about a 3 decibel (dB)
change.
• Our perception of pitch is related
(logarithmically) to changes in frequency
– Higher frequencies are perceived as higher pitches
– We can hear between 5 Hz and 20,000 Hz (20 kHz)
– A above middle C is 440 Hz
Digitizing Sound
• We can estimate the
sound curve
– Analog-to-digital
conversion (ADC) will
give us the amplitude
at an instant as a
number: a sample
– How many samples do
we need?
• 2 x max frequency
• CD quality is 44,100
samples per second
Digitizing sound in the computer
• Each sample is stored as a number
– 16 bits, 216 = 65,536 combinations
– But we want both positive and negative
values
• To indicate compressions and rarefactions.
• Each sample can be between -32,768 and
32,767
Exploring a Sound
Use
MediaTools
to explore
a Sound
Working with Sounds
• We’ll use getSamples to get all the sample
objects out of a sound
– Use getSample to get the value from a Sample obj
• We can also get the value at any index with
getSampleValueAt
• Sounds also know their length (getLength) and
their sampling rate (getSamplingRate)
• Save a sound to a file using
writeSoundTo(sound,”file.wav”)
Decreasing the volume
def decreaseVolume(sound):
for sample in getSamples(sound):
value = getSample(sample)
setSample(sample,value * 0.5)
This works just
like decreaseRed,
but decreasing the
amplitude
(volume) instead
of the red color.
Multimedia Java CS1
• We use DrJava
– A free and easy development environment
– With an interactions pane
• We have created Java classes
– For the students to use and modify
•
•
•
•
•
World
Turtle
Picture
Sound
FileChooser
Java Syllabus
• Introduction to Java
– Math operators, printing results, data types, casting,
relational operators, Strings, variables
• Introduction to Programming
– Creating and naming objects
• Using a turtle and a world
– Creating new Turtle methods
• Draw simple shapes
• Using parameters
Syllabus - Continued
• Modifying Pictures
using Loops
– One-dimensional
arrays
– Use for-each, while,
and for loops to
– Increase/decrease
colors, fake a sunset,
lighten and darken,
create a negative, and
grayscale
Create and Show a Picture
Java Negate Method
/**
* Method to negate the picture
*/
public void negate()
{
Pixel[] pixelArray = this.getPixels();
Pixel pixelObj = null;
int redValue, blueValue, greenValue = 0;
// loop through all the pixels
for (int i = 0; i < pixelArray.length; i++)
Java Negate Method - Cont
{
// get the current pixel
pixelObj = pixelArray[i];
// get the values
redValue = pixelObj.getRed();
greenValue =
pixelObj.getGreen();
blueValue = pixelObj.getBlue();
// set the pixel's color pixelObj.setColor(
new Color(255 - redValue,
255 - greenValue,
255 - blueValue));
}
}
Testing Negate
Syllabus - Continued
• Modifying Pixels in
a Matrix
– Two-dimensional
arrays
– Nested loops
– Copying, mirroring,
blending, rotation,
scaling
Syllabus - Continued
• Conditionally
Modifying Pixels
– Replacing a color,
reducing red-eye,
edge detection,
sepia-toned,
posterize, highlight
extremes, blurring,
background
subtractions,
chromakey
Syllabus - Continued
• Drawing on Pictures
– Using existing Java
classes
• Inheritance
• Interfaces
– Drawing simple
shapes, drawing text,
general copy, general
scale, shearing,
gradient paint, general
blending, clipping
Syllabus - Continued
• Modifying all Samples
in a Sound
–
–
–
–
1D arrays
Loops
Conditional execution
Change volume,
normalizing a sound
(make it as loud as
possible), force to
extremes
Syllabus - Continued
• Modifying Samples
using Ranges
– Loops
– Clipping, splicing,
reversing, mirroring
Syllabus - Continued
• Combining and
Creating Sounds
– Class and private
methods
– Composing
sounds, blending
sounds, changing
frequencies, and
creating echoes
– MP3 and MIDI
Syllabus - Continued
• Creating Classes
– Defining a class
– Overloading constructors
– Creating and initializing an
array
– Creating getters and setters
– Creating a main method
– Javadoc comments
– Using Inheritance
Turtle ConfusedTurtle
Syllabus - Continued
• Creating and Modifying
Text
– Reading from and writing
to files
• Handling Exceptions
– Modifying programs
– Getting text from networks
– Creating random
sentences
– Using text to shift between
media
Syllabus - Continued
• Making Text for the
Web
– Throwing exceptions,
HashMap, Generics,
and Iterators
– Create a web page from
a directory
– Create a web page from
other web pages
– Creating a web page
from a database
Syllabus - Continued
• Encoding,
Manipulating, and
Creating Movies
– Frame-based
animations with simple
shapes and text
– Special effects – fade
out, fake sunset, and
chromakey
Syllabus - Continued
• Speed
– What makes programs
fast?
• Compilers and Interpreters
• Searching
• Algorithms that can’t be
written
– What makes computers
fast?
• Clock rates, Storage, Display
Syllabus - Continued
• Javascript
– Syntax
– User Interfaces
– Multimedia
Multimedia CS2 in Java
• Driving question:
“How did the
wildebeests
stampede in The
Lion King?”
CS2 Ideas
• Teach data structures using multimedia
– Stacks and queues for simulations
– Linked lists of pictures
• Order in linked list is order in scene
• Order in linked list is the layer the picture is in
• Circular linked list for animation
– Linked lists of sounds
• Weave and repeat musical phrases
– Trees of pictures
• Scene graph
– Trees of sounds
• Different traversal gives different result
Examples of Student Work
SoupAudio
Collage
CanonLinkedList of
(MIDI) Music
Results
• Python CS1 is used for non-majors at Georgia
Tech
– Business students went from 49% to 88% pass rate
– Similar results at Gainesville and U.Ill-Chicago
• Java CS1 is used in Georgia High Schools
– Both in an introductory course and in Advanced
Placement courses
– Also used at Dennison and Duke
• Java CS2 is used at Georgia Tech
– Students are transferring into computer science
Why Media Computation?
• Works on nearly all computers
– Unlike Alice which requires newer computers
• Low cost
– Unlike LEGO Mindstorms or other robots
• Students can see (and hear) if their programs work
• Computer Science concepts are introduced to solve
problems
– Looping instead of changing thousands of pixels by hand
• Open-ended assignments allow students to be creative
– Students can use their own media
• Students can publicly share their media artifacts with
others
What’s on the CD
• CS1-Python materials
–
–
–
–
Chapters from the Media Computation book in Python
Course slides
Free Jython Environment for Students (JES)
Instructor Resources
• CS1-Java materials
– Chapters from the Media Computation book in Java
– Course Slides
– Java Classes
What’s on the CD - Continued
• CS2-Java materials
– Course notes
– Course slides
– Java Classes
• DrJava
– Free Development environment for Java
• Mediasources
– Royalty free pictures and sounds
Additional Resources
• Web Site for Media Computation
– http://coweb.cc.gatech.edu/mediaComp-plan
• CS1 Python Book
– Introduction to Computing and Programming in
Python, A Multimedia Approach by Mark Guzdial,
ISBN: 0131176552
• CS1 Java Book
– Introduction to Computing and Programming with
Java, A Multimedia Approach by Mark Guzdial and
Barbara Ericson, ISBN: 0131496980
• CS2 Java Book
– Coming in 2007
Funding Sources
• National Science Foundation
• Georgia Tech's College of Computing
• Georgia’s Department of Education
• Al West Fund
• Toyota Foundation
Download