1 /** 2 * @test 3 * @bug 6835393 4 * @summary Tests that MidiFileReader correctly reads sequences with different division types 5 * @author Alex Menkov 6 */ 7 8 import java.io.ByteArrayInputStream; 9 import java.io.ByteArrayOutputStream; 10 import java.io.IOException; 11 import java.io.InputStream; 12 import javax.sound.midi.InvalidMidiDataException; 13 import javax.sound.midi.MidiSystem; 14 import javax.sound.midi.Sequence; 15 16 public class SMPTESequence { 17 18 static int failed = 0; 19 20 public static void main(String[] args) { 21 test(Sequence.PPQ); 22 test(Sequence.SMPTE_24); 23 test(Sequence.SMPTE_25); 24 test(Sequence.SMPTE_30); 25 test(Sequence.SMPTE_30DROP); 26 27 if (failed > 0) { 28 throw new RuntimeException("" + failed + " tests failed"); 29 } 30 } 31 32 static boolean test(float divisionType) { 33 boolean result = false; 34 try { 35 log("Testing divisionType == " + divisionType); 36 Sequence sequence = new Sequence(divisionType, 16, 1); 37 float div1 = sequence.getDivisionType(); 38 39 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 40 MidiSystem.write(sequence, 1, outStream); 41 42 InputStream inStream = new ByteArrayInputStream(outStream.toByteArray()); 43 44 sequence = MidiSystem.getSequence(inStream); 45 float div2 = sequence.getDivisionType(); 46 47 log("After write/read got divisionType == " + div2); 48 if (Math.abs(div2 - div1) < 0.001f) { 49 result = true; 50 } 51 } catch (InvalidMidiDataException ex) { 52 log(ex); 53 } catch (IOException ex) { 54 log(ex); 55 } catch (IllegalArgumentException ex) { 56 log(ex); 57 } 58 if (result) { 59 log("OK"); 60 } else { 61 log("FAIL"); 62 failed++; 63 } 64 return result; 65 } 66 67 static void log(String s) { 68 System.out.println(s); 69 } 70 71 static void log(Exception ex) { 72 log("got exception (" + ex.getClass().getSimpleName() + "): " + ex.getMessage()); 73 } 74 75 }