1/* 2 * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24import java.io.ByteArrayInputStream; 25import java.io.File; 26import java.io.FileInputStream; 27import java.io.InputStream; 28 29import javax.sound.midi.MidiSystem; 30import javax.sound.midi.Sequence; 31 32/** 33 * @test 34 * @bug 4291250 35 * @summary Midi files with SMPTE time do not play properly 36 */ 37public class MidiSMPTE { 38 39 public static void main(String[] args) throws Exception { 40 Sequence s = null; 41 //File midiFile = new File("outsmpte.mid"); 42 //InputStream is = new FileInputStream(midiFile); 43 //is = new BufferedInputStream(is); 44 InputStream is = new ByteArrayInputStream(smptemidifile); 45 s = MidiSystem.getSequence(is); 46 long duration = s.getMicrosecondLength() / 1000000; 47 System.out.println("Duration: "+duration+" seconds "); 48 if (duration > 14) { 49 throw new Exception("SMPTE time reader is broken! Test FAILED"); 50 } 51 System.out.println("Test passed"); 52 } 53 54 public static void printFile(String filename) throws Exception { 55 File file = new File(filename); 56 FileInputStream fis = new FileInputStream(file); 57 byte[] data = new byte[(int) file.length()]; 58 fis.read(data); 59 String s = ""; 60 for (int i=0; i<data.length; i++) { 61 s+=String.valueOf(data[i])+", "; 62 if (s.length()>72) { 63 System.out.println(s); 64 s=""; 65 } 66 } 67 System.out.println(s); 68 } 69 70 // A MIDI file with SMPTE timing 71 static byte[] smptemidifile = { 72 77, 84, 104, 100, 0, 0, 0, 6, 0, 1, 0, 3, -30, 120, 77, 84, 114, 107, 0, 73 0, 0, 123, 0, -112, 30, 100, -113, 49, -128, 50, 100, -114, 69, -112, 31, 74 100, -114, 33, -128, 51, 100, -114, 55, -112, 32, 100, -114, 120, -128, 52, 75 100, -114, 40, -112, 33, 100, -114, 26, -128, 53, 100, -114, 26, -112, 34, 76 100, -114, 76, -128, 54, 100, -114, 12, -112, 35, 100, -114, 91, -128, 55, 77 100, -114, 69, -112, 36, 100, -114, 33, -128, 56, 100, -114, 55, -112, 37, 78 100, -114, 84, -128, 57, 100, -114, 40, -112, 38, 100, -114, 26, -128, 58, 79 100, -114, 26, -112, 39, 100, -113, 24, -128, 59, 100, -113, 60, -112, 40, 80 100, -113, 110, -128, 60, 100, -113, 96, -112, 41, 100, -113, 39, -128, 61, 81 100, 0, -1, 47, 0, 77, 84, 114, 107, 0, 0, 0, 4, 0, -1, 47, 0, 77, 84, 114, 82 107, 0, 0, 0, 4, 0, -1, 47, 0 83 }; 84 85} 86