2011 Sound
<< 2012 GrayImage | APQuestionsTrailIndex | 2011 AttractiveCritter >>
Question 1 from 2011 asks you to write two methods of the Sound class, limitAmplitude and trimSilence.
Click here to see the questions from 2011
Sound.java
public class Sound
{
/** the array of values in this sound; guaranteed not to be null */
private int[] samples;
/** Changes those values in this sound that have an amplitude greater than limit.
* Values greater than limit are changed to limit.
* Values less than -limit are changed to -limit.
* @param limit the amplitude limit
* Precondition: limit >= 0
* @return the number of values in this sound that this method changed
* */
public int limitAmplitude(int limit)
{ /* to be implemented in part (a) */
}
/** Removes all silence from the beginning of this sound.
* Silence is represented by a value of 0.
* Precondition: samples contains at least one nonzero value
* Postcondition: the length of samples reflects the removal of starting silence */
public void trimSilenceFromBeginning()
{ /* to be implemented in part (b) */
}
// There may be instance variables, constructors, and methods that are not shown.
// In fact.. the ones below are written by Fr Chris to make this thing work...
public Sound(int[] a){
samples=a;
}
public String toString(){
String line1="Index->",line2="Value->";
for(int i=0; i<samples.length; i++){
line1+=String.format(" %5d ", i);
line2+=String.format("[%5d]", samples[i]);
}
return line1+"\n"+line2;
}
}
SoundTester.java
public class SoundTester
{
public static void main(String[] args){
int[] a = {40,2532,17,-2300,-17,-4000,2000,1048,-420,33,15,-32,2030,3223};
int[] aResult = {40,2000,17,-2000,-17,-2000,2000,1048,-420,33,15,-32,2000,2000};
int[] b = {0,0,0,0,-14,0,-35,-39,0,-7,16,32,37,29,0,0};
int[] bResult = {-14,0,-35,-39,0,-7,16,32,37,29,0,0};
Sound partA = new Sound(a);
Sound partB = new Sound(b);
Sound partAResult = new Sound(aResult);
Sound partBResult = new Sound(bResult);
System.out.println("Part A Example:\n"+partA);
System.out.println("\nAfter calling limitAmplitude(2000) you should get:\n"+partAResult);
int numChanges = partA.limitAmplitude(2000);
System.out.println("your code produced:\n"+partA);
System.out.println("It should report making 5 changes, your code reported "+numChanges+" changes");
System.out.println("\nPart B Example:\n"+partB);
System.out.println("\nAfter calling trimSilenceFromBeginning() you should get:\n"+partBResult);
partB.trimSilenceFromBeginning();
System.out.println("your code produced:\n"+partB);
}
}
If all is well, the Tester output should look like:
Part A Example: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Value->[ 40][ 2532][ 17][-2300][ -17][-4000][ 2000][ 1048][ -420][ 33][ 15][ -32][ 2030][ 3223] After calling limitAmplitude(2000) you should get: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Value->[ 40][ 2000][ 17][-2000][ -17][-2000][ 2000][ 1048][ -420][ 33][ 15][ -32][ 2000][ 2000] your code produced: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Value->[ 40][ 2000][ 17][-2000][ -17][-2000][ 2000][ 1048][ -420][ 33][ 15][ -32][ 2000][ 2000] It should report making 5 changes, your code reported 5 changes Part B Example: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Value->[ 0][ 0][ 0][ 0][ -14][ 0][ -35][ -39][ 0][ -7][ 16][ 32][ 37][ 29][ 0][ 0] After calling trimSilenceFromBeginning() you should get: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 Value->[ -14][ 0][ -35][ -39][ 0][ -7][ 16][ 32][ 37][ 29][ 0][ 0] your code produced: Index-> 0 1 2 3 4 5 6 7 8 9 10 11 Value->[ -14][ 0][ -35][ -39][ 0][ -7][ 16][ 32][ 37][ 29][ 0][ 0]
