2012-12-28 4 views
1

Java에서 MIDI 파일을 재생하는 간단한 응용 프로그램을 만들고 있습니다.
javax.sound.midi 라이브러리를 사용하고 있습니다.자바에서 재생하기위한 하드웨어 MIDI 출력?

내 MIDI 출력 장치를 올바르게 검색 할 수 있습니다 (USB에서 MIDI 케이블로).

그러나 시퀀스를 재생할 때 항상 호스트 OS의 일반 MIDI (Soundfont) 재생 인 기본 사운드 합성기에서 재생됩니다.

내가 겪고있는 문제는 기본 MIDI Out을 변경하는 것입니다. 내가

Receiver MidiOutReceiver; //instantiated earlier 
Sequencer MidiOutSequencer = MidiSystem.getSequencer(); 
MidiOutSequencer.open(); 
MidiOutSequencer.start(); 

을 실행하면

나는 스피커에서 MIDI 시퀀스 재생을들을 수 있습니다.

documentation

 
3.10. 
The "Java Sound Sequencer" is implicitly connected to the default Synthesizer, 
3.5. 
In your program you can obtain a Synthesizer instance yourself and connect 
it to a sequencer explicitly using a Transmitter/Receiver pair. 
So you know which Synthesizer is used. 
In case you obtained a Sequencer that is pre-connected to a Synthesizer, 
you can find out the Synthesizer by using the method getTransmitters(). 
를 참조 후, 그러나 명시 적으로 송신기/수신기 쌍을 사용하여 새 기본 신디사이저와 시퀀서 객체를 생성하는 방법이 언급되어 있지 않습니다.

올바른 송신기 및 수신기가 있습니다. 하지만 그들은 MIDI 아웃에서 재생되지 않습니다.

또한 나는 아무것도 변경하지 않는 것

MidiSystem.getTransmitter().setReceiver(MidiOutReceiver); 

을하려고 할 때.

어떻게이 수신기/송신기 쌍을 신디사이저와 함께 사용하여 기본 시퀀서가 내 MIDI 출력 포트를 사용합니까?

답변

1

나는 간단한 것을 간과했다. 기본 SequencerMidiSystem.getSequencer();으로, 송신기에는 MIDI 출력 장치를 추가하는 setReceiver() 메서드가 있습니다. 그러나 올바른 MIDI 출력 장치가 있어야합니다. 우연히 잘못된 장치를 선택했습니다.

먼저 정확한 출력 장치는 DeviceInfos 배열을보고 올바른 장치를 골라서 Sequencer을 올바른 Receiver으로 설치하여 선택합니다.

MidiDevice.Info[] MidiDeviceInfos = MidiSystem.getMidiDeviceInfo(); 
//find the suitable device number here, based on some criteria 
MidiDevice MidiOutDevice = MidiSystem.getMidiDevice(MidiDeviceInfos[DEVICE_NUMBER]); 
Receiver MidiOutReceiver = MidiOutDevice.getReceiver(); 
Sequencer MidiOutSequencer = MidiSystem.getSequencer(); 
//Add the new MIDI out device here. 
MidiOutSequencer.getTransmitter().setReceiver(MidiOutReceiver); 
MidiOutSequencer.open(); 

지금 당신은 할 수 open() 파일 및 play()은,하지만 MIDI 출력 디바이스는 또한 당신이들을 수 있습니다 사용되는 기본부터 일반 MIDI /위한 SoundFont MIDI도 들린다. 이것은 처음에 나를 물리쳐 버렸지 만, 이제는 MIDI 장치가 추가 된 Receiver에서 열린 시퀀스를 보낼 것입니다.