001 /*
002 * Copyright 1999-2002 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.sound.midi.spi;
027
028 import java.io.File;
029 import java.io.IOException;
030 import java.io.OutputStream;
031
032 import javax.sound.midi.Sequence;
033 import javax.sound.midi.MidiFileFormat;
034
035 /**
036 * A <code>MidiFileWriter</code> supplies MIDI file-writing services. Classes
037 * that implement this interface can write one or more types of MIDI file from
038 * a <code>{@link Sequence}</code> object.
039 *
040 * @author Kara Kytle
041 * @version 1.24, 07/05/05
042 * @since 1.3
043 */
044 public abstract class MidiFileWriter {
045
046 /**
047 * Obtains the set of MIDI file types for which file writing support is
048 * provided by this file writer.
049 * @return array of file types. If no file types are supported,
050 * an array of length 0 is returned.
051 */
052 public abstract int[] getMidiFileTypes();
053
054 /**
055 * Obtains the file types that this file writer can write from the
056 * sequence specified.
057 * @param sequence the sequence for which MIDI file type support
058 * is queried
059 * @return array of file types. If no file types are supported,
060 * returns an array of length 0.
061 */
062 public abstract int[] getMidiFileTypes(Sequence sequence);
063
064 /**
065 * Indicates whether file writing support for the specified MIDI file type
066 * is provided by this file writer.
067 * @param fileType the file type for which write capabilities are queried
068 * @return <code>true</code> if the file type is supported,
069 * otherwise <code>false</code>
070 */
071 public boolean isFileTypeSupported(int fileType) {
072
073 int types[] = getMidiFileTypes();
074 for (int i = 0; i < types.length; i++) {
075 if (fileType == types[i]) {
076 return true;
077 }
078 }
079 return false;
080 }
081
082 /**
083 * Indicates whether a MIDI file of the file type specified can be written
084 * from the sequence indicated.
085 * @param fileType the file type for which write capabilities are queried
086 * @param sequence the sequence for which file writing support is queried
087 * @return <code>true</code> if the file type is supported for this sequence,
088 * otherwise <code>false</code>
089 */
090 public boolean isFileTypeSupported(int fileType, Sequence sequence) {
091
092 int types[] = getMidiFileTypes(sequence);
093 for (int i = 0; i < types.length; i++) {
094 if (fileType == types[i]) {
095 return true;
096 }
097 }
098 return false;
099 }
100
101 /**
102 * Writes a stream of bytes representing a MIDI file of the file type
103 * indicated to the output stream provided.
104 * @param in sequence containing MIDI data to be written to the file
105 * @param fileType type of the file to be written to the output stream
106 * @param out stream to which the file data should be written
107 * @return the number of bytes written to the output stream
108 * @throws IOException if an I/O exception occurs
109 * @throws IllegalArgumentException if the file type is not supported by
110 * this file writer
111 * @see #isFileTypeSupported(int, Sequence)
112 * @see #getMidiFileTypes(Sequence)
113 */
114 public abstract int write(Sequence in, int fileType,
115 OutputStream out) throws IOException;
116
117 /**
118 * Writes a stream of bytes representing a MIDI file of the file type
119 * indicated to the external file provided.
120 * @param in sequence containing MIDI data to be written to the external file
121 * @param fileType type of the file to be written to the external file
122 * @param out external file to which the file data should be written
123 * @return the number of bytes written to the file
124 * @throws IOException if an I/O exception occurs
125 * @throws IllegalArgumentException if the file type is not supported by
126 * this file writer
127 * @see #isFileTypeSupported(int, Sequence)
128 * @see #getMidiFileTypes(Sequence)
129 */
130 public abstract int write(Sequence in, int fileType, File out)
131 throws IOException;
132 }
|