Вам не нужен внешний метод для зацикливания миди-последовательности.Исходя из приведенного выше кода, вы должны использовать следующее:
import java.io.*;
import java.util.*;
import javax.sound.midi.*;
public class Midiplayer{
public static void main(String[] args) throws InvalidMidiDataException, IOException, MidiUnavailableException {
//Create scanner object
Scanner in= new Scanner(System.in);
//Request Loop Count
System.out.println("How Many Loops?");
int loops= in.nextInt();
//Retrieve the MIDI File
System.out.println("Please type in the exact location of your midi:");
String fileAndLocation= in.next();
Sequence myseq = MidiSystem.getSequence(new File(fileAndLocation));
// Create a sequencer for the sequence
final Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(myseq);
sequencer.setLoopCount(loops);
//Exit message
System.out.println("Press 'ctrl' and 'c' on keyboard simultaneously to end sequence and program.");
// Start playback, repeats automatically
sequencer.start();
//Don't forget to close reader
in.close();
}
}
Обратите внимание, что приведенное выше не создает бесконечный цикл.Моя догадка заключается в том, что вам нужно установить «loop» в 1 и увеличить его в течение оператора while, который проверяет примерно так:
while(loops>0){
//Start/restart Midi Sequence
sequencer.start();
//increment loops
loops++;
//Re-instantiate .setLoopCount()
sequencer.setLoopCount(loops);
}
Если циклопределение на основе пользователя , затем введите пользовательский ввод 0 вместо бесконечности, чтобы:
if(loops==0){
//Declare and instantiate a boolean to test
boolean infinite=true;
//Make loops equal to 1 so that the later while statement initiates and repeates
loops++;
//Re-instantiate .setLoopCount()
sequencer.setLoopCount(loops);
}
if(infinite==true){
while(loops>0){
//Start/restart Midi Sequence
sequencer.start();
//increment loops
loops++;
//Re-instantiate .setLoopCount(), thus always adding a loop to setLoopCount(), making it infinite because loops will always be greater than zero
sequencer.setLoopCount(loops);
}
}
else{
//Starts sequence and repeats according to defined loop while loops>0 (so long as you have an error cather for loops<0)
sequencer.start();
}
Для завершения пользовательского интерфейса для бесконечного цикла, в какой-то момент напомните пользователю, что в COMMAND PROMPT «ctrl» + «c» выходит из программы.
Я надеюсь, что это помогает многим людям (я основал это на своей собственной программе midi, которая работает),Однако обратите внимание, что ничего о бесконечном цикле я еще не проверял.Это только теория, основанная на тщательном анализе ситуации и доступных классов и переменных.Обратите внимание, что .setLoopCounter () присутствует в Java 1.4.1 и далее.Спасибо и я рад помочь.