本文整理汇总了Java中javax.sound.midi.Sequence.getTracks方法的典型用法代码示例。如果您正苦于以下问题:Java Sequence.getTracks方法的具体用法?Java Sequence.getTracks怎么用?Java Sequence.getTracks使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类javax.sound.midi.Sequence
的用法示例。
在下文中一共展示了Sequence.getTracks方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: getMidiFileTypes
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Obtains the file types that this provider can write from the
* sequence specified.
* @param sequence the sequence for which midi file type support
* is queried
* @return array of file types. If no file types are supported,
* returns an array of length 0.
*/
public int[] getMidiFileTypes(Sequence sequence){
int typesArray[];
Track tracks[] = sequence.getTracks();
if( tracks.length==1 ) {
typesArray = new int[2];
typesArray[0] = MIDI_TYPE_0;
typesArray[1] = MIDI_TYPE_1;
} else {
typesArray = new int[1];
typesArray[0] = MIDI_TYPE_1;
}
return typesArray;
}
示例2: getMidiFileTypes
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Obtains the file types that this provider can write from the
* sequence specified.
* @param sequence the sequence for which midi file type support
* is queried
* @return array of file types. If no file types are supported,
* returns an array of length 0.
*/
@Override
public int[] getMidiFileTypes(Sequence sequence){
int typesArray[];
Track tracks[] = sequence.getTracks();
if( tracks.length==1 ) {
typesArray = new int[2];
typesArray[0] = MIDI_TYPE_0;
typesArray[1] = MIDI_TYPE_1;
} else {
typesArray = new int[1];
typesArray[0] = MIDI_TYPE_1;
}
return typesArray;
}
示例3: resetTracks
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
public void resetTracks(){
try {
Sequence sequence = this.getSequencer().getSequence();
if(sequence != null){
Track[] tracks = sequence.getTracks();
if( tracks != null ){
int count = tracks.length;
for( int i = 0 ; i < count; i++ ){
this.setSolo( i , false );
this.setMute( i , false );
}
}
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
示例4: getMicrosecondsPerQuarterNote
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Gets the number of microseconds per quarter note for a sequence, used to
* determine its BPM.
*
* @param sequence
* @return
*/
private static int getMicrosecondsPerQuarterNote(Sequence sequence) {
// Check all MIDI tracks for MIDI_SET_TEMPO message
for (Track track : sequence.getTracks()) {
for (int i = 0; i < track.size(); i++) {
MidiEvent event = track.get(i);
MidiMessage message = event.getMessage();
if (message instanceof MetaMessage) {
MetaMessage m = (MetaMessage) message;
byte[] data = m.getData();
int type = m.getType();
if (type == MIDI_SET_TEMPO) {
return ((data[0] & 0xff) << 16) | ((data[1] & 0xff) << 8) | (data[2] & 0xff);
}
}
}
}
return 0;
}
示例5: findFirstTempo
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Find the first tempo meta message and return the tempo value
* @return
*/
public static float findFirstTempo(Sequence sequence) throws Exception
{
for(Track track : sequence.getTracks())
{
for(int n=0;n<track.size();n++)
{
MidiEvent event = track.get(n);
if(event.getMessage() instanceof MetaMessage
&& ((MetaMessage)event.getMessage()).getType()==0x51)
{
float tempo = new TempoMessage((MetaMessage)event.getMessage()).getBpm();
System.out.println("Found tempomessage "+tempo+" bpm");
return tempo;
}
}
}
throw new Exception("No tempo message found");
}
示例6: getSequence
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/** Create a sequence from an InputStream.
* This is the counterpart of {@link MidiSystem#getSequence(InputStream)}
* for MUS format.
*
* @param is MUS data (this method does not try to auto-detect the format.)
*/
public static Sequence getSequence(InputStream is)
throws IOException, InvalidMidiDataException {
DataInputStream dis = new DataInputStream(is);
dis.skip(6);
int rus = dis.readUnsignedShort();
short scoreStart = Swap.SHORT((char) rus);
dis.skip(scoreStart - 8);
Sequence sequence = new Sequence(Sequence.SMPTE_30, 14, 1);
Track track = sequence.getTracks()[0];
int[] chanVelocity = new int[16];
Arrays.fill(chanVelocity, 100);
EventGroup eg;
long tick = 0;
while ((eg = nextEventGroup(dis, chanVelocity)) != null) {
tick = eg.appendTo(track, tick);
}
MetaMessage endOfSequence = new MetaMessage();
endOfSequence.setMessage(47, new byte[] {0}, 1);
track.add(new MidiEvent(endOfSequence, tick));
return sequence;
}
示例7: isTrackActive
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Takes into account both muting and solo.
*/
public boolean isTrackActive(int track)
{
Sequence song = sequencer.getSequence();
if (song == null)
return true;
if (sequencer.getTrackSolo(track))
return true;
for (int i = song.getTracks().length - 1; i >= 0; --i)
{
if (i != track && sequencer.getTrackSolo(i))
return false;
}
return !sequencer.getTrackMute(track);
}
示例8: writeToTrack
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Loads and adds the effects to the given midi track
*
* @param track The track to write to
* @param channel The channel to write to
*/
@Override
public void writeToTrack(Track track, int channel) {
long lastEnd = 0;
for (String name : effects.keySet()) {
Sequence sequence = FileUtils.LoadMidiFile("effects/" + name + ".mid");
if (sequence != null) {
int start =// Position effect in track
(int) (QUARTER * tempo.averageBpm / 60.0 * //beats per second
15 * //because 15 seconds
effects.get(name) //i-th word in text
);
if (start < lastEnd)
start = (int) lastEnd;
if (sequence.getMicrosecondLength() / 1000000.0 + TicksInSecs(start, tempo.resolution) > 15.0) {
start -= SecsInTicks(TicksInSecs(start, tempo.resolution) + sequence.getMicrosecondLength() / 1000000.0 - 15, tempo.resolution);
}
float scale = tempo.resolution / (float) sequence.getResolution(); // Make the tempo fit
for (Track t : sequence.getTracks()) {
for (int i = 0; i < t.size(); i++) {
MidiEvent event = t.get(i);
byte[] data = event.getMessage().getMessage();//(command & 0xF0) | (channel & 0x0F)
data[0] += 2; // Keep channel 1 and 2 free
long tick = (long) (event.getTick() * scale) + start;
MidiEvent ev = new MidiEvent(new MidiMessage(data) {
@Override
public Object clone() {
return null;
}
}, tick);
track.add(ev);
if (tick > lastEnd)
lastEnd = tick;
}
}
}
}
}
示例9: setSequence
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
synchronized void setSequence(Sequence seq) {
if (seq == null) {
init();
return;
}
tracks = seq.getTracks();
muteSoloChanged();
resolution = seq.getResolution();
divisionType = seq.getDivisionType();
trackReadPos = new int[tracks.length];
// trigger re-initialization
checkPointMillis = 0;
needReindex = true;
}
示例10: getMidiFileTypes
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
public int[] getMidiFileTypes(Sequence sequence)
{
if (sequence.getTracks().length == 1)
return new int[]{0};
else
return new int[]{1};
}
示例11: ChangeResolution
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* Change resolution (TPQN) and retiming events.
* @param seq Sequence to be processed.
* @param resolution Ticks per quarter note of new sequence.
* @return New sequence with new resolution.
* @throws InvalidMidiDataException throw if MIDI data is invalid.
*/
public static Sequence ChangeResolution(Sequence sourceSeq, int resolution) throws InvalidMidiDataException
{
// sequence must be tick-based
if (sourceSeq.getDivisionType() != Sequence.PPQ)
{
throw new UnsupportedOperationException("SMPTE is not supported.");
}
Sequence seq = new Sequence(sourceSeq.getDivisionType(), resolution);
// process all input tracks
for (int trackIndex = 0; trackIndex < sourceSeq.getTracks().length; trackIndex++)
{
Track sourceTrack = sourceSeq.getTracks()[trackIndex];
Track track = seq.createTrack();
// process all events
double timingRate = (double) resolution / sourceSeq.getResolution();
for (int eventIndex = 0; eventIndex < sourceTrack.size(); eventIndex++)
{
MidiEvent sourceEvent = sourceTrack.get(eventIndex);
MidiEvent event = new MidiEvent(sourceEvent.getMessage(), Math.round(sourceEvent.getTick() * timingRate));
track.add(event);
}
}
// if the target resolution is shorter than source resolution,
// events at different timing might be located at the same timing.
// As a result, there might be zero-length note and/or
// same control changes at the same timing.
//
// Probably, they should be removed for better conversion.
// I do not remove them anyway at the moment,
// because it does not cause any major problems.
return seq;
}
示例12: sequence2polylist
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
static public Polylist sequence2polylist(Sequence seq)
{
Track track[] = seq.getTracks();
PolylistBuffer buffer = new PolylistBuffer();
for( int i = 0; i < track.length; i++ )
{
buffer.append(track2polylist(track[i]).cons(i).cons("track"));
}
return buffer.toPolylist();
}
示例13: FrinikaSequence
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
public FrinikaSequence(Sequence sequence) throws InvalidMidiDataException
{
super(sequence.getDivisionType(),sequence.getResolution());
for(Track track : sequence.getTracks())
{
FrinikaTrackWrapper trackWrapper = new FrinikaTrackWrapper(track);
trackWrapper.setSequence(this);
tracks.add(track);
frinikaTrackWrappers.add(trackWrapper);
}
}
示例14: createFastPrototypes
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
/**
* A hack to get a real FastShortMessage that can be cloned, e.g. Prototype
*/
private static void createFastPrototypes() {
try {
// create a sequence with a ShortMessage
Sequence sequence = new Sequence(Sequence.PPQ, 10);
Track track = sequence.createTrack();
track.add(new MidiEvent(new ShortMessage(), 0l));
// save the sequence
try {
File file = File.createTempFile("FSMhack", "mid");
MidiSystem.write(sequence, 0, file);
// load the sequence and get back the FastShortMessage
sequence = MidiSystem.getSequence(file);
track = sequence.getTracks()[0];
MidiMessage msg = null;
for ( int i = 0; i < track.size(); i++ ) {
msg = track.get(i).getMessage();
Class clazz = msg.getClass();
if ( fastShortPrototype == null &&
clazz.getCanonicalName().equals("com.sun.media.sound.FastShortMessage") ) {
fastShortPrototype = msg;
}
}
file.delete();
} catch ( IOException ioe ) {
}
} catch ( InvalidMidiDataException imde ) {
}
}
示例15: appendTo
import javax.sound.midi.Sequence; //导入方法依赖的package包/类
long appendTo(Sequence sequence, int trackNum, long pos) {
Track track = sequence.getTracks()[trackNum];
for (MidiMessage msg: messages) {
track.add(new MidiEvent(msg, pos));
}
return pos + delay * 3;
}