com.beaglebuddy.id3.v23.frame_body

## Class ID3v23FrameBodySynchronizedTempoCodes

- java.lang.Object
- - com.beaglebuddy.util.Utility
  - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility
    - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody
      - - com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodySynchronizedTempoCodes

-     public class ID3v23FrameBodySynchronizedTempoCodes
      extends ID3v23FrameBody

  A synchronized tempo codes frame body is associated with an ID3v2.3 `SYTC` `frame` which is used to specify tempo changes in the .mp3 song. A tempo is specified as the metronome setting, ie, the number of beats per minute. Its range is from 2 - 510 bpm. The synchronized tempo codes frame body contains the following fields:

  Synchronized Tempo Codes Frame Body Fields
  | Field | Description
  --- | --- | ---
  1. | `time stamp format` | `units` of the time stamp field in the `tempo changes`.
  2. | tempoChanges | list of `tempo changes` within the .mp3 song.

  There may be only one synchronized tempo codes frame in an ID3v2.3 `tag`.

  See Also:
    `ID3v23Frame`, ID3 tag version 2.3.0 standard, wikipedia history of ID3 tags

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `class` | `ID3v23FrameBodySynchronizedTempoCodes.TempoChange` used to indicate a tempo change within an .mp3 song.

  - ### Field Summary

    - ### Fields inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody

      `buffer, dirty, frameType`

    - ### Fields inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility

      `nextNullTerminatorIndex, nullTerminatorIndex`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ID3v23FrameBodySynchronizedTempoCodes()` The default constructor is called when creating a new frame.
    `ID3v23FrameBodySynchronizedTempoCodes(java.io.InputStream inputStream, int frameBodySize)` This constructor is called when reading in an existing frame from an .mp3 file.
    `ID3v23FrameBodySynchronizedTempoCodes(TimeStampFormat timeStampFormat, java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange> tempoChanges)` This constructor is called when creating a new frame.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange>` | `getTempoChanges()` gets a list of the tempo changes that occur within the song.
    `TimeStampFormat` | `getTimeStampFormat()` get the time stamp format.
    `void` | `parse()` parses the raw bytes of the frame body and stores the parsed values in the frame's fields.
    `void` | `setBuffer()` If the frame body's values have been modified, then resize the raw binary buffer and store the new values there.
    `void` | `setTempoChanges(java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange> tempoChanges)` sets the list of the tempo changes that occur within the song.
    `void` | `setTimeStampFormat(TimeStampFormat timeStampFormat)` sets the time stamp format.
    `java.lang.String` | `toString()` gets a string representation of the synchronized tempo codes frame body showing all of the frame's fields and their values.

    - ### Methods inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBody

      `getFrameType, getNextNullTerminator, getSize, isDirty, save, save`

    - ### Methods inherited from class com.beaglebuddy.id3.v23.frame_body.ID3v23FrameBodyUtility

      `getNextNullTerminator, pricesToString, stringToBytes`

    - ### Methods inherited from class com.beaglebuddy.util.Utility

      `bytesToInt, bytesToInt, bytesToShort, bytesToShort, bytesToSynchsafeInt, bytesToSynchsafeShort, formateDate, hex, hex, hex, intToBytes, littleEndianBytesToInt, pad, shortToBytes, synchsafeIntToBytes`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Constructor Detail

    - #### ID3v23FrameBodySynchronizedTempoCodes

          public ID3v23FrameBodySynchronizedTempoCodes()

      The default constructor is called when creating a new frame. The default values used are:
      - time stamp format in ms
      - no tempo changes

    - #### ID3v23FrameBodySynchronizedTempoCodes

          public ID3v23FrameBodySynchronizedTempoCodes(TimeStampFormat timeStampFormat,
                                               java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange> tempoChanges)

      This constructor is called when creating a new frame.
      Parameters:
        `timeStampFormat` - the units of the timestamps in the timestamp field of the tempo changes.
        `tempoChanges` - list of tempo changes within the .mp3 song.

    - #### ID3v23FrameBodySynchronizedTempoCodes

          public ID3v23FrameBodySynchronizedTempoCodes(java.io.InputStream inputStream,
                                               int frameBodySize)
                                                throws java.io.IOException

      This constructor is called when reading in an existing frame from an .mp3 file. This is then followed by a call to the parse() method.
      Parameters:
        `inputStream` - input stream pointing to a synchronized tempo codes frame body in the .mp3 file.
        `frameBodySize` - size (in bytes) of the frame's body.
      Throws:
        `java.io.IOException` - if there is an error while reading the frame body.

  - ### Method Detail

    - #### parse

          public void parse()
                     throws java.lang.IllegalArgumentException

      parses the raw bytes of the frame body and stores the parsed values in the frame's fields.
      Overrides:
        `parse` in class `ID3v23FrameBody`
      Throws:
        `java.lang.IllegalArgumentException` - if an invalid value is detected while parsing the frame body's raw bytes.

    - #### getTimeStampFormat

          public TimeStampFormat getTimeStampFormat()

      get the time stamp format.
      Returns:
        the time stamp format.
      See Also:
        `setTimeStampFormat(TimeStampFormat)`

    - #### setTimeStampFormat

          public void setTimeStampFormat(TimeStampFormat timeStampFormat)

      sets the time stamp format.
      Parameters:
        `timeStampFormat` - the units of the time stamp.
      See Also:
        `getTimeStampFormat()`

    - #### getTempoChanges

          public java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange> getTempoChanges()

      gets a list of the tempo changes that occur within the song.
      Returns:
        a list of the tempo changes that occur within the song.
      See Also:
        `setTempoChanges(List)`

    - #### setTempoChanges

          public void setTempoChanges(java.util.List<ID3v23FrameBodySynchronizedTempoCodes.TempoChange> tempoChanges)

      sets the list of the tempo changes that occur within the song.
      Parameters:
        `tempoChanges` - a list of the tempo changes that occur within the song.
      See Also:
        `getTempoChanges()`

    - #### setBuffer

          public void setBuffer()

      If the frame body's values have been modified, then resize the raw binary buffer and store the new values there. When finished, the dirty flag is reset to indicate that the buffer is up to date, and the frame is now ready to be saved to the .mp3 file.
      Overrides:
        `setBuffer` in class `ID3v23FrameBody`

    - #### toString

          public java.lang.String toString()

      gets a string representation of the synchronized tempo codes frame body showing all of the frame's fields and their values.
      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        a string representation of the frame body.