/** Open an audio channel. */ public synchronized void openChannel(InputStream in) { if (DEBUG) { System.out.println("AudioDevice: openChannel"); System.out.println("input stream =" + in); } Info info = null; // is this already playing? if so, then just return for (int i = 0; i < infos.size(); i++) { info = (AudioDevice.Info) infos.elementAt(i); if (info.in == in) { return; } } AudioInputStream as = null; if (in instanceof AudioStream) { if (((AudioStream) in).midiformat != null) { // it's a midi file try { startMidi(((AudioStream) in).stream, in); } catch (Exception e) { return; } } else if (((AudioStream) in).ais != null) { // it's sampled audio try { startSampled(((AudioStream) in).ais, in); } catch (Exception e) { return; } } } else if (in instanceof AudioDataStream) { if (in instanceof ContinuousAudioDataStream) { try { AudioInputStream ais = new AudioInputStream( in, ((AudioDataStream) in).getAudioData().format, AudioSystem.NOT_SPECIFIED); startSampled(ais, in); } catch (Exception e) { return; } } else { try { AudioInputStream ais = new AudioInputStream( in, ((AudioDataStream) in).getAudioData().format, ((AudioDataStream) in).getAudioData().buffer.length); startSampled(ais, in); } catch (Exception e) { return; } } } else { BufferedInputStream bis = new BufferedInputStream(in, 1024); try { try { as = AudioSystem.getAudioInputStream(bis); } catch (IOException ioe) { return; } startSampled(as, in); } catch (UnsupportedAudioFileException e) { try { try { MidiFileFormat mff = MidiSystem.getMidiFileFormat(bis); } catch (IOException ioe1) { return; } startMidi(bis, in); } catch (InvalidMidiDataException e1) { // $$jb:08.01.99: adding this section to make some of our other // legacy classes work..... // not MIDI either, special case handling for all others AudioFormat defformat = new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, true); try { AudioInputStream defaif = new AudioInputStream(bis, defformat, AudioSystem.NOT_SPECIFIED); startSampled(defaif, in); } catch (UnsupportedAudioFileException es) { return; } catch (LineUnavailableException es2) { return; } } catch (MidiUnavailableException e2) { // could not open sequence return; } } catch (LineUnavailableException e) { return; } } // don't forget adjust for a new stream. notify(); }