File: CreateEmptySequence.java

package info (click to toggle)
libtritonus-java 20070428-9
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 6,948 kB
  • sloc: ansic: 53,816; java: 45,226; sh: 3,022; makefile: 1,188; xml: 820; cpp: 147
file content (109 lines) | stat: -rw-r--r-- 2,792 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 *	CreateEmptySequence.java
 *
 *	TODO: short description
 */

/*
 *  Copyright (c) 2000 by Matthias Pfisterer <Matthias.Pfisterer@web.de>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published
 *   by the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program 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 for more details.
 *
 *   You should have received a copy of the GNU General Public
 *   License along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */


import	java.io.File;
import	java.io.IOException;

import	javax.sound.midi.Sequence;
import	javax.sound.midi.MetaMessage;
import	javax.sound.midi.MidiEvent;
import	javax.sound.midi.MidiSystem;
import	javax.sound.midi.Track;
import	javax.sound.midi.InvalidMidiDataException;



/**	Creates a Sequence with only a end-of-track message.
 */
public class CreateEmptySequence
{
	public static void main(String[] args)
	{
		if (args.length != 4)
		{
			out("usage:");
			out("java CreateEmptySequence <duration> <tempo_in_MPQ> <resolution> <midifile>");
			System.exit(1);
		}
		long	lDuration = Long.parseLong(args[0]);
		int	nTempoInMPQ = Integer.parseInt(args[1]);
		int	nResolution = Integer.parseInt(args[2]);
 		String	strFilename = args[3];
		out("Clock distance (s): " + nTempoInMPQ / 24);
		out("Tick distance (s): " + nTempoInMPQ / nResolution);
		Sequence	sequence = null;
		try
		{
			sequence = new Sequence(Sequence.PPQ,
						nResolution);
			Track	track = sequence.createTrack();
			MetaMessage	mm = null;
			MidiEvent	me = null;

			mm = new MetaMessage();
			byte[]	abTempo = new byte[3];
			abTempo[0] = (byte) ((nTempoInMPQ >> 16) & 0xFF);
			abTempo[1] = (byte) ((nTempoInMPQ >> 8) & 0xFF);
			abTempo[2] = (byte) ((nTempoInMPQ) & 0xFF);
			mm.setMessage(0x51, abTempo, 3);
			me = new MidiEvent(mm, 0);
			track.add(me);
			mm = new MetaMessage();
			mm.setMessage(0x2F, new byte[0], 0);
			me = new MidiEvent(mm, lDuration);
			track.add(me);
		}
		catch (InvalidMidiDataException e)
		{
			e.printStackTrace();
			System.exit(1);
		}
		try
		{
			MidiSystem.write(sequence, 0, new File(strFilename));
		}
		catch (IOException e)
		{
			e.printStackTrace();
			System.exit(1);
		}

		/*
		 *	This is only necessary because of a bug in the Sun jdk1.3
		 */
		System.exit(0);
	}



	private static void out(String strMessage)
	{
		System.out.println(strMessage);
	}
}



/*** CreateEmptySequence.java ***/