Java Sequencer을 사용하여 MIDI 곡을 재생 중입니다. 이 노래는 계속 반복 재생되도록 설계되어 있습니다. sequencer. setLoopCount (Sequencer.LOOP_CONTINUOUSLY)
내부 (사운드 카드) 신시사이저를 통해 재생할 때 제대로 작동하고 (필요한 경우 dummy event이 추가됨) 루프 타이밍이 켜져 있습니다.초기 설정 이벤트에서 MIDI 곡 이벤트를 분리하십시오.
그러나 외부 (USB 또는 직렬) 신스를 통해 재생할 때 출력에서 루프가 발생하는 지점에서 현저한 차이가 있습니다. 이것은 .mid 파일의 시작 부분에 시리얼 라인을 통해 전송되는 데 시간이 걸리는 많은 설정 이벤트가 있다는 사실에 의해 설명됩니다.
노래를로드했지만 기본 (루프 된) Sequence
을 사용하지 않을 때 장치에 한 번만 전송되는 Sequence
으로 일회성 설치 이벤트를 격리하려고합니다.
두 가지 종류의 이벤트를 구별 할 수있는 간단한 알고리즘 (또는 라이브러리 함수)이 있습니까?
그것은을 제공해야합니다 : 관련 메시지의 그룹으로 전송됩니다
- Registered parameter 변경됩니다.
- 경우에 따라 채널 프로그램 변경 사항이 트랙의 중간에 보내지지만 루프 된 시퀀스의 일부 여야합니다.하지만 동일한 프로그램이 노래 전체에 걸쳐 유지되는 경우 (대부분의 경우) 프로그램 변경은 설정 순서. 템포 변경에도 동일하게 적용됩니다.
* 이것은 .mid 파일의 시작 부분에 시리얼 라인을 통해 전송되는 데 다소 시간이 걸리는 많은 설정 이벤트가 있다는 사실에 의해 설명됩니다. * - 이것은 가정 또는 guestimation입니까, 아니면 소스가 있습니까? techincal 기사 또는 디버깅 출력)을 보여줄 수 있습니까? –
@Charles Goodwin, 아니요 수동으로 이벤트를 제거하여 테스트했습니다. – finnw