41
Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Embed Size (px)

Citation preview

Page 1: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Media Computation in JES(Chapter 2)

DM Rasanjalee Himali

Page 2: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

JES Functions

• Some JES functions (NOT Python)• A bunch of functions are pre-defined in JES for

sound and picture manipulations– pickAFile()– makePicture()– makeSound()– show()– play()

• Some of these functions accept input values

Page 3: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

What to do to show a picture

• 1. Find a file with a picture.• 2. Pick it.• 3. Get the bytes from that file into memory

and label it as a type: “picture”• 4. Show the picture

Page 4: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

pickAFile()

file = pickAFile() • Displays list of directories and

files in a window• Accept no inputs• Returns a string which is the

name of file that you picked• This does NOT load the file into

memory• Python is case sensitive:

– pickafile() or PickAFile() will not work!

Page 5: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• The pickAFile() function brings up a ‘file selector dialog’

• You’ll choose a file and hit the ‘Open’ button

• When you pick your file, the pickAFile() function notes the ‘path name/ address’ (as a string) of your file.

Page 6: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• We will stick to JPEG and WAV files to avoid too much complexity.

>>> print fileF:\UNG\Python\mediasources-py2ed\mediasources\beach.jpg

Full file name

Path seperator

Path to the file Base file name

File extension

File Extension Type Description

.jpg JPEG file Contains a picture

.Wav WAV file Contains sounds

Page 7: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Showing a Picture

• pickAFile() does not load file into the memory.• To load the file into the memory we should tell JES to

read the file and make a picture from it using function makePicture:

• makePicture requeres one parmeter: the file name.>>> pic = makePicture(file)Picture, filename F:\UNG\Python\mediasources-py2ed\mediasources\beach.jpg height 480 width 640

• Now we made a picture with hight 480 and width 640• How do we see the picture?

Page 8: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• To see the picture you made we need another function: show

• show takes a parameter : picture (referenced by pic in our example)>>>show(pic)

Page 9: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• To summarize, the code:>>>file = pickAFile()>>>pic = makePicture(file)>>>show(pic)

• Another way to do this is to do it all at once because output from one function can be used as input to another function:>>> show(makePicture(pickAFile)))

Page 10: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• What is the return type of function show?• Try printing:>>> print show(pic)none• The output is none, indicating that the

function does not return an output.• Functions in Python does not have to return a

value

Page 11: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Playing a Sound

• We can replicate the entire process of showing picture with sounds.– We still use pickAFile() to find the file and get its file

name. This time we pick a file with .wav extension.– makeSound(filename) creates and returns a sound

object, from the WAV file at the filename– play(sound) makes the sound play (but doesn’t wait

until it’s done). It takes file name as input.– blockingPlay(sound) waits for the sound to finish

Page 12: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Here are the same steps we saw with making pictures, this time used to play sound:

>>>file = pickAFile()>>> print fileF:\UNG\Python\mediasources-py2ed\mediasources\helloWorld.wav>>> sound = makeSound(file)>>> print soundSound file: F:\UNG\Python\mediasources-py2ed\mediasources\

helloWorld.wav number of samples: 44033>>> play(sound)

Page 13: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• Download the mediasouce zip file at : http://coweb.cc.gatech.edu/mediaComp-teach#Python

• Extract it to a folder. This contains sample .jpg, .wav etc files you can work with.

• Try the previous code in both .wav and .jpg files

Page 14: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Naming values

• As we saw in previous examples, we name values/data using = operator (E.g. file, pic)

• Computers do not remember things unless we name them

• Creating a name for a value is called “defining a variable”

• A variable is a unit of data with an identifier, which is held in your computer's memory

• It can be changed by putting a new value into it or modifying the value that is already there.

Page 15: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• We can check the value of a variable using print:>>>myVariable = 12>>>print myVariable12>>>anotherVariable = 34.5>>>print anotherVariable34.5>>>myName = “Mark”>>>print mayNameMark

Page 16: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• We can use names more than once:>>>print myVariable12>>> myVariable = “Hello”>>> print myVariableHello

• The binding (or the association) between the names and the data only exists until – (a) the name gets assigned to something else OR– (b) you quit JES

Page 17: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• What is the output of the following?>>>myVariable = 12>>>print myVariable*448>>>myOtherVariable = “12”>>>print myOtherVariable12121212

• Data have encodings/types. How data act in expressions depend on their types. E.g. integer 12 and the string 12 act differently for multiplication.

Page 18: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Choosing Good Identifiers

• Identifiers are the names used to identify things in your code.

• An identifier is just a name label• So it could refer to more or less anything

including commands

Page 19: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Python Keywords

• The following words are the keywords, which form the basis of the Python language.

• You are not allowed to use these words to name your variables, because these are the core commands of Python.

Page 20: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Naming Rules

• Variable names must begin with either a letter or an underscore.

• Although they can contain numbers, they must not start with one.

• You should not use anything other than letters, numbers, or underscores to identify your variables.

• Python is generally case-sensitive, which means that lowercase and uppercase letters are treated as being different characters; therefore, myvariable, MYVARIABLE, and MyVariable are interpreted as completely different entities.

Page 21: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• We can assign names(i.e. variable names) to the results of a functions.

• E.g.>>> file = pickAFile()>>> print fileF:\UNG\Python\mediasources-py2ed\mediasources\barbara.jpg>>>pic = makePicture(file)>>> print picPicture, filename F:\UNG\Python\mediasources-py2ed\mediasources\barbara.jpg height 294 width 222

