Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Note(String, double) The main constructor in which the user provides the pitch n

ID: 3880739 • Letter: N

Question

Note(String, double)

The main constructor in which the user provides the pitch name and the duration.

Note(int, double)

An alternate constructor using a MIDI value for the pitch.

An alternate constructor using the (whole) string representation of a note.

int toMidi(String)

String toPitch(int)

Returns the name of this note's pitch.

Returns the MIDI value of this note's pitch.

Returns the duration of this note.

Note stretch(double)

Return a new note with the same pitch but with the duration equal to the product of this note's duration with the argument.

Note transpose(int)

Return a new note transposed higher (or lower, if the argument is negative) by the given interval (number of MIDI values).

String toString()

boolean equals(Object)

Return true if the argument is a note with the same pitch and duration.

int hashCode()

Returns an int associated with this Note. You should compute a unique integer efficiently (without computing string hashcodes).

Recall that equals, hashCode, and toString are overridden from Object.

Can somebody help me to complete the program? (//To do part)

/**
* The Immutable Class Note.
*/
public class Note {

   /** Static Constants */
   public static final int DEFAULT_INTENSITY = 50;
   public static final int REST_PITCH = 128; // First illegal pitch, used for rests.
   private static final int PITCHES_PER_OCTAVE = 12;
   private static final String[] NOTE_LETTERS = {"c","c#","d","d#","e","f","f#","g","g#","a","a#","b"};
   private static final double MIN_DURATION = 1.0/64, // One sixty-fourth
                               MAX_DURATION = 8.0; // Eight whole notes

   /** Fields (Immutable) */
   private final String pitch;
   private final int midiValue;
   private final double duration;

   /**
   * Instantiates a new note based on a string denoting note letter and octave.
   *
   * @param pitch the pitch (e.g. "f6")
   * @param duration the duration
   * @throws NullPointerException if pitch is null
   * @throws IllegalArgumentException if:
   *                1. The pitch parameter is malformed or out of range.
   *                2. The duration parameter is out of range.
   */
   public Note(String pitch, double duration) {
       // TODO
       // Recommended: First implement toMidi(String).
   }

   /**
   * Instantiates a new note based on MIDI value.
   *
   * @param midiValue the MIDI value (e.g. 68)
   * @param duration the duration
   * @throws IllegalArgumentException if:
   *                1. The MIDI pitch parameter is out of range.
   *                2. The duration parameter is out of range.
   */
   public Note(int midiValue, double duration) {
       // TODO
       // Recommended: First implement toPitch(int).
   }

   /**
   * Instantiates a new note from a String matching the format of Note's toString() method.
   *
   * @param note the string representation
   *
   * @throws IndexOutOfBoundsException if parameter isn't in correct format
   * @throws NumberFormatException if duration representation cannot be parsed as double
   * @throws IllegalArgumentException if the elements in the format are not permitted.
   */
   public Note(String note) {
       this(note.split(" x ")[0], Double.parseDouble(note.split(" x ")[1]));
   }

   /**
   * Converts a pitch string to a MIDI value.
   * The pitch "rest" should return {@link #REST_PITCH}.
   *
   * @param pitch the pitch to convert
   * @throws NullPointerException if pitch is null
   * @throws IllegalArgumentException is the String is not a legal pitch
   * @return the MIDI value
   */
   public static int toMidi(String pitch) {
       // TODO
       return -1;
   }

   /**
   * Converts a MIDI value to a pitch string.
   * The MIDI value 128 should return "rest".
   *
   * @param midiValue the MIDI value to convert
   * @throws IllegalArgumentException if the MIDI value is outside of legal range
   * @return the pitch string
   */
   public static String toPitch(int midiValue) {
       // TODO
       return null;
   }

   /**
   * Gets the pitch string of this note.
   *
   * @return the pitch
   */
   public String getPitch() { return pitch; }

   /**
   * Gets the MIDI value of this note.
   *
   * @return the MIDI value
   */
   public int getMidiPitch() { return midiValue; }

   /**
   * Gets the duration of this note.
   *
   * @return the duration
   */
   public double getDuration() { return duration; }
  

   /**
   * Returns a new note with the same pitch, but with its duration multiplied by the parameter.
   *
   * @param factor the amount to scale by
   * @throws IllegalArgumentException if resultant duration is outside of valid range
   * @return the stretched note
   */
   public Note stretch(double factor) {
       // TODO
       return null;
   }

   /**
   * Returns a (new) note with the same duration, but transposed by the given interval.
   *
   * @param interval the interval to transpose by
   * @throws IllegalArgumentException if note is transposed beyond valid bounds [c0, g10]
   * @return the transposed note
   */
   public Note transpose(int interval) {
       // TODO
       return null;
   }

   /**
   * Returns a string representation of this Note.
   * It should follow the format found in songs/InMyLife.song, namely:
   *    For a Note with pitch "g#4" and duration 1.0625 -> "g#4 x 1.0625"
   * NB1: Identical spacing and format are important!
   * NB2: For a "rest" note, the same format must be used (including duration).
   *
   * @return the string representation
   */
   @Override
   public String toString() {
       // TODO
       return null;
   }

   /* (non-Javadoc)
   * @see java.lang.Object#equals(java.lang.Object)
   */
   @Override
   public boolean equals(Object o) {
       // TODO: Return equal if the argument is a Note and the midiValue and duration are equal
       return false;
   }

   @Override
   public int hashCode() {
       // TODO: Compute hash using pieces. (Don't take hash code of strings.)
       return -1;
   }
}

Explanation / Answer

Solution:

Implementation have been provided for toString(), hashcode(), equals(), strech(). Please provide the required information on the rest as mentioneds:

Note.java

/**
* The Immutable Class Note.
*/
public class Note {
/** Static Constants */
public static final int DEFAULT_INTENSITY = 50;
public static final int REST_PITCH = 128; // First illegal pitch, used for rests.
private static final int PITCHES_PER_OCTAVE = 12;
private static final String[] NOTE_LETTERS = {"c","c#","d","d#","e","f","f#","g","g#","a","a#","b"};
private static final double MIN_DURATION = 1.0/64, // One sixty-fourth
MAX_DURATION = 8.0; // Eight whole notes
/** Fields (Immutable) */
private final String pitch;
private final int midiValue;
private final double duration;
/**
* Instantiates a new note based on a string denoting note letter and octave.
*
* @param pitch the pitch (e.g. "f6")
* @param duration the duration
* @throws NullPointerException if pitch is null
* @throws IllegalArgumentException if:
* 1. The pitch parameter is malformed or out of range.
* 2. The duration parameter is out of range.
*/
public Note(String pitch, double duration) {
// TODO
// Recommended: First implement toMidi(String).
if(pitch == null)
throw new NullPointerException("Pitch is null");
if(duration > MAX_DURATION || duration < MIN_DURATION)
throw new IllegalArgumentException("Duration parameter is out of range");
//Please clarify the use of octave here
}
/**
* Instantiates a new note based on MIDI value.
*
* @param midiValue the MIDI value (e.g. 68)
* @param duration the duration
* @throws IllegalArgumentException if:
* 1. The MIDI pitch parameter is out of range.
* 2. The duration parameter is out of range.
*/
public Note(int midiValue, double duration) {
// TODO
// Recommended: First implement toPitch(int).
if(duration > MAX_DURATION || duration < MIN_DURATION)
throw new IllegalArgumentException("Duration parameter is out of range");
//Please clarify the pitch parameter range here
}
/**
* Instantiates a new note from a String matching the format of Note's toString() method.
*
* @param note the string representation
*
* @throws IndexOutOfBoundsException if parameter isn't in correct format
* @throws NumberFormatException if duration representation cannot be parsed as double
* @throws IllegalArgumentException if the elements in the format are not permitted.
*/
public Note(String note) {
this(note.split(" x ")[0], Double.parseDouble(note.split(" x ")[1]));
}
/**
* Converts a pitch string to a MIDI value.
* The pitch "rest" should return {@link #REST_PITCH}.
*
* @param pitch the pitch to convert
* @throws NullPointerException if pitch is null
* @throws IllegalArgumentException is the String is not a legal pitch
* @return the MIDI value
*/
public static int toMidi(String pitch) {
// TODO
//Please explain a bit about toMidi operation
return -1;
}
/**
* Converts a MIDI value to a pitch string.
* The MIDI value 128 should return "rest".
*
* @param midiValue the MIDI value to convert
* @throws IllegalArgumentException if the MIDI value is outside of legal range
* @return the pitch string
*/
public static String toPitch(int midiValue) {
// TODO
//Please explain a bit about toPitch operation
return null;
}
/**
* Gets the pitch string of this note.
*
* @return the pitch
*/
public String getPitch() { return pitch; }
/**
* Gets the MIDI value of this note.
*
* @return the MIDI value
*/
public int getMidiPitch() { return midiValue; }
/**
* Gets the duration of this note.
*
* @return the duration
*/
public double getDuration() { return duration; }

/**
* Returns a new note with the same pitch, but with its duration multiplied by the parameter.
*
* @param factor the amount to scale by
* @throws IllegalArgumentException if resultant duration is outside of valid range
* @return the stretched note
*/
public Note stretch(double factor) {
double resultant = this.duration * factor;
if(resultant > MAX_DURATION || resultant < MIN_DURATION)
throw new IllegalArgumentException("Duration is outside of valid range");
return new Note(this.midiValue, resultant);
}
/**
* Returns a (new) note with the same duration, but transposed by the given interval.
*
* @param interval the interval to transpose by
* @throws IllegalArgumentException if note is transposed beyond valid bounds [c0, g10]
* @return the transposed note
*/
public Note transpose(int interval) {
// TODO
//Please explain a bit about transpose operation
return null;
}
/**
* Returns a string representation of this Note.
* It should follow the format found in songs/InMyLife.song, namely:
* For a Note with pitch "g#4" and duration 1.0625 -> "g#4 x 1.0625"
* NB1: Identical spacing and format are important!
* NB2: For a "rest" note, the same format must be used (including duration).
*
* @return the string representation
*/
@Override
public String toString() {
return pitch +" x "+ duration;
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
// TODO: Return equal if the argument is a Note and the midiValue and duration are equal
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Note other = (Note) obj;
if (Double.doubleToLongBits(duration) != Double.doubleToLongBits(other.duration))
return false;
if (midiValue != other.midiValue)
return false;
return true;
}
@Override
public int hashCode() {
// TODO: Compute hash using pieces. (Don't take hash code of strings.)
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(duration);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + midiValue;
return result;
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote