gt:         Object [] metadataFields = new Object[10];
context: /*
  * The GPLv3 licence :
  * -----------------
  * Copyright (c) 2009 Ricardo Dias
  *
  * This file is part of MuVis.
  *
  * MuVis is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
  *
  * MuVis is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with MuVis.  If not, see <http://www.gnu.org/licenses/>.
  */
  
  package muvis.audio;
  
  import java.awt.image.BufferedImage;
  import java.io.File;
  import javax.imageio.ImageIO;
  import org.jaudiotagger.audio.AudioFile;
  import org.jaudiotagger.audio.AudioFileIO;
  import org.jaudiotagger.tag.Tag;
  
  /**
   * Class that encapsulates the textual metadata extracted from the mp3file
   * @author Ricardo
   */
  public class AudioMetadata {
  
      /**
       * The audio duration
       */
      private long duration;
  
      /**
       * The audio piece title
       */
      private String title;
  
      /**
       * Audio artist
       */
      private String author;
  
      /**
       * Adio piece album
       */
      private String album;
  
      /**
       * Audio piece track number
       */
      private int trackNumber;
  
      /**
       * Audio piece year
       */
      private String year;
  
      /**
       * Audio piece bitrate
       */
      private String bitrate;
  
      /**
       * Audio piece genre
       */
      private String genre;
  
      /**
       * Audio piece filename
       */
      private String filename;
  
      /**
       * Sets the artwork for this Audio piece
       * @param artwork the image
       */
      public void setArtwork(BufferedImage artwork) {
          //TO DO - saving should be done directly on the underlying file!
      }
  
      /**
       * Sets the artwork for this Audio piece, given the image location
       * @param imagePath the image location
       */
      public void setArtwork(String imagePath){
          //TO DO
      }
  
      public BufferedImage getArtwork() {
  
          BufferedImage image = null;
          try{
              File sourceFile = new File(filename);
              AudioFile mp3file = AudioFileIO.read(sourceFile);
              Tag tag = mp3file.getTag();
              image = tag.getFirstArtwork().getImage();
  
          }  catch (Exception e) {
              try{
                  image = ImageIO.read(getClass().getResource("/images/not_available.jpg"));
              } catch (Exception ex){}
          }
  
          return image;
      }
  
      /**
       * Gets the track filename
       * @return
       */
      public String getFilename() {
          return filename;
      }
  
      /**
       * Method that returns the length of the track.
       * @return the duration
       */
      public long getDuration() {
          return duration;
      }
  
      /**
       * Method for retrieving the title of the track.
       * @return the title
       */
      public String getTitle() {
          return title;
      }
  
      /**
       * Method that returns the author of the track.
       * @return the author
       */
      public String getAuthor() {
          return author;
      }
  
      /**
       * Retrieves the album of the track.
       * @return the album
       */
      public String getAlbum() {
          return album;
      }
  
      /**
       * Method that returns the number of this track.
       * @return the trackNumber
       */
      public int getTrackNumber() {
          return trackNumber;
      }
  
      /**
       * Method that returns the year of the track.
       * @return the year
       */
      public String getYear() {
          return year;
      }
  
      /**
       * Method that returns the (average) bitrate of the track.
       * @return the bitrate
       */
      public String getBitrate() {
          return bitrate;
      }
  
      /**
       * Method that returns the genre of the track.
       * @return the genre
       */
      public String getGenre() {
          return genre;
      }
  
      /**
       * @param duration the duration to set
       */
      public void setDuration(long duration) {
          this.duration = duration;
      }
  
      /**
       * @param title the title to set
       */
      public void setTitle(String title) {
          this.title = title;
      }
  
      /**
       * @param author the author to set
       */
      public void setAuthor(String author) {
          this.author = author;
      }
  
      /**
       * @param album the album to set
       */
      public void setAlbum(String album) {
          this.album = album;
      }
  
      /**
       * @param trackNumber the trackNumber to set
       */
      public void setTrackNumber(int trackNumber) {
          this.trackNumber = trackNumber;
      }
  
      /**
       * @param year the year to set
       */
      public void setYear(String year) {
          this.year = year;
      }
  
      /**
       * @param bitrate the bitrate to set
       */
      public void setBitrate(String bitrate) {
          this.bitrate = bitrate;
      }
  
      /**
       * @param genre the genre to set
       */
      public void setGenre(String genre) {
          this.genre = genre;
      }
  
      /**
       * @param filename this audio piece filename
       */
      public void setFilename(String filename){
          this.filename = filename;
      }
  
      /**
       * Gets a string representation for this audio metadata
       * Format: {duration, title, author, album, track number, year, bitrate, genre, filename}
       * @return the string that represents the format
       */
      @Override
      public String toString(){
          return "{" + "duration: " + duration + ", title: " + title + ", author: " + author +
                  ", album: " + album + ", track number: " + trackNumber +
                  ", year: " + year + ", bitrate: " + bitrate + ", genre: " + genre + ", filename:" + filename
                  + "}";
      }
  
      /*
       * Methods that returns the fields of the metadata in a array format.
       * Fields available:
       * 1. Duration
       * 2. Title
       * 3. Author
       * 4. Album
       * 5. Track Number
       * 6. Year
       * 7. Bitrate
       * 8. Genre
       * 9. Filename
       * 10. Artwork
       */
      public Object[] toArray(){
  
  