• Note: its not necessary to use print every time we execute something.

variables

Page 22: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Making a program

• Defining functions:– Just like naming values, we can name programs.– We can name a series of commands and use the

name to whenever we want the commands to be executed.

– In Python, the name we define is called a function.

– A program in Python is a collection of functions that perform a useful task

Page 23: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• You need to use the keyword def to define a new function.

• Syntax:def <functionName> ( <input list seperated by commas>):

• Then we create a collection of commands by defining a block:– The list of commands to be executed when function

is called are listed after this line one after the other (indented to show they belong to this function)

Page 24: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Saving and Executing Your Programs

• The interactive interpreter makes it possible to test solutions and to experiment with the language in real time.

• However, everything you write in the interactive interpreter is lost when you quit.

• What you really want to do is write programs that both you and other people can run.

Page 25: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• First, you need a text editor. If you are already using JES, you’re in luck: JES provides a nice text editor area for you to write our programs.

• Simply create a new editor window with File New ➤Program. Whew!

• In CSCI1301 you’ll put your instructions in the definition of a function when writing programs.

Page 26: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Now select File Save ➤Program As to save your program (which is, in fact, a plain text file).

• Be sure to put it somewhere

where you can find it later on.

• Give your file any reasonable name, such as hello.py. The .py ending is important.

Page 27: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Got that? Don’t close the window with your program in it. If you did, just open it again (File

Open Program). ➤• Now you need to load

by pressing button “Load Program” .

Page 28: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• You can execute/run your program by calling the method hello in command window:

Page 29: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Sometimes, you’ll have a clear purpose for the function, in which case you can name the function accordingly, like “triArea()” or “reverseText()”, but for experimenting or other general purposes, you can call it “main()”, as in “main function”.

• E.g. def main():

print "Hello world!"

Page 30: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Notice also that the print statement is indented. def main():

print "Hello world!"• In Python, indenting specifies the “scope” of different

chunks of your code. • Consider it this way: everything indented after a first,

unindented (or less indented) line ‘belongs’ to that line. • So above, the print statement belongs to the definition of

the function called ‘main()’. • If you wanted ‘main()’ to accomplish multiple things, they’d

all have the same amount of indent as the print statement.

Page 31: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• Write a program showPicture.py to allow user to pick a picture and show it. Call the function that does this pickAndShow.

• Answer:def pickAndShow():

myFile = pickAFile()myPict = makePicture(myFile)show(myPict)

Box indicates a block in programYou will know your indentation is Right when all the commands you expect to be in the block is in the box

Page 32: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

• Now save your program and load it using the “Load Program” button.

• Now you can call it in your command area:

• We can similarly define our second program to pick and play sound.

Page 33: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

The Most Common JES Bug:Forgetting to Load

Your function does NOT exist for JES until you load itBefore you load it, the

program is just a bunch of characters.

Loading encodes it as an executable function

Save and Save AsYou must Save before

LoadingYou must Load before you

can use your function

An “Unloaded” function doesn’t exist yet.

Page 34: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

What if you forget your variable names? showVars()

Page 35: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• Write a program playSound.py to allow user to pick a sound and play it. Call the function that does this pickAndPlay.

• Answer:def pickAndPlay():

myFile = pickAFile()mySound = makeSound(myFile)play(mySound)

Page 36: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

Show a specific picture

def showPicture():myFile = “c:/mediasources/barbara.jpg”myPict = makePicture(myFile)show(myPict)

Page 37: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

What to do about Windows filenames?

• Python doesn’t like you to use “\” in filenames,like “C:\mediasources\barbara.jpg”

• What to do?– Option #1: Put r in front of Windows filenames:

r“C:\mediasources\pic.jpg”– Option #2: Use forward slashes. Python will

translate it for you:“C:/mediasources/pic.jpg”

Page 38: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

A function that takes input

def playNamed(myfile): mysound = makeSound(myfile) play(mysound)

def showNamed(myfile): mypict = makePicture(myfile) show(mypict)

What functions do you need? What should be their input?

In general, have enough to do what you want, easily, understandably, and in the fewest commands.

We’ll talk more about what that means later.

How do you call such a function?

Page 39: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

QUESTION

• Write a program with a function playAndShow that plays a sound and shows a picture at the same time. The file names for sound file and picture files should be input parameters to the function

def plaAndShow(sFile, pFile)mySound = makeSound(sFile)myPict = makePicture(pFile)play(mSound)show(myPict)

Page 40: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

What can go wrong?

• Did you use the exact same names (case, spelling)?

• All the lines in the block must be indented,and indented the same amount.

• Variables in the command area don’t exist in your functions, and variables in your functions don’t exist in the command area.

• The computer can’t read your mind.– It will only do exactly what you tell it to do.

Page 41: Media Computation in JES (Chapter 2) DM Rasanjalee Himali

MOST IMPORTANT THING TO DO TO PASS THIS CLASS!

• DO THE EXAMPLES!• Try them out for yourself. Try to replicate

them. Understand them– EVERY WEEK, TYPE IN AT LEAST TWO OF THE EXAMPLES FROM CLASS

• To understand a program means that you know why each line is there.

• You will encounter all the simple-but-confusing errors early—BEFORE you are rushing to get homework done!!