home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SAMPLES / MIDI.PRG < prev    next >
Text File  |  1994-06-07  |  8KB  |  189 lines

  1. #include "FiveWin.ch"
  2.  
  3. Function Sequencer()
  4.    Local cPrompt    // Declared to avoid array range error. See FOR loop
  5.    Local oDlg,lMute,lLeft,lRight,lOpen
  6.    Local oPLay,oStop,oAvTrack,oReTrack,oOpenClose,oSalir
  7.    Local oT1,oT2,oT3,oT4,oT5,oT6,oT7,oT8,oT9,oT10
  8.    Local oL1,oL2,oL3,oL4,oL5,oL6,oL7,oL8,oN9,oN10,l1,l2,l3,l4,l5,l6,l7,l8,n9,n10
  9.    Local cBuffer:=Space(200),oSBRight,oSBLeft,nVolR:=0,nVolL:=0
  10.    Local oTextLV,oTextRV
  11.    Local oTimer,oTracks[25]
  12.    Local aoStat[18],acStat[18]
  13.    Local cFile:=Space(30)
  14.    Local nA,oFile,oType,oFind
  15.  
  16.    DEFINE DIALOG oDlg RESOURCE "SEQUENCER"
  17.    
  18.    mciSendStr("OPEN SEQUENCER ALIAS MIDI",@cBuffer,oDlg:hWnd)
  19.    
  20.     DEFINE TIMER oTimer INTERVAL 2000 ACTION (GetStat(@acStat,@oDlg),RefreshStat(@aoStat,@acStat))
  21.  
  22.    mciSendStr("CAPABILITY MIDI CAN EJECT"      ,@cBuffer,oDlg:hWnd)
  23.    l1 :=  cBuffer=="verdadero"
  24.    mciSendStr("CAPABILITY MIDI CAN PLAY"       ,@cBuffer,oDlg:hWnd)  
  25.    l2 := cBuffer=="verdadero"
  26.    mciSendStr("CAPABILITY MIDI CAN RECORD"     ,@cBuffer,oDlg:hWnd)
  27.    l3 := cBuffer=="verdadero"
  28.    mciSendStr("CAPABILITY MIDI CAN SAVE"       ,@cBuffer,oDlg:hWnd)
  29.    l4 := cBuffer=="verdadero"
  30.    mciSendStr("CAPABILITY MIDI COMPOUND DEVICE",@cBuffer,oDlg:hWnd)
  31.    l5 := cBuffer=="verdadero"
  32.    mciSendStr("CAPABILITY MIDI HAS AUDIO"      ,@cBuffer,oDlg:hWnd)
  33.    l6 := cBuffer=="verdadero"
  34.    mciSendStr("CAPABILITY MIDI HAS VIDEO"      ,@cBuffer,oDlg:hWnd)
  35.    l7 := cBuffer=="verdadero"
  36.    mciSendStr("CAPABILITY MIDI USES FILES"      ,@cBuffer,oDlg:hWnd)
  37.    l8 := cBuffer=="verdadero"
  38.    mciSendStr("CAPABILITY MIDI INPUTS"      ,@cBuffer,oDlg:hWnd)
  39.    n9 := Trim(cBuffer)
  40.    mciSendStr("CAPABILITY MIDI OUTPUTS"      ,@cBuffer,oDlg:hWnd)
  41.    n10 := Trim(cBuffer)
  42.  
  43.    REDEFINE BUTTON oPlay      ID 103 OF oDlg ACTION mciSendStr("PLAY MIDI FROM 0",@cBuffer,oDlg:hWnd)
  44.    REDEFINE BUTTON oStop      ID 109 OF oDlg ACTION mciSendStr("STOP MIDI",@cBuffer,oDlg:hWnd)
  45.    REDEFINE BUTTON oAvTrack   ID 101 OF oDlg ACTION ( AvPista(@oDlg),mciSendStr("PLAY MIDI",@cBuffer,oDlg:hWnd) )
  46.    REDEFINE BUTTON oReTrack   ID 106 OF oDlg ACTION ( RePista(@oDlg),mciSendStr("PLAY MIDI",@cBuffer,oDlg:hWnd) )
  47.    REDEFINE BUTTON oOpenClose ID 107 OF oDlg ACTION OpenClose(@oDlg)
  48.    REDEFINE BUTTON oSalir     ID 115 OF oDlg ACTION ( mciSendStr("STOP MIDI",@cBuffer,oDlg:hWnd),mciSendStr("CLOSE MIDI",@cBuffer,oDlg:hWnd),oDlg:End() )
  49.  
  50.    REDEFINE BUTTON oFind ID 116 OF oDlg ACTION (cFile:=cGetFile("Midi Audio File (*.mid) | *.mid","Select a Midi Audio File"),;
  51.     mciSendStr("CLOSE MIDI",@cBuffer,oDlg:hWnd),;
  52.     mciSendStr("OPEN SEQUENCER!"+Upper(Alltrim(cFile))+" ALIAS MIDI",@cBuffer,oDlg:hWnd),;
  53.     oFile:Refresh()==nil)
  54.  
  55.    REDEFINE GET oFile VAR cFile ID 300 OF oDlg VALID;
  56.    (If(Empty(cFile),(cFile:=cGetFile("Midi Audio File (*.mid) | *.mid","Select a Midi Audio File"))!=nil,.t.),;
  57.     mciSendStr("CLOSE MIDI",@cBuffer,oDlg:hWnd)!=-1,;
  58.     mciSendStr("OPEN SEQUENCER!"+Upper(Alltrim(cFile))+" ALIAS MIDI",@cBuffer,oDlg:hWnd)!=-1,;
  59.     oFile:Refresh()==nil)
  60.  
  61.    REDEFINE CHECKBOX oL1 VAR l1 ID 150 OF oDlg
  62.    REDEFINE CHECKBOX oL2 VAR l2 ID 151 OF oDlg
  63.    REDEFINE CHECKBOX oL3 VAR l3 ID 152 OF oDlg
  64.    REDEFINE CHECKBOX oL4 VAR l4 ID 153 OF oDlg
  65.    REDEFINE CHECKBOX oL5 VAR l5 ID 154 OF oDlg
  66.    REDEFINE CHECKBOX oL6 VAR l6 ID 155 OF oDlg
  67.    REDEFINE CHECKBOX oL7 VAR l7 ID 156 OF oDlg
  68.    REDEFINE CHECKBOX oL8 VAR l8 ID 157 OF oDlg
  69.    REDEFINE SAY oN9  PROMPT n9  ID 158 OF oDlg
  70.    REDEFINE SAY oN10 PROMPT n10 ID 159 OF oDlg
  71.  
  72.    mciSendStr("CAPABILITY MIDI DEVICE TYPE"      ,@cBuffer,oDlg:hWnd)
  73.    REDEFINE SAY oType PROMPT UPPER(cBuffer) ID 190 OF oDlg
  74.  
  75.    AuxGetVol(5,@nVolL,@nVolR)
  76.    REDEFINE SAY oTextLV PROMPT Str(nVolR) ID 122 OF oDlg
  77.    REDEFINE SAY oTextRV PROMPT Str(nVolR) ID 123 OF oDlg
  78.  
  79.    GetStat(@acStat,@oDlg)
  80.    For nA=1 TO LEN(aoStat)
  81.       cPrompt := acStat[nA]
  82.       REDEFINE SAY aoStat[nA] PROMPT cPrompt ID 160+(nA-1) OF oDlg
  83.    Next nA
  84.  
  85.    REDEFINE SCROLLBAR oSBRight ID 130 RANGE 0,32 ;
  86.     ON UP   (AuxGetVol(5,@nVolL,@nVolR),;
  87.              AuxSetVol(5,if(nVolL<63000,nVolL+2047,nVolL),nVolR),;
  88.              AuxGetVol(5,@nVolL,@nVolR),;
  89.              oTextLV:SetText(Str(nVolL)),oTextRV:SetText(Str(nVolR)) ) ;
  90.     ON DOWN (AuxGetVol(5,@nVolL,@nVolR),;
  91.              AuxSetVol(5,if(nVolL>2047,nVolL-2047,nVolL),nVolR),;
  92.              AuxGetVol(5,@nVolL,@nVolR),;
  93.              oTextLV:SetText(Str(nVolL)),oTextRV:SetText(Str(nVolR)) )  OF oDlg
  94.  
  95.    REDEFINE SCROLLBAR oSBLeft  ID 131 RANGE 0,32 ;
  96.     ON UP  (AuxGetVol(5,@nVolL,@nVolR),;
  97.             AuxSetVol(5,nVolL,if(nVolR<63000,nVolR+2040,nVolR)),;
  98.             AuxGetVol(5,@nVolL,@nVolR),;
  99.             oTextLV:SetText(Str(nVolL)),oTextRV:SetText(Str(nVolR)) ) ;
  100.     ON DOWN (AuxGetVol(5,@nVolL,@nVolR),;
  101.              AuxSetVol(5,nVolL,if(nVolR>2047,nVolR-2040,nVolR)),;
  102.              AuxGetVol(5,@nVolL,@nVolR),;
  103.              oTextLV:SetText(Str(nVolL)),oTextRV:SetText(Str(nVolR)) ) OF oDlg
  104.  
  105.    ACTIVATE DIALOG oDlg ON INIT (oSBLeft:SetPos(nVolL/2047)==oSBRight:SetPos(nVolR/2047),oTimer:Activate()==Nil)
  106.  
  107.    RELEASE TIMER oTimer   
  108.  
  109.    RETURN Nil
  110.  
  111. Static Function GetStat(acStat,oDlg)
  112.    Local cBuffer:=Space(200),aMessages:={"STATUS MIDI ALIGNMENT",;
  113.                                          "STATUS MIDI BITSPERSAMPLE",;
  114.                                          "STATUS MIDI BYTESPERSEC",;
  115.                                          "STATUS MIDI CHANNELS",;
  116.                                          "STATUS MIDI CURRENT TRACK",;
  117.                                          "STATUS MIDI FORMAT TAG",;
  118.                                          "STATUS MIDI INPUT",;
  119.                                          "STATUS MIDI LENGTH",;
  120.                                          "STATUS MIDI LEVEL",;
  121.                                          "STATUS MIDI MEDIA PRESENT",;
  122.                                          "STATUS MIDI MODE",;
  123.                                          "STATUS MIDI NUMBER OF TRACKS",;
  124.                                          "STATUS MIDI OUTPUT",;
  125.                                          "STATUS MIDI POSITION",;
  126.                                          "STATUS MIDI READY",;
  127.                                          "STATUS MIDI SAMPLESPERSEC",;
  128.                                          "STATUS MIDI START POSITION",;
  129.                                          "STATUS MIDI TIME FORMAT" }
  130.    Local nA,cActTrack
  131.  
  132.    For nA=1 TO Len(aMessages)
  133.       mciSendStr(aMessages[nA],@cBuffer,oDlg:hWnd)
  134.       acStat[nA]=Upper(trim(cBuffer))
  135.    Next nA
  136.    Return
  137.  
  138. Static Function RefreshStat(aoStat,acStat)
  139.    Local nA
  140.    
  141.    For nA=1 to Len(aoStat)
  142.       aoStat[nA]:SetText(acStat[nA])
  143.    Next nA
  144.    Return
  145.  
  146.  
  147. Static Function ActPista(oDlg)
  148.    Local nActPista,cBuffer:=Space(200)
  149.  
  150.    mciSendStr("STATUS MIDI CURRENT TRACK",@cBuffer,oDlg:hWnd)
  151.    nActPista=Val(cBuffer)
  152.  
  153.    Return "TRACK : "+Ltrim(Str(nActPista))
  154.  
  155.  
  156. Static Function OpenClose(oDlg)
  157.    Local cStatus,cBuffer:=Space(200)
  158.  
  159.    mciSendStr("STATUS MIDI MODE",@cBuffer,oDlg:hWnd)
  160.  
  161.    If Upper(cBuffer)="ABIERTO" //.or. Empty(Upper(cBuffer))
  162.       mciSendStr("SET MIDI DOOR CLOSED",@cBuffer,oDlg:hWnd)
  163.    Else
  164.       mciSendStr("SET MIDI DOOR OPEN",@cBuffer,oDlg:hWnd)
  165.    Endif
  166.   
  167.    Return
  168.  
  169.  
  170. Static Function AvPista(oDlg)
  171.    Local nActPista,cBuffer:=Space(200)
  172.  
  173.    mciSendStr("STATUS MIDI CURRENT TRACK",@cBuffer,oDlg:hWnd)
  174.    nActPista=Val(cBuffer)
  175.  
  176.    mciSendStr("SEEK MIDI TO "+ltrim(Str(nActPista+1)),@cBuffer,oDlg:hWnd)
  177.   
  178.    Return
  179.  
  180. Static Function RePista(oDlg)
  181.    Local nActPista,cBuffer:=Space(200)
  182.  
  183.    mciSendStr("STATUS MIDI CURRENT TRACK",@cBuffer,oDlg:hWnd)
  184.    nActPista=Val(cBuffer)
  185.  
  186.    mciSendStr("SEEK MIDI TO "+ltrim(Str(nActPista-1)),@cBuffer,oDlg:hWnd)
  187.    
  188.    Return
  189.