2012-05-11 5 views
4

나는 델파이에서 응용 프로그램과 함께 일하고 있습니다. 내 응용 프로그램에서 다른 응용 프로그램으로 출력을 보내려면 MIDIYOKE을 사용해야합니다. 두 번째 응용 프로그램은 가상 피아노 키보드입니다.델파이 2006 MIDIYOKE

enter image description here

나는 모든 패키지를 설치하고 델파이에서 MIDI 구성 요소를 얻었다.

MidiOutputPort1 및 MidiInput1 구성 요소를 사용해 보았습니다. 나는 다음과 같이 하나 개의 MIDI.The 코드가 재생 시도 :

procedure TForm3.Button1Click(Sender: TObject); 
var 
outputPort : TMidiOutputPort; 
begin 
outputPort := TMidiOutputPort.Create (Nil); 
    try 
    outputPort.PortId := -1; 
    outputPort.Active := True; 
    outputPort.PatchChange(0, 127, 0); // Gunshot 
    outputPort.NoteOn (1, 20, 127); // Play note at full volume 


    Sleep (1000); 
    outputPort.NoteOff (0, 60, 0); 
finally 
outputPort.Free 
end 
end; 

내 응용 프로그램과 keyboard.How 둘 사이의 연결을 위해 MidiOutputPort1 및 MidiInput1를 사용하는 가상 피아노 사이의 연결을 estalish 싶었다.

+0

질문에 사용한 구성 요소에 대한 링크를 추가 할 수 있습니까? – TLama

+0

@Tlame 링크입니다 http://go.to/davesmidi 및 http://www.wilsonc.demon.co.uk/d10midicomponents.htm –

답변

2

두 응용 프로그램이 모두 MIDI 동기화를 지원하면 MIDI 동기화를 사용할 수 있습니다. 이 경우 MIDIYOKE는 마스터이고 Vpk는 슬레이브입니다. 동기화는 다음 명령에 의해 처리됩니다.

mc_MIDI_Timing_Clock   = $F8; 
mc_MIDI_Start     = $FA; 
mc_MIDI_Continue    = $FB; 
mc_MIDI_Stop     = $FC; 

이전에 사용했기 때문에 지식이 약간 녹슬 었습니다. 내 코드에서 수집 할 수있는 것은 다음과 같이 작동한다는 것입니다. 슬레이브에서 슬레이브를 설정/수신 모드를 호출합니다. 다음으로 $ FA를 원하는 채널에 보냅니다. 일부 (일부가 아닌) 노예는 특정 채널을 청취 할 것을 요구합니다.

각 시계마다 $ F8이 먼저 전송됩니다. 다음으로 $ FB 메시지 앞에 두 메시지 (두 데이터 바이트 모두 0)를 보냅니다. 준비가되면 $ FC를 보냅니다.

2

필자는 요크 포트 중 하나의 포트 번호를 portid 속성에 넣어야한다고 생각합니다.

어떤 ID를 사용할 지 알기 위해서는 하드웨어를 추가하거나 미디 요크 구성을 변경하면 ID가 변경 될 수 있으므로 사용 가능한 포트를 나열해야합니다.

따라서, 사용자가 선택한 된 포트 기억, 당신이 충분히 당신을 도움이된다면

가 알려줘 장치 이름을 저장해야하고, 사용자가 장치를 :) 이름을 변경하지 않는 희망 당신의 일을 계속할 수 있어야합니다. 그렇지 않으면 내가하려고하는 것을 수행하는 오래된 코드를 파헤칩니다.

+0

그것은 도움이 딘 :(.. 나에게 코드를 보내 주시기 바랍니다 ..... 미리 감사드립니다 ... – poonam

+0

답변을 수락 했으므로 문제가 해결되었다고 생각합니다. 코드 예제에 여전히 관심이 있다면 새로운 질문을 만드십시오. –