13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package javax.sound.sampled.spi;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.io.OutputStream;
31
32 import javax.sound.sampled.AudioInputStream;
33
34 import static javax.sound.sampled.AudioFileFormat.Type;
35
36 /**
37 * Provider for audio file writing services. Classes providing concrete
38 * implementations can write one or more types of audio file from an audio
39 * stream.
40 *
41 * @author Kara Kytle
42 * @since 1.3
43 */
44 public abstract class AudioFileWriter {
45
46 /**
47 * Obtains the file types for which file writing support is provided by this
48 * audio file writer.
49 *
50 * @return array of file types. If no file types are supported, an array of
51 * length 0 is returned.
52 */
93 * stream, otherwise {@code false}
94 */
95 public boolean isFileTypeSupported(Type fileType, AudioInputStream stream) {
96
97 Type types[] = getAudioFileTypes( stream );
98
99 for(int i=0; i<types.length; i++) {
100 if( fileType.equals( types[i] ) ) {
101 return true;
102 }
103 }
104 return false;
105 }
106
107 /**
108 * Writes a stream of bytes representing an audio file of the file type
109 * indicated to the output stream provided. Some file types require that
110 * the length be written into the file header, and cannot be written from
111 * start to finish unless the length is known in advance. An attempt to
112 * write such a file type will fail with an IOException if the length in the
113 * audio file format is {@link javax.sound.sampled.AudioSystem#NOT_SPECIFIED
114 * AudioSystem.NOT_SPECIFIED}.
115 *
116 * @param stream the audio input stream containing audio data to be written
117 * to the output stream
118 * @param fileType file type to be written to the output stream
119 * @param out stream to which the file data should be written
120 * @return the number of bytes written to the output stream
121 * @throws IOException if an I/O exception occurs
122 * @throws IllegalArgumentException if the file type is not supported by the
123 * system
124 * @see #isFileTypeSupported(Type, AudioInputStream)
125 * @see #getAudioFileTypes
126 */
127 public abstract int write(AudioInputStream stream, Type fileType,
128 OutputStream out) throws IOException;
129
130 /**
131 * Writes a stream of bytes representing an audio file of the file format
132 * indicated to the external file provided.
133 *
134 * @param stream the audio input stream containing audio data to be written
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package javax.sound.sampled.spi;
27
28 import java.io.File;
29 import java.io.IOException;
30 import java.io.OutputStream;
31
32 import javax.sound.sampled.AudioInputStream;
33 import javax.sound.sampled.AudioSystem;
34
35 import static javax.sound.sampled.AudioFileFormat.Type;
36
37 /**
38 * Provider for audio file writing services. Classes providing concrete
39 * implementations can write one or more types of audio file from an audio
40 * stream.
41 *
42 * @author Kara Kytle
43 * @since 1.3
44 */
45 public abstract class AudioFileWriter {
46
47 /**
48 * Obtains the file types for which file writing support is provided by this
49 * audio file writer.
50 *
51 * @return array of file types. If no file types are supported, an array of
52 * length 0 is returned.
53 */
94 * stream, otherwise {@code false}
95 */
96 public boolean isFileTypeSupported(Type fileType, AudioInputStream stream) {
97
98 Type types[] = getAudioFileTypes( stream );
99
100 for(int i=0; i<types.length; i++) {
101 if( fileType.equals( types[i] ) ) {
102 return true;
103 }
104 }
105 return false;
106 }
107
108 /**
109 * Writes a stream of bytes representing an audio file of the file type
110 * indicated to the output stream provided. Some file types require that
111 * the length be written into the file header, and cannot be written from
112 * start to finish unless the length is known in advance. An attempt to
113 * write such a file type will fail with an IOException if the length in the
114 * audio file format is {@link AudioSystem#NOT_SPECIFIED}.
115 *
116 * @param stream the audio input stream containing audio data to be written
117 * to the output stream
118 * @param fileType file type to be written to the output stream
119 * @param out stream to which the file data should be written
120 * @return the number of bytes written to the output stream
121 * @throws IOException if an I/O exception occurs
122 * @throws IllegalArgumentException if the file type is not supported by the
123 * system
124 * @see #isFileTypeSupported(Type, AudioInputStream)
125 * @see #getAudioFileTypes
126 */
127 public abstract int write(AudioInputStream stream, Type fileType,
128 OutputStream out) throws IOException;
129
130 /**
131 * Writes a stream of bytes representing an audio file of the file format
132 * indicated to the external file provided.
133 *
134 * @param stream the audio input stream containing audio data to be written
|