2014-10-30 3 views
1

이 메모들로 구성된 미디 파일을 만들고 싶습니다. 인터넷에서이 코드를 가져 왔습니다. 이것에 문제가 있다는 것을 알 수 있다면 나는 더 나아갈 수있다. 이 응용 프로그램을 실행할 때 오류 호출 "Java 결과 1"오류가 발생합니다. 내가 필요로하는 것은 내가 이것을 통과 한 음표들로 구성된 MIDI 파일이 생성되어야한다. 전체 코드를 사용할 수 있습니다. 자바 결과 1 오류

public class CreateSequence{ 
    private static final int VELOCITY = 64; 
    public static void main(String[] args) { 
    if (args.length != 1) { 
     printUsageAndExit(); 
    } 
    File outputFile = new File(args[0]); 
    Sequence sequence = null; 
    try { 
     sequence = new Sequence(Sequence.PPQ, 1); 
    } catch (InvalidMidiDataException e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    Track track = sequence.createTrack(); 

    // first chord: C major 
    track.add(createNoteOnEvent(60, 0)); 
    track.add(createNoteOnEvent(64, 0)); 
    track.add(createNoteOnEvent(67, 0)); 
    track.add(createNoteOnEvent(72, 0)); 
    track.add(createNoteOffEvent(60, 1)); 
    track.add(createNoteOffEvent(64, 1)); 
    track.add(createNoteOffEvent(67, 1)); 
    track.add(createNoteOffEvent(72, 1)); 

    // second chord: f minor N 
    track.add(createNoteOnEvent(53, 1)); 
    track.add(createNoteOnEvent(65, 1)); 
    track.add(createNoteOnEvent(68, 1)); 
    track.add(createNoteOnEvent(73, 1)); 
    track.add(createNoteOffEvent(63, 2)); 
    track.add(createNoteOffEvent(65, 2)); 
    track.add(createNoteOffEvent(68, 2)); 
    track.add(createNoteOffEvent(73, 2)); 

    // third chord: C major 6-4 
    track.add(createNoteOnEvent(55, 2)); 
    track.add(createNoteOnEvent(64, 2)); 
    track.add(createNoteOnEvent(67, 2)); 
    track.add(createNoteOnEvent(72, 2)); 
    track.add(createNoteOffEvent(64, 3)); 
    track.add(createNoteOffEvent(72, 3)); 

    // forth chord: G major 7 
    track.add(createNoteOnEvent(65, 3)); 
    track.add(createNoteOnEvent(71, 3)); 
    track.add(createNoteOffEvent(55, 4)); 
    track.add(createNoteOffEvent(65, 4)); 
    track.add(createNoteOffEvent(67, 4)); 
    track.add(createNoteOffEvent(71, 4)); 

    // fifth chord: C major 
    track.add(createNoteOnEvent(48, 4)); 
    track.add(createNoteOnEvent(64, 4)); 
    track.add(createNoteOnEvent(67, 4)); 
    track.add(createNoteOnEvent(72, 4)); 
    track.add(createNoteOffEvent(48, 8)); 
    track.add(createNoteOffEvent(64, 8)); 
    track.add(createNoteOffEvent(67, 8)); 
    track.add(createNoteOffEvent(72, 8)); 

    //Now we just save the Sequence to the file we specified. 
    //The '0' (second parameter) means saving as SMF type 0. 
    //Since we have only one Track, this is actually the only option 
    //(type 1 is for multiple tracks). 
    try { 
     MidiSystem.write(sequence, 0, outputFile); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    } 

    private static MidiEvent createNoteOnEvent(int nKey, long lTick) { 
    return createNoteEvent(ShortMessage.NOTE_ON, nKey, VELOCITY, lTick); 
    } 

    private static MidiEvent createNoteOffEvent(int nKey, long lTick) { 
    return createNoteEvent(ShortMessage.NOTE_OFF, nKey, 0, lTick); 
    } 

    private static MidiEvent createNoteEvent(int nCommand, int nKey, 
              int nVelocity, long lTick) { 
    ShortMessage message = new ShortMessage(); 
    try { 
     message.setMessage(nCommand, 0, nKey, nVelocity); // 0 always on channel 1 
    } catch (InvalidMidiDataException e) { 
     e.printStackTrace(); 
     System.exit(1); 
    } 
    MidiEvent event = new MidiEvent(message, lTick); 
    return event; 
    } 

    private static void printUsageAndExit(){ 
     out("usage:"); 
     out("java CreateSequence <midifile>"); 
     System.exit(1); 
    } 

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

출력 당신은 인수로 출력 파일 이름을 전달해야

usage: 
    java CreateSequence <midifile> 
    Java Result: 1 
+1

실행할 때 정확한 결과를 붙여 넣으십시오. –

+1

"Java result 1"오류가 없습니다. 이것이 당신의 상황에서 의미 할 수있는 유일한 것은 응용 프로그램이 상태 코드 1로 종료한다는 것입니다. 즉, 코드의'System.exit (1)'줄 중 하나에 도달했음을 의미합니다. 그러나 더 이상의 정보가 없다면, 그것이 일어날 이유를 말하기 란 불가능합니다. –

+0

나는'System.exit (1)'을 치고 싶다고 확신한다. – user3805160

답변

0

입니다. 올바른 arg 카운트로 실행하지 않으면 printUsafeAndExit()을 호출하기 때문에 코드 1에서 종료됩니다. 로 실행 해보십시오 : 당신은 문제가 인수를 전달 (이클립스와 같은 IDE를 사용하는 경우 초보자를위한 혼동 될 수있다)가있는 경우

java CreateSequence output.mid 

, 단지 DELE이 체크 :

if (args.length != 1) { 
    printUsageAndExit(); 
} 

그리고 하드 코드 출력 파일 :

File outputFile = new File("output.mid"); 
0

이 Java 프로그램을 어떻게 호출합니까? 코드는 명령 행에서 하나의 인수가 전달 될 것으로 기대합니다. 결과물을 보면 그 방법은 다음과 같습니다.

private static void printUsageAndExit() 
{ 
    out("usage:"); 
    out("java CreateSequence <midifile>"); 
    System.exit(1); 
} 

호출 중입니다. 실행시 파일 이름을 프로그램에 전달해야합니다.