CPSC 330
From MWCSWiki
Final Exam Info
- During the final exam each student will present the portion of the project for which he had responsibility. Each will give a 5-10 minute talk and demonstration regarding their work.
Additionally, each student will turn in materials as specified on Project Description and evaluation
Group Project
Downloads
- Download the JTrax executable here.
- Latest Update: 4/30/2009 7:00 PM (version 3.65)
- Uses MP3 SPI by Javazoom and JMF.
- You shouldn't need to install any of the third-party libraries to execute the JAR; They're all included in the archive.
- Be sure to extract the contents of the zip folder before executing JTrax.jar.
- Source code
- Documentation
- Matt Goodreau's database Samples
Task List
- March 23, 2009
- GUI (What we want this to look like.)
- Desktop application (for now)
- Possibly use .jsps to display on the web.
- Methods to Integrate Pieces
- Identify needed libraries
- Document ALL code
- Identify all file types we want to support.
- Write Narratives explaining how this will be used.
- Due Monday March 30th: 2 page paper on how this application will be used.
- April 17, 2009
- Group Tasks
- support for <s>video and</s> more audio types
- <s>slideshow</s>
- <s>add directory</s>
- <s>decide on final application name</s>
- database integration
- comment object
- member object
- rating object (?)
- documentation
- user manual
- smart playlists (optional)
- Daniel
- <s>Finish playlist functionality</s>
- <s>Complete serizialization for playlist</s>
- <s>Meaningful exception catches</s>
- <s>Ability to open entire folder</s>
- <s>Finish playlist functionality</s>
- Matt Martin
- <s>pause</s>
- volume
- <s>options</s>
- <s>search</s>
- <s>make slider control track position</s>
- <s>open multiple playlists at once, create/save/open playlist libraries</s>
- <s>repeat option, continuous play</s>
- <s>improve info display</s>
- <s>improve skip functions</s>
- Group Tasks
Goal
Media player allows for
- individual collections
- share collections
- comment on collections
Links
- Audio
- Images
- Help
Libraries
- java.awt.*;
- java.awt.image.BufferedImage;
- java.io.*;
- javax.imageio.ImageIO;
- javax.swing.JFrame;
- java.io.BufferedInputStream;
- javazoom.jl.player.Player;
- java.io.FileInputStream;
- java.awt.BorderLayout
- java.awt.Component;
- java.io.IOException;
- java.net.URL; javax.media.CannotRealizeException;
- javax.media.Manager;
- javax.media.NoPlayerException;
- javax.media.Player;
- javax.swing.JPanel;
Assignments
Monday, March 16, 2009
Matt Martin will come up with attributes of
Brian Hall will come up with attributes of
Matt Goodreau will come up with attributes of
Monday, March 23, 2009
- Matt Martin has produced code for the Multimedia class and its subclasses, Audio, Video, and Picture.
- Clemon Yueh will produce code for the MutimediaFactory class.
- Brian Hall will produce code that will take an image multimedia object or its derivatives and display it using JavaFx.
- Matt Goodreau will produce code for the rating object and member object.
- Member source
- Due to an unfortunate coding accident the rating code is unavailable.
- Dan Gerhart will produce code for the playlist object.
Features
Daniel's Ideas
- rate collections
- create, modify, and delete playlists
- PARTY SHUFFLEZ!!1 (randomly selects 10 media files from collection)
- top played media list
- recently added media list
- always on top option
- mini view/full view option
- visualizer?
- multiple views for libraries (list, album cover, etc.)
Matt Martin's Ideas
- MultimediaFactory class that creates the appropriate multimedia object based on the file extension passed to it
- Factory pattern
- Strategy pattern
- Multimedia > Audio, Image, Video, etc.
- collective online log of subscribers' multimedia playing history
- mixed-type playlists (music, videos, and pictures in one list)
Matt Goodreau's Ideas
- Allow users to downrank or up rank comments to remove unuseful/hateful comments and to emphasize helpful/good comments
- Design with modalization in mind, like face books add-ons, not only will his allow easier time adding new things, allows for use to create our indivial tasks in this
Brian's Ideas
- Researching Java FX library for playing different media types.
- Overview of Java FX
Design
MediaPlayer
GUI
The GUI is composed of a series of JPanels containing a JTable used to display the playlist, an ImageIcon attached to a JLabel used to display pictures, JButtons for adding, deleting, and displaying information of multimedia items, and a control panel with buttons for playing, pausing, stopping, and skipping audio and video items in the selected playlist.
Multimedia
Multimedia will be an abstract class which encapsulates the data of an object that can be played and/or displayed by the media player. It will contain fields for standard metadata of media files like name, album, artist, length, genre, play count, and rating. It also contains a file object so the media player can keep track of it. Multimedia will implement Serializable so it can be saved as part of a playlist, and Comparable so it can be compared to other Multimedia objects when its playlist is sorted. It will contain accessor and mutator methods for its instance variables, as well as a getType method which returns the file name's extension. The getLength and getDimensions methods will be abstract since they will vary between subclasses. It will also have a comment method which will add a comment object to an ArrayList of comments by other users. Multimedia objects will not be constructed directly by the player, but rather with a MultimediaFactory.
Audio
Audio will be a subclass of Multimedia. It will be an abstraction of an audio file played by the media player. It has an Image field called artwork which can be used to store a song's album cover. It will have an accessor and a mutator for the artwork so it can be displayed and changed dynamically by the user. Audio will override the getLength to specify how to retrive the file's length and to indicate that audio cannot have dimensions.
- Link to Brian's Audio Class here
- You must go to JavaZoom and down load JLayer 1.0.0
- Make a new library in NetBeans and add the JavaZoom folder.
Video
Video will be a Multimedia type representing a video file used by the player. It overrides getLength used to get the video file's length as opposed to an audio file's length. It also overrides the getDimensions method to return the video's width and height.
Video Updated/VideoPlayer
- Link to Brian's updated video and MediaPlayer source files here
- Matt's VideoPlayer based on Brian's code here
Picture
Picture will a Multimedia object which can be displayed in the player. It has an Image instance variable which can be accessed by its getImage method as an ImageIcon, so the player can access it directly and display it in a JLabel. Like the other forms of multimedia, it overrides getLength (to indicate that it doesn't have a length) and getDimensions (to return the picture's width and height).
MultimediaFactory
MultimediaFactory will use the factory pattern to create Multimedia objects. It will determine the appropriate type to construct based on the file passed to it when the user selects one when prompted by the media player. A Multimedia object is returned by the createMultimedia method which will use a series of if statements which analyze the file's extension to determine the corresponding Multimedia type.
Playlist
Playlists will be Serializable objects which consist of ArrayLists of Multimedia objects. Its instance variables will include a member indicating the playlist's owner, a rating, and an ArrayList of comments from other users. There will be methods allowing the user to add and remove Multimedia objects. In addition, it will have accessors and mutators that will be used by the media player and its database.
Comment
Comment objects will be displayed with the most recent appearing first. Best case scenario, comments may be displayed 5 comments at a time (default), all at once, or with a user specified number (perhaps 10, 25, and 50), although this may be altered due to time restrictions. Comments will be stored in either an array or a database depending on chosen implementation.
Comments will need to include date and time instance fields, with accessor methods to retrieve these data members.
If the group would like to support commenting on comments themselves, perhaps including a pointer to the comment being commented on would allow us to include that functionality.
Rating
- Personal Rating (number of stars 1-5)
- Average Rating
- Clemon comes up with data structure or way of allowing each member to provide at most one rating per object.
Member
- Name
- Sign-up date
- Birth date
- List of personal media
- List of favorites
- Friend lists
- Parental Controls
- Type of subscription - gold, silver, free (secondary)
- Viewing Permissions

