Week 7 - Wednesday CS 121.

Slides:



Advertisements
Similar presentations
Georgia Institute of Technology Introduction to Processing Digital Sounds.
Advertisements

Part A Multimedia Production Rico Yu. Part A Multimedia Production Ch.1 Text Ch.2 Graphics Ch.3 Sound Ch.4 Animations Ch.5 Video.
Int 2 Multimedia Revision. Digitised Sound Analogue sound recorded from person, or real instruments.
CMPS1371 Introduction to Computing for Engineers PROCESSING SOUNDS.
Week 7 - Friday.  What did we talk about last time?  Array examples.
The frequency spectrum
Digital audio recording Kimmo Tukiainen. My background playing music since I was five first time in a studio at fourteen recording on my own for six months.
Week 6: Arrays 1.  Loops are great  But, without a way to talk about a group of values, we can’t get the full potential out of a loop  Enter: the array.
1 CS 177 Week 15 Recitation Slides Review. Announcements Final Exam on Sat. May 8th  PHY 112 from 8-10 AM Complete your online review of your classes.
Week 8: Audio Processing 1.  Light and sound are both transmitted in waves 2.
Introduction to Sound Sounds are vibrations that travel though the air or some other medium A sound wave is an audible vibration that travels through.
Representation of Data in Computer Systems
Week 7 - Wednesday.  What did we talk about last time?  Introduction to arrays  Lab 6.
Problem Solving with Data Structures using Java: A Multimedia Approach Chapter 5: Arrays: A Static Data Structure for Sounds.
Computing with Digital Media: A Study of Humans and Technology Mark Guzdial, School of Interactive Computing.
COMP Representing Sound in a ComputerSound Course book - pages
COSC 1P02 Introduction to Computer Science 4.1 Cosc 1P02 Week 4 Lecture slides “Programs are meant to be read by humans and only incidentally for computers.
More Meaningful Jargon Or, All You Need to Know to Speak Like a Geek Sound.
CS107 References and Arrays By Chris Pable Spring 2009.
Georgia Institute of Technology Introduction to Processing Digital Sounds part 1 Barb Ericson Georgia Institute of Technology Sept 2005.
Intro-Sound-part1 Introduction to Processing Digital Sounds part 1 Barb Ericson Georgia Institute of Technology Oct 2009.
Week 7 - Friday.  What did we talk about last time?  Array examples  Sound.
Week 15 – Wednesday.  What did we talk about last time?  Review up to Exam 1.
CS 5JA Introduction to Java Graphics One of the powerful things about Java is that there is.
Week 7 - Wednesday.  What did we talk about last time?  Introduction to arrays  Lab 6.
Week 10 - Wednesday.  What did we talk about last time?  Method example  Roulette simulation  Types in Java.
Week 10 - Friday.  What did we talk about last time?  References and primitive types  Started review.
Week 6 - Friday.  What did we talk about last time?  Loop examples.
1 CS 177 Week 7 Recitation Slides Modifying Sounds using Loops + Discussion of some Exam Questions.
The Physics of Music Why Music Sounds the Way it Does, and Other Important Bits of Information.
Comp1004: Loops and Arrays I Whiles, For and Arrays[]
Chapter 15 Recording and Editing Sound
3.3 Fundamentals of data representation
Week 2 - Wednesday CS 121.
Linear Algebra Review.
Week 3 - Wednesday CS 113.
Why musical instruments have characteristic sounds
Single Dimensional Arrays
Week 13: Searching and Sorting
Week 7 - Friday CS 121.
Multimedia Systems and Applications
Week 13 - Monday CS 121.
What is a pan flute and how does it work?
Week 15 – Wednesday CS 121.
Chapter 8 Arrays Objectives
Introduction to Digital Audio
Processing Sound Ranges part 3
Pitch.
Arrays Part 1 Topic 19 - Stan Kelly-Bootle
CS 177 Week 15 Recitation Slides
Introduction to Digital Audio
Introduction to Digital Audio
Week 9 – Audio Processing
Introduction to Digital Audio
Digital Music Scott Bennett 1/3/2019.
Chapter 4: Representing sound
Topics discussed in this section:
int [] scores = new int [10];
Introduction to Processing Digital Sounds
Building Java Programs
ITEC2110, Digital Media Chapter 1 Background & Fundamentals
Processing Sound Ranges
Suggested self-checks: Section 7.11 #1-11
Chapter 9: More About Data, Arrays, and Files
Processing Sound Ranges part 3
Introduction to Digital Audio
CS1315: Introduction to Media Computation
Creating Sounds and MIDI
Week 7 - Monday CS 121.
Presentation transcript:

Week 7 - Wednesday CS 121

Last time What did we talk about last time? Introduction to arrays Computing variance

Questions?

Project 3

Arrays

Instantiation of an array 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 ints int[] list; list = new int[100];

Accessing elements of an array 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]);

Length of an array 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

Array Examples

Cards 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

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

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

Shuffling Cards 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; }

Searching 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

Sound

Sound 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

Frequency 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 Note Frequency A 440 B 493.88 C 523.25 D 587.33 E 659.26 F 698.46 G 783.99 880

Example of frequency change 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

Amplitude 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

Example of amplitude change We can take a sound: And make the sound with half the amplitude: The frequency is exactly the same, but the sound is half as loud

Real sounds 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:

Digital Sampling

Sampling 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

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

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

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

StdAudio Class

Purpose of the StdAudio class 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

StdAudio methods 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 Method Use double[] read(String file) Read a WAV file into an array of doubles void save(String file, double[] input) Save an array of doubles (samples) into a WAV file void play(String file) Play a WAV file void play(double[] input) Play an array of doubles (samples)

StdAudio example 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); -.9 -.7 -.6 -.4 -.2 -.1 .1 .2 .3 .4 .5 .6

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

Generating sound with StdAudio 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);

Breaking a sound into parts 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);

Upcoming

Next time… More array examples Lab 7

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