2016-06-09 2 views
2

나는 이런 .CSV 표현으로 미디 파일을 변환 할 :JFugue를 사용하여 MIDI 파일을 구문 분석하고 .csv 파일을 출력 하시겠습니까?

Notename이 startTick는, 시간, 속도

도 포함하여 전체 코드가 (노트 세트는 동일한 틱에서 시작).

이제 JFugue에는 MidiParser 클래스가 있는데, 그렇게 할 수있는 것처럼 보입니다. 내 자신의 구현 조금 원유 및 이벤트 또는 휴식 또는 화음 해제 노트를 검색하지 않습니다.

그래서, 이것을 달성 할 수있는 JFugue의 기능이 있습니까?

+0

실제 질문은 무엇입니까? –

+0

질문에 명확히 설명되어 있습니다. –

답변

1

자신 만의 ParserListener ("CsvParserListener")를 만들어 MidiParser에 리스너로 추가하고 CsvParserListener에서 CSV 파일을 만드는 방법을 알 수 있습니다.

ParserListener는 JFugue의 인터페이스입니다. ParserListener를 구현하는 대신 ParserListenerAdapater를 확장 할 수도 있습니다.

두 번째 방법이 있습니다. AuxilliaryMidiParser를 구현해, parseHandledEvent (MidiEvent e)를 오버라이드 (override)하는 클래스를 작성할 수도 있습니다. 노트가 연주 될 때 틱에 쉽게 접근 할 수 있으므로 MIDI 이벤트에 직접 액세스 할 수 있습니다. AuxilliaryMidiParser를 일반 MidiParser에 추가 한 다음 midiParser.parse (File)를 호출하고 마지막으로 CSV 파일을 저장하도록 작성한 보조 파서의 메소드를 호출합니다.

+0

이것은 정확히 내가 찾던 것이지만 시작할 수는 없습니다. 모든 메서드 스텁이있는 CSVParserListener가 있습니다. 내 청취자를 MidiParser에 추가했습니다. 모든 것을 어떻게 수행 할 것인가? 그리고 메소드가 무엇을해야 하는가? (javadoc이 말하는 것과는 별도로)? 비슷한 목표를 달성 한 수업이 있습니까? 여러 구현자가 있지만 일부는 썩어 있습니다 (MusicFileRenderer 및 MusicXMLListener). –

+0

이제, MidiParser의 parse (File) 메소드를 호출하십시오. 파서는 청취자에게 이벤트를 발생시킵니다. 마지막으로, CSVParserListener에 getCsv() 또는 saveCsv (File) 메소드가 있는지 확인하고 midiParser.parse (File)를 호출 한 직후에이 메소드를 호출하십시오. –

+0

고마워, 너 정말 나를 도와 줬어. 그것은 합리적으로 잘 작동합니다. 내가 제안한 첫 번째 방법을 선택했습니다. 두 번째 코드를 시도해 볼 수도 있습니다. 코드가 그대로 표시되지 않기 때문입니다. 그들은 단순히 별도의 노트로 파싱되며, 노트의 '시작 시간'에 대한 정보가 없기 때문에 코드를 함께 다시 편곡하는 것은 불가능합니다. –

관련 문제