216 lines
5.5 KiB
C++
216 lines
5.5 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include "GlobalUnit.h"
|
|
#include "VSTiFormUnit.h"
|
|
//---------------------------------------------------------------------------
|
|
#pragma package(smart_init)
|
|
#pragma link "GeneralDialogPanel"
|
|
#pragma link "TextButton"
|
|
#pragma link "ComboBoxComponent"
|
|
#pragma link "PNGButton"
|
|
#pragma link "SkinTrackBar"
|
|
#pragma resource "*.dfm"
|
|
|
|
#define TIMER_INTERVAL 50
|
|
|
|
TVSTiForm *VSTiForm;
|
|
//---------------------------------------------------------------------------
|
|
__fastcall TVSTiForm::TVSTiForm( TComponent* Owner, BYTE iVSTi, BYTE iChno, int iStart, int len )
|
|
: TForm(Owner)
|
|
{
|
|
m_iVSTi = iVSTi;
|
|
m_iChno = iChno;
|
|
m_iStartBar = iStart;
|
|
m_lenBar = len;
|
|
|
|
String strCaption = m_BKGPanel->Caption + L" - ";
|
|
strCaption += g_lstVSTi[iVSTi-0x80]->strVSTName;
|
|
m_BKGPanel->Caption = strCaption;
|
|
|
|
m_dblStart = iStart;
|
|
m_dblEnd = iStart + len;
|
|
|
|
int nBeatsPerMeasure;
|
|
switch (g_iMelodyTimeSignature) {
|
|
case 0:
|
|
nBeatsPerMeasure = 4;
|
|
break;
|
|
case 1:
|
|
nBeatsPerMeasure = 3;
|
|
break;
|
|
case 2:
|
|
nBeatsPerMeasure = 2;
|
|
break;
|
|
case 3:
|
|
nBeatsPerMeasure = 3;
|
|
break;
|
|
}
|
|
|
|
m_iCurrPos = 0;
|
|
m_dblPos = 0;
|
|
m_dblStep = TIMER_INTERVAL * (double)g_nMelodyTempo / nBeatsPerMeasure / 60.0 / len;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::FormCreate(TObject *Sender)
|
|
{
|
|
Screen->Cursor = crHourGlass;
|
|
|
|
m_BKGPanel->Font->Size = g_szFont9;
|
|
m_btnCancel->FontSize = g_szFont9;
|
|
m_btnOk->FontSize = g_szFont9;
|
|
m_cbChannel->SetFont(g_strTxtFontName, g_szFont9);
|
|
|
|
int nWidth(0), nHeight(0);
|
|
if( f_MM_ShowVSTEditor( Handle, m_panShow->Handle, &nWidth, &nHeight, -1, m_iVSTi,
|
|
g_lstVSTi[m_iVSTi-0x80]->strFileName )==S_OK ){
|
|
if( nWidth<0 && nHeight<0 ){
|
|
m_lblNoEditor->Visible = true;
|
|
}
|
|
else{
|
|
if( nWidth==0 || nHeight==0 )
|
|
BorderStyle = bsSizeable;
|
|
|
|
if( nWidth==0 )
|
|
nWidth = 300;
|
|
if( nHeight==0 )
|
|
nHeight = 150;
|
|
|
|
SetBounds( Left, Top, nWidth + 50, nHeight + 134 );
|
|
}
|
|
}
|
|
else{
|
|
m_lblNoEditor->Visible = true;
|
|
}
|
|
|
|
for( int i=0; i<16; i++ ){
|
|
m_cbChannel->AddItem( IntToStr(i+1) );
|
|
}
|
|
m_cbChannel->DefItemIndex = m_iChno;
|
|
|
|
Screen->Cursor = crDefault;
|
|
|
|
SetTransparent( this );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::FormClose(TObject *Sender, TCloseAction &Action)
|
|
{
|
|
if( m_btnStop->Visible ){
|
|
StopClick( NULL );
|
|
}
|
|
|
|
if( !m_lblNoEditor->Visible ){
|
|
f_MM_ShowVSTEditor( NULL, NULL, NULL, NULL, -1, m_iVSTi, NULL );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::FormResize(TObject *Sender)
|
|
{
|
|
m_panShow->SetBounds( m_panShow->Left, m_panShow->Top,
|
|
ClientWidth - 50, ClientHeight - 134 );
|
|
|
|
m_tbPosition->Width = m_panShow->Width;
|
|
m_tbPosition->Top = ClientHeight - 69;
|
|
|
|
m_btnPlay->Top = ClientHeight - 43;
|
|
m_btnStop->Top = m_btnPlay->Top;
|
|
m_btnOk->Top = m_btnPlay->Top + 1;
|
|
m_btnCancel->Top = m_btnOk->Top;
|
|
m_cbChannel->Top = m_btnPlay->Top + 3;
|
|
m_lblChannel->Top = m_btnPlay->Top + 6;
|
|
|
|
m_btnOk->Left = ClientWidth - 148;
|
|
m_btnCancel->Left = ClientWidth - 83;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::PlayClick(TObject *Sender)
|
|
{
|
|
double dblPos = ( (double)m_tbPosition->Position / m_tbPosition->Max ) * ( m_dblEnd - m_dblStart ) + m_dblStart;
|
|
|
|
m_btnPlay->Visible = false;
|
|
m_btnStop->Visible = true;
|
|
|
|
f_MM_PlayDemo( Handle, dblPos, m_iChno, -1, m_iVSTi, g_lstVSTi[m_iVSTi-0x80]->strFileName );
|
|
|
|
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle, TIMER_INTERVAL );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::StopClick(TObject *Sender)
|
|
{
|
|
m_btnStop->Visible = false;
|
|
m_btnPlay->Visible = true;
|
|
|
|
f_MM_Stop();
|
|
SetPlayTimer(false, m_tTimer, m_tAccuracy);
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::UMMediaTime(TMessage &Message)
|
|
{
|
|
m_dblPos += m_dblStep;
|
|
m_iCurrPos = (DWORD)( m_dblPos + 0.5 );
|
|
|
|
if( m_iCurrPos==m_tbPosition->Position )
|
|
return;
|
|
|
|
if( m_iCurrPos >= m_tbPosition->Max ){
|
|
m_dblPos = 0;
|
|
m_iCurrPos = 0;
|
|
|
|
StopClick( NULL );
|
|
}
|
|
|
|
m_tbPosition->Position = m_iCurrPos;
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::UMEditorResize(TMessage &Message)
|
|
{
|
|
int nWidth = Message.WParam,
|
|
nHeight = Message.LParam;
|
|
|
|
if( nWidth==0 )
|
|
nWidth = 300;
|
|
if( nHeight==0 )
|
|
nHeight = 150;
|
|
|
|
SetBounds( Left, Top, nWidth + 50, nHeight + 134 );
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::PositionChange(TObject *Sender)
|
|
{
|
|
if( m_iCurrPos!=m_tbPosition->Position ){
|
|
m_iCurrPos = m_tbPosition->Position;
|
|
m_dblPos = m_iCurrPos;
|
|
|
|
if( m_btnStop->Visible ){
|
|
SetPlayTimer(false, m_tTimer, m_tAccuracy);
|
|
|
|
double dblPos = ( (double)m_tbPosition->Position / m_tbPosition->Max ) * ( m_dblEnd - m_dblStart ) + m_dblStart;
|
|
f_MM_PlayDemo( Handle, dblPos, m_iChno, -1, m_iVSTi, g_lstVSTi[m_iVSTi-0x80]->strFileName );
|
|
|
|
SetPlayTimer( true, m_tTimer, m_tAccuracy, Handle, TIMER_INTERVAL );
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __fastcall TVSTiForm::ChannelChange(TComboBoxItem *Sender, int Index)
|
|
{
|
|
m_iChno = Index;
|
|
|
|
if( m_btnStop->Visible ){
|
|
f_MM_ChangeDemoParam( m_iChno, -1 );
|
|
}
|
|
}
|
|
//---------------------------------------------------------------------------
|
|
|