| /* |
| * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. |
| * |
| * This code 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 |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| import javax.sound.sampled.AudioFormat; |
| import javax.sound.sampled.AudioSystem; |
| import javax.sound.sampled.Clip; |
| import javax.sound.sampled.DataLine; |
| import javax.sound.sampled.Line; |
| import javax.sound.sampled.LineUnavailableException; |
| import javax.sound.sampled.Mixer; |
| import javax.sound.sampled.SourceDataLine; |
| import javax.sound.sampled.TargetDataLine; |
| |
| /** |
| * @test |
| * @bug 4679187 |
| * @summary Clip.open() throws unexpected Exceptions. verifies that clip, |
| * sourcedataline and targetdataline throw IllegalArgumentExcepotion if |
| * any field in the format is AudioFormat.NOT_SPECIFIED |
| */ |
| public class ClipOpenException { |
| static boolean failed = false; |
| |
| static byte[] audioData = new byte[2048]; |
| static AudioFormat[] formats = { |
| new AudioFormat(AudioSystem.NOT_SPECIFIED, |
| AudioSystem.NOT_SPECIFIED, |
| AudioSystem.NOT_SPECIFIED, |
| true, false), |
| new AudioFormat(0, 0, 0, true, false) |
| }; |
| static AudioFormat infoFormat = new AudioFormat(44100.0f, |
| 16, |
| 1, |
| true, false); |
| static DataLine.Info clipInfo = new DataLine.Info(Clip.class, infoFormat); |
| static DataLine.Info sdlInfo = new DataLine.Info(SourceDataLine.class, infoFormat); |
| static DataLine.Info tdlInfo = new DataLine.Info(TargetDataLine.class, infoFormat); |
| |
| |
| public static void print(String s) { |
| System.out.print(s); |
| } |
| public static void println(String s) { |
| System.out.println(s); |
| } |
| |
| public static void test(Line line) { |
| for (int format = 0; format < formats.length; format++) { |
| try { |
| println(" Opening the line with format "+(format+1)); |
| if (line instanceof Clip) { |
| ((Clip) line).open(formats[format], audioData, 0, audioData.length); |
| } else |
| if (line instanceof SourceDataLine) { |
| ((SourceDataLine) line).open(formats[format]); |
| } else |
| if (line instanceof TargetDataLine) { |
| ((TargetDataLine) line).open(formats[format]); |
| } else { |
| println(" Unknown type of line: "+line.getClass()); |
| return; |
| } |
| println(" No exception! not OK."); |
| failed = true; |
| } catch (IllegalArgumentException iae) { |
| println(" IllegalArgumentException: "+iae.getMessage()); |
| println(" OK"); |
| } catch (LineUnavailableException lue) { |
| println(" LineUnavailableException: "+lue.getMessage()); |
| println(" Probably incorrect, but may happen if the test system is correctly set up."); |
| } catch (Exception e) { |
| println(" Unexpected Exception: "+e.toString()); |
| println(" NOT OK!"); |
| failed = true; |
| } |
| println(" Closing line."); |
| line.close(); |
| } |
| } |
| |
| public static void main(String[] args) throws Exception { |
| Mixer.Info[] mixers = AudioSystem.getMixerInfo(); |
| int succMixers = 0; |
| println("Using formats: "); |
| for (int i = 0 ; i<formats.length; i++) { |
| println(""+(i+1)+". "+formats[i]); |
| } |
| for (int i=0; i<mixers.length; i++) { |
| boolean succ = false; |
| try { |
| Mixer mixer = AudioSystem.getMixer(mixers[i]); |
| println("Mixer "+mixer.getMixerInfo()+":"); |
| if (mixer.isLineSupported(clipInfo)) { |
| println("Getting clip from mixer..."); |
| Clip clip = (Clip) mixer.getLine(clipInfo); |
| succ = true; |
| test(clip); |
| } |
| if (mixer.isLineSupported(sdlInfo)) { |
| println("Getting source data line from mixer..."); |
| SourceDataLine sdl = (SourceDataLine) mixer.getLine(sdlInfo); |
| succ = true; |
| test(sdl); |
| } |
| if (mixer.isLineSupported(tdlInfo)) { |
| println("Getting target data line from mixer..."); |
| TargetDataLine tdl = (TargetDataLine) mixer.getLine(tdlInfo); |
| succ = true; |
| test(tdl); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| if (succ) { |
| succMixers++; |
| } |
| } |
| if (succMixers == 0) { |
| println("No mixers available! "); |
| println("Cannot run test. NOT FAILED"); |
| } |
| else if (failed) { |
| throw new Exception("Test FAILED"); |
| } |
| println("Test passed."); |
| } |
| } |