*GUI パネルで操作できるようにしてみる [#t7d53979]
GUI は下記の bmp リソースと editor.cpp/hpp からできています。
vstxsynth_gui.zip に以下を追加してみました。
***画面 [#rac57412]
#ref(vstxsynth_gui2.png)
***bmp リソース [#l9143ef3]
|背景|つまみスイッチ|チェックスイッチ|
|BG_BITMAP|SWITCH_BITMAP|SWITCH2_BITMAP|
|#ref(back.png)|#ref(switch.png)|#ref(switch2.png)|
***bmp リソース番号 [#kfec4687]
editor.hpp
enum
{
BG_BITMAP = 1,
SWITCH_BITMAP = 2,
SWITCH2_BITMAP = 3,
};
***背景表示 [#odca8aca]
EditorClass クラスのコンストラクタで CBitmap クラスを作成して back.bmp を設定。
editor.cpp
EditorClass::EditorClass( void* effect ) : AEffGUIEditor( ( AudioEffect* )effect )
{
BackGround = new CBitmap( BG_BITMAP );
rect.left = 0;
rect.top = 0;
rect.right = ( VstInt16 )BackGround->getWidth();
rect.bottom = ( VstInt16 )BackGround->getHeight();
}
bool EditorClass::open( void *ptr )
{
int i;
AEffGUIEditor::open( ptr );
// 背景
CRect size( rect.left, rect.top, rect.right, rect.bottom );
CFrame* frame = new CFrame( size, ptr, this );
CPoint point( 0, 0 );
frame->setBackground( BackGround );
this->frame = frame;
frame->removeAll();
:
void EditorClass::close( void )
{
if( frame )
{
delete frame;
frame = 0;
}
}
***つまみスイッチ [#i80d8470]
vstxsynth サンプルの
kFreq1
kVolume1
kFreq2
kVolume2
kVolume
をつまみスイッチに対応させる。
つまみスイッチは CAnimKnob を使用。
以下参照。
editor.cpp
bool EditorClass::open( void *ptr )
{
:
// つまみスイッチ (CAnimKnob)
CBitmap *knob_bitmap = new CBitmap( SWITCH_BITMAP );
for( i = 0; i < KNOB_COUNT; i ++ )
{
size( 0, 0, knob_bitmap->getWidth(), knob_bitmap->getHeight() / 25 );
size.offset( KnobPosition[ i ][ 1 ], KnobPosition[ i ][ 2 ] );
point( 0, 0 );
AnimKnob[ i ] = new CAnimKnob( size, this, KnobPosition[ i ][ 0 ], 25, knob_bitmap->getHeight() / 25, knob_bitmap, point );
AnimKnob[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
frame->addView( AnimKnob[ i ] );
}
knob_bitmap->forget();
:
void EditorClass::idle( void )
{
int i;
AEffGUIEditor::idle();
for( i = 0; i < KNOB_COUNT; i ++ )
{
AnimKnob[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
}
:
***チェックスイッチ [#rc16e1b2]
kWaveform1
kWaveform2
をチェックスイッチに対応させる。
チェックスイッチは CHorizontalSwitch で使用。
縦に複数並んだ bmp を利用する場合に使う。
以下参照。
:
// スイッチ (CHorizontalSwitch)
CBitmap *moviebutton_bitmap = new CBitmap( SWITCH2_BITMAP );
for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
{
size( 0, 0, moviebutton_bitmap->getWidth(), moviebutton_bitmap->getHeight() / 2 );
size.offset( MovieButtonPosition[ i ][ 1 ], MovieButtonPosition[ i ][ 2 ] );
point( 0, 0 );
MovieButton[ i ] = new CMovieButton( size, this, MovieButtonPosition[ i ][ 0 ], moviebutton_bitmap->getHeight() / 2, moviebutton_bitmap, point );
frame->addView( MovieButton[ i ] );
}
moviebutton_bitmap->forget();
:
void EditorClass::idle( void )
{
:
for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
{
MovieButton[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
}
}
***数値表示 [#p7af459a]
数値表示は CParamDisplay を使用。
以下参照。
bool EditorClass::open( void *ptr )
{
:
// つまみのパラメータ
for( i = 0; i < KNOB_COUNT; i ++ )
{
size( 1, 1, 222, 30 );
size.offset( 32, KnobPosition[ i ][ 2 ] );
ParamDisplay[ i ] = new CParamDisplay( size );
ParamDisplay[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
frame->addView( ParamDisplay[ i ] );
}
:
// スイッチのパラメータ
for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
{
size( 1, 1, 222, 30 );
size.offset( 32, MovieButtonPosition[ i ][ 2 ] );
ParamDisplay2[ i ] = new CParamDisplay( size );
ParamDisplay2[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
frame->addView( ParamDisplay2[ i ] );
}
:
void EditorClass::idle( void )
{
:
for( i = 0; i < KNOB_COUNT; i ++ )
{
ParamDisplay[ i ]->setValue( effect->getParameter( KnobPosition[ i ][ 0 ] ) );
}
:
for( i = 0; i < MOVIEBUTTON_COUNT; i ++ )
{
ParamDisplay2[ i ]->setValue( effect->getParameter( MovieButtonPosition[ i ][ 0 ] ) );
}
:
***ダウンロード [#e0186163]
ソースファイルのみです。VisualStudio.NET2003 でビルドできます。
vstxsynth_gui フォルダと同じフォルダに vstsdk2.4 を置いて下さい。
#ref(vstxsynth_gui2.zip)~
----
[[前に戻る>VST Plugin]]