changed mallets plugin for M/V-architecture
git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/branches/lmms-mv@640 0778d3d1-df1d-0410-868b-ea421aaaa00d
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2008-01-03 Danny McRae <khjklujn/at/yahoo/dot/com>
|
||||
* plugins/stk/mallets/mallets.h:
|
||||
* plugins/stk/mallets/mallets.cpp:
|
||||
made plugin work with M/V-architecture
|
||||
|
||||
2008-01-04 Tobias Doerffel <tobydox/at/users/dot/sourceforge/dot/net>
|
||||
|
||||
* plugins/audio_file_processor/audio_file_processor.cpp:
|
||||
|
||||
@@ -34,9 +34,6 @@
|
||||
|
||||
#include "engine.h"
|
||||
#include "gui_templates.h"
|
||||
#include "instrument_track.h"
|
||||
#include "knob.h"
|
||||
#include "note_play_handle.h"
|
||||
|
||||
#undef SINGLE_SOURCE_COMPILE
|
||||
#include "embed.cpp"
|
||||
@@ -61,17 +58,270 @@ plugin::descriptor malletsstk_plugin_descriptor =
|
||||
}
|
||||
|
||||
|
||||
mallets::mallets( instrumentTrack * _instrument_track ) :
|
||||
instrument( _instrument_track, &malletsstk_plugin_descriptor ),
|
||||
m_filesMissing( TRUE )
|
||||
malletsInstrument::malletsInstrument( instrumentTrack * _channel_track ):
|
||||
instrument( _channel_track, &malletsstk_plugin_descriptor ),
|
||||
m_hardnessModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_positionModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_vibratoGainModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_vibratoFreqModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_stickModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_modulatorModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_crossfadeModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_lfoSpeedModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_lfoDepthModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_adsrModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_pressureModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_motionModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_velocityModel(64.0f, 0.0f, 128.0f, 0.1f, this),
|
||||
m_strike(NULL),
|
||||
m_presetsModel(this),
|
||||
m_spreadModel(0, 0, 255, 1, this)
|
||||
{
|
||||
m_filesMissing =
|
||||
m_hardnessModel.setTrack( _channel_track );
|
||||
m_positionModel.setTrack( _channel_track );
|
||||
m_vibratoGainModel.setTrack( _channel_track );
|
||||
m_vibratoFreqModel.setTrack( _channel_track );
|
||||
m_stickModel.setTrack( _channel_track );
|
||||
m_modulatorModel.setTrack( _channel_track );
|
||||
m_crossfadeModel.setTrack( _channel_track );
|
||||
m_lfoSpeedModel.setTrack( _channel_track );
|
||||
m_lfoDepthModel.setTrack( _channel_track );
|
||||
m_adsrModel.setTrack( _channel_track );
|
||||
m_pressureModel.setTrack( _channel_track );
|
||||
m_motionModel.setTrack( _channel_track );
|
||||
m_velocityModel.setTrack( _channel_track );
|
||||
m_spreadModel.setTrack( _channel_track );
|
||||
|
||||
// ModalBar
|
||||
m_presetsModel.addItem( tr( "Marimba" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
m_presetsModel.addItem( tr( "Vibraphone" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
m_presetsModel.addItem( tr( "Agogo" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
m_presetsModel.addItem( tr( "Wood1" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
m_presetsModel.addItem( tr( "Reso" ) );
|
||||
m_scalers.append( 2.5 );
|
||||
m_presetsModel.addItem( tr( "Wood2" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
m_presetsModel.addItem( tr( "Beats" ) );
|
||||
m_scalers.append( 20.0 );
|
||||
m_presetsModel.addItem( tr( "Two Fixed" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
m_presetsModel.addItem( tr( "Clump" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
|
||||
// TubeBell
|
||||
m_presetsModel.addItem( tr( "Tubular Bells" ) );
|
||||
m_scalers.append( 1.8 );
|
||||
|
||||
// BandedWG
|
||||
m_presetsModel.addItem( tr( "Uniform Bar" ) );
|
||||
m_scalers.append( 25.0 );
|
||||
m_presetsModel.addItem( tr( "Tuned Bar" ) );
|
||||
m_scalers.append( 10.0 );
|
||||
m_presetsModel.addItem( tr( "Glass" ) );
|
||||
m_scalers.append( 16.0 );
|
||||
m_presetsModel.addItem( tr( "Tibetan Bowl" ) );
|
||||
m_scalers.append( 7.0 );
|
||||
|
||||
m_buffer = new sampleFrame[engine::getMixer()->framesPerPeriod()];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
malletsInstrument::~malletsInstrument()
|
||||
{
|
||||
delete[] m_buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void malletsInstrument::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
{
|
||||
// ModalBar
|
||||
m_hardnessModel.saveSettings( _doc, _this, "hardness" );
|
||||
m_positionModel.saveSettings( _doc, _this, "position" );
|
||||
m_vibratoGainModel.saveSettings( _doc, _this, "vib_gain" );
|
||||
m_vibratoFreqModel.saveSettings( _doc, _this, "vib_freq" );
|
||||
m_stickModel.saveSettings( _doc, _this, "stick_mix" );
|
||||
|
||||
// TubeBell
|
||||
m_modulatorModel.saveSettings( _doc, _this, "modulator" );
|
||||
m_crossfadeModel.saveSettings( _doc, _this, "crossfade" );
|
||||
m_lfoSpeedModel.saveSettings( _doc, _this, "lfo_speed" );
|
||||
m_lfoDepthModel.saveSettings( _doc, _this, "lfo_depth" );
|
||||
m_adsrModel.saveSettings( _doc, _this, "adsr" );
|
||||
|
||||
// BandedWG
|
||||
m_pressureModel.saveSettings( _doc, _this, "pressure" );
|
||||
m_motionModel.saveSettings( _doc, _this, "motion" );
|
||||
m_vibratoModel.saveSettings( _doc, _this, "vibrato" );
|
||||
m_velocityModel.saveSettings( _doc, _this, "velocity" );
|
||||
if( m_strike != NULL )
|
||||
{
|
||||
m_strike->model()->saveSettings( _doc, _this, "strike" );
|
||||
}
|
||||
|
||||
m_presetsModel.saveSettings( _doc, _this, "preset" );
|
||||
m_spreadModel.saveSettings( _doc, _this, "spread" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void malletsInstrument::loadSettings( const QDomElement & _this )
|
||||
{
|
||||
// ModalBar
|
||||
m_hardnessModel.loadSettings( _this, "hardness" );
|
||||
m_positionModel.loadSettings( _this, "position" );
|
||||
m_vibratoGainModel.loadSettings( _this, "vib_gain" );
|
||||
m_vibratoFreqModel.loadSettings( _this, "vib_freq" );
|
||||
m_stickModel.loadSettings( _this, "stick_mix" );
|
||||
|
||||
// TubeBell
|
||||
m_modulatorModel.loadSettings( _this, "modulator" );
|
||||
m_crossfadeModel.loadSettings( _this, "crossfade" );
|
||||
m_lfoSpeedModel.loadSettings( _this, "lfo_speed" );
|
||||
m_lfoDepthModel.loadSettings( _this, "lfo_depth" );
|
||||
m_adsrModel.loadSettings( _this, "adsr" );
|
||||
|
||||
// BandedWG
|
||||
m_pressureModel.loadSettings( _this, "pressure" );
|
||||
m_motionModel.loadSettings( _this, "motion" );
|
||||
m_vibratoModel.loadSettings( _this, "vibrato" );
|
||||
m_velocityModel.loadSettings( _this, "velocity" );
|
||||
if( m_strike != NULL )
|
||||
{
|
||||
m_strike->model()->loadSettings( _this, "strike" );
|
||||
}
|
||||
|
||||
m_presetsModel.loadSettings( _this, "preset" );
|
||||
m_spreadModel.loadSettings( _this, "spread" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QString malletsInstrument::nodeName( void ) const
|
||||
{
|
||||
return( malletsstk_plugin_descriptor.name );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void malletsInstrument::playNote( notePlayHandle * _n, bool )
|
||||
{
|
||||
if( m_filesMissing )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int p = m_presetsModel.value();
|
||||
|
||||
const float freq = _n->frequency();
|
||||
if ( _n->totalFramesPlayed() == 0 )
|
||||
{
|
||||
float vel = static_cast<float>( _n->getVolume() ) / 100.0f;
|
||||
|
||||
if( p < 9 )
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth( freq,
|
||||
vel,
|
||||
m_vibratoGainModel.value(),
|
||||
m_hardnessModel.value(),
|
||||
m_positionModel.value(),
|
||||
m_stickModel.value(),
|
||||
m_vibratoFreqModel.value(),
|
||||
p,
|
||||
(Uint8) m_spreadModel.value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
else if( p == 9 )
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth( freq,
|
||||
vel,
|
||||
p,
|
||||
m_lfoDepthModel.value(),
|
||||
m_modulatorModel.value(),
|
||||
m_crossfadeModel.value(),
|
||||
m_lfoSpeedModel.value(),
|
||||
m_adsrModel.value(),
|
||||
(Uint8) m_spreadModel.value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
else
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth( freq,
|
||||
vel,
|
||||
m_pressureModel.value(),
|
||||
m_motionModel.value(),
|
||||
m_vibratoModel.value(),
|
||||
p - 10,
|
||||
m_strike->value() * 128.0,
|
||||
m_velocityModel.value(),
|
||||
(Uint8) m_spreadModel.value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
}
|
||||
|
||||
const fpp_t frames = _n->framesLeftForCurrentPeriod();
|
||||
|
||||
malletsSynth * ps = static_cast<malletsSynth *>( _n->m_pluginData );
|
||||
sample_t add_scale = 0.0f;
|
||||
if( p == 10 )
|
||||
{
|
||||
add_scale = static_cast<sample_t>( m_strike->value() ) * freq * 2.5f;
|
||||
}
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
const sample_t left = ps->nextSampleLeft() *
|
||||
( m_scalers[m_presetsModel.value()] + add_scale );
|
||||
const sample_t right = ps->nextSampleRight() *
|
||||
( m_scalers[m_presetsModel.value()] + add_scale );
|
||||
for( Uint8 chnl = 0; chnl < DEFAULT_CHANNELS / 2; ++chnl )
|
||||
{
|
||||
m_buffer[frame][chnl * DEFAULT_CHANNELS / 2] = left;
|
||||
m_buffer[frame][( chnl + 1 ) * DEFAULT_CHANNELS / 2] = right;
|
||||
}
|
||||
}
|
||||
|
||||
getInstrumentTrack()->processAudioBuffer( m_buffer, frames, _n );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void malletsInstrument::deleteNotePluginData( notePlayHandle * _n )
|
||||
{
|
||||
delete static_cast<malletsSynth *>( _n->m_pluginData );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
instrumentView * malletsInstrument::createView( QWidget * _parent )
|
||||
{
|
||||
return( new malletsInstrumentView( this, _parent ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
malletsInstrumentView::malletsInstrumentView( malletsInstrument * _instrument, QWidget * _parent ) :
|
||||
instrumentView( _instrument, _parent )
|
||||
{
|
||||
_instrument->m_filesMissing =
|
||||
!QDir( configManager::inst()->stkDir() ).exists() ||
|
||||
!QFileInfo( configManager::inst()->stkDir() + QDir::separator()
|
||||
+ "sinewave.raw" ).exists();
|
||||
|
||||
// for some reason this crashes...???
|
||||
if( m_filesMissing )
|
||||
if( _instrument->m_filesMissing )
|
||||
{
|
||||
QMessageBox::information( 0, tr( "Missing files" ),
|
||||
tr( "Your Stk-installation seems to be "
|
||||
@@ -80,42 +330,40 @@ mallets::mallets( instrumentTrack * _instrument_track ) :
|
||||
QMessageBox::Ok );
|
||||
}
|
||||
|
||||
m_modalBarWidget = setupModalBarControls( this, _instrument_track );
|
||||
m_modalBarWidget = setupModalBarControls( this );
|
||||
setWidgetBackground( m_modalBarWidget, "artwork" );
|
||||
|
||||
m_tubeBellWidget = setupTubeBellControls( this, _instrument_track );
|
||||
m_tubeBellWidget = setupTubeBellControls( this );
|
||||
setWidgetBackground( m_tubeBellWidget, "artwork" );
|
||||
m_tubeBellWidget->hide();
|
||||
|
||||
m_bandedWGWidget = setupBandedWGControls( this, _instrument_track );
|
||||
m_bandedWGWidget = setupBandedWGControls( this );
|
||||
setWidgetBackground( m_bandedWGWidget, "artwork" );
|
||||
m_bandedWGWidget->hide();
|
||||
|
||||
m_presets = setupPresets( this, _instrument_track );
|
||||
m_presetsCombo = new comboBox( this, tr( "Instrument" ) );
|
||||
m_presetsCombo->setGeometry( 64, 157, 99, 22 );
|
||||
m_presetsCombo->setFont( pointSize<8>( m_presetsCombo->font() ) );
|
||||
|
||||
m_spread = new knob( knobBright_26, this, tr( "Spread" ),
|
||||
_instrument_track );
|
||||
m_spread->setLabel( tr( "Spread" ) );
|
||||
m_spread->setRange( 0, 255, 1 );
|
||||
m_spread->setInitValue( 0 );
|
||||
m_spread->move( 178, 173 );
|
||||
m_spread->setHintText( tr( "Spread:" ) + " ", "" );
|
||||
|
||||
m_buffer = new sampleFrame[engine::getMixer()->framesPerPeriod()];
|
||||
connect( &_instrument->m_presetsModel, SIGNAL( dataChanged() ),
|
||||
this, SLOT( changePreset() ) );
|
||||
|
||||
m_spreadKnob = new knob( knobBright_26, this, tr( "Spread" ) );
|
||||
m_spreadKnob->setLabel( tr( "Spread" ) );
|
||||
m_spreadKnob->move( 178, 173 );
|
||||
m_spreadKnob->setHintText( tr( "Spread:" ) + " ", "" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
mallets::~mallets()
|
||||
malletsInstrumentView::~malletsInstrumentView()
|
||||
{
|
||||
delete[] m_buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::setWidgetBackground( QWidget * _widget, const QString & _pic )
|
||||
void malletsInstrumentView::setWidgetBackground( QWidget * _widget, const QString & _pic )
|
||||
{
|
||||
_widget->setAutoFillBackground( TRUE );
|
||||
QPalette pal;
|
||||
@@ -127,50 +375,35 @@ void mallets::setWidgetBackground( QWidget * _widget, const QString & _pic )
|
||||
|
||||
|
||||
|
||||
QWidget * mallets::setupModalBarControls( QWidget * _parent, track * _track )
|
||||
QWidget * malletsInstrumentView::setupModalBarControls( QWidget * _parent )
|
||||
{
|
||||
QWidget * widget = new QWidget( _parent );
|
||||
widget->setFixedSize( 250, 250 );
|
||||
|
||||
m_hardness = new knob( knobBright_26, widget, tr( "Hardness" ),
|
||||
_track );
|
||||
m_hardness->setLabel( tr( "Hardness" ) );
|
||||
m_hardness->setRange( 0.0, 128.0, 0.1 );
|
||||
m_hardness->setInitValue( 64.0 );
|
||||
m_hardness->move( 145, 24 );
|
||||
m_hardness->setHintText( tr( "Hardness:" ) + " ", "" );
|
||||
m_hardnessKnob = new knob( knobBright_26, widget, tr( "Hardness" ) );
|
||||
m_hardnessKnob->setLabel( tr( "Hardness" ) );
|
||||
m_hardnessKnob->move( 145, 24 );
|
||||
m_hardnessKnob->setHintText( tr( "Hardness:" ) + " ", "" );
|
||||
|
||||
m_position = new knob( knobBright_26, widget, tr( "Position" ),
|
||||
_track );
|
||||
m_position->setLabel( tr( "Position" ) );
|
||||
m_position->setRange( 0.0, 128.0, 0.1 );
|
||||
m_position->setInitValue( 64.0 );
|
||||
m_position->move( 195, 24 );
|
||||
m_position->setHintText( tr( "Position:" ) + " ", "" );
|
||||
m_positionKnob = new knob( knobBright_26, widget, tr( "Position" ) );
|
||||
m_positionKnob->setLabel( tr( "Position" ) );
|
||||
m_positionKnob->move( 195, 24 );
|
||||
m_positionKnob->setHintText( tr( "Position:" ) + " ", "" );
|
||||
|
||||
m_vibratoGain = new knob( knobBright_26, widget, tr( "Vibrato Gain" ),
|
||||
_track );
|
||||
m_vibratoGain->setLabel( tr( "Vib Gain" ) );
|
||||
m_vibratoGain->setRange( 0.0, 128.0, 0.1 );
|
||||
m_vibratoGain->setInitValue( 64.0 );
|
||||
m_vibratoGain->move( 56, 86 );
|
||||
m_vibratoGain->setHintText( tr( "Vib Gain:" ) + " ", "" );
|
||||
m_vibratoGainKnob = new knob( knobBright_26, widget, tr( "Vibrato Gain" ) );
|
||||
m_vibratoGainKnob->setLabel( tr( "Vib Gain" ) );
|
||||
m_vibratoGainKnob->move( 56, 86 );
|
||||
m_vibratoGainKnob->setHintText( tr( "Vib Gain:" ) + " ", "" );
|
||||
|
||||
m_vibratoFreq = new knob( knobBright_26, widget, tr( "Vibrato Freq" ),
|
||||
_track );
|
||||
m_vibratoFreq->setLabel( tr( "Vib Freq" ) );
|
||||
m_vibratoFreq->setRange( 0.0, 128.0, 0.1 );
|
||||
m_vibratoFreq->setInitValue( 64.0 );
|
||||
m_vibratoFreq->move( 117, 86 );
|
||||
m_vibratoFreq->setHintText( tr( "Vib Freq:" ) + " ", "" );
|
||||
m_vibratoFreqKnob = new knob( knobBright_26, widget, tr( "Vibrato Freq" ) );
|
||||
m_vibratoFreqKnob->setLabel( tr( "Vib Freq" ) );
|
||||
m_vibratoFreqKnob->move( 117, 86 );
|
||||
m_vibratoFreqKnob->setHintText( tr( "Vib Freq:" ) + " ", "" );
|
||||
|
||||
m_stick = new knob( knobBright_26, widget, tr( "Stick Mix" ),
|
||||
_track );
|
||||
m_stick->setLabel( tr( "Stick Mix" ) );
|
||||
m_stick->setRange( 0.0, 128.0, 0.1 );
|
||||
m_stick->setInitValue( 64.0 );
|
||||
m_stick->move( 178, 86 );
|
||||
m_stick->setHintText( tr( "Stick Mix:" ) + " ", "" );
|
||||
m_stickKnob = new knob( knobBright_26, widget, tr( "Stick Mix" ) );
|
||||
m_stickKnob->setLabel( tr( "Stick Mix" ) );
|
||||
m_stickKnob->move( 178, 86 );
|
||||
m_stickKnob->setHintText( tr( "Stick Mix:" ) + " ", "" );
|
||||
|
||||
return( widget );
|
||||
}
|
||||
@@ -178,49 +411,35 @@ QWidget * mallets::setupModalBarControls( QWidget * _parent, track * _track )
|
||||
|
||||
|
||||
|
||||
QWidget * mallets::setupTubeBellControls( QWidget * _parent, track * _track )
|
||||
QWidget * malletsInstrumentView::setupTubeBellControls( QWidget * _parent )
|
||||
{
|
||||
QWidget * widget = new QWidget( _parent );
|
||||
widget->setFixedSize( 250, 250 );
|
||||
|
||||
m_modulator = new knob( knobBright_26, widget, tr( "Modulator" ),
|
||||
_track );
|
||||
m_modulator->setLabel( tr( "Modulator" ) );
|
||||
m_modulator->setRange( 0.0, 128.0, 0.1 );
|
||||
m_modulator->setInitValue( 100.0 );
|
||||
m_modulator->move( 145, 24 );
|
||||
m_modulator->setHintText( tr( "Modulator:" ) + " ", "" );
|
||||
m_modulatorKnob = new knob( knobBright_26, widget, tr( "Modulator" ) );
|
||||
m_modulatorKnob->setLabel( tr( "Modulator" ) );
|
||||
m_modulatorKnob->move( 145, 24 );
|
||||
m_modulatorKnob->setHintText( tr( "Modulator:" ) + " ", "" );
|
||||
|
||||
m_crossfade = new knob( knobBright_26, widget, tr( "Crossfade" ),
|
||||
_track );
|
||||
m_crossfade->setLabel( tr( "Crossfade" ) );
|
||||
m_crossfade->setRange( 0.0, 128.0, 0.1 );
|
||||
m_crossfade->setInitValue( 0.0 );
|
||||
m_crossfade->move( 195, 24 );
|
||||
m_crossfade->setHintText( tr( "Crossfade:" ) + " ", "" );
|
||||
m_crossfadeKnob = new knob( knobBright_26, widget, tr( "Crossfade" ) );
|
||||
m_crossfadeKnob->setLabel( tr( "Crossfade" ) );
|
||||
m_crossfadeKnob->move( 195, 24 );
|
||||
m_crossfadeKnob->setHintText( tr( "Crossfade:" ) + " ", "" );
|
||||
|
||||
m_lfoSpeed = new knob( knobBright_26, widget, tr( "LFO Speed" ),
|
||||
_track );
|
||||
m_lfoSpeed->setLabel( tr( "LFO Speed" ) );
|
||||
m_lfoSpeed->setRange( 0.0, 128.0, 0.1 );
|
||||
m_lfoSpeed->setInitValue( 20.0 );
|
||||
m_lfoSpeed->move( 56, 86 );
|
||||
m_lfoSpeed->setHintText( tr( "LFO Speed:" ) + " ", "" );
|
||||
m_lfoSpeedKnob = new knob( knobBright_26, widget, tr( "LFO Speed" ) );
|
||||
m_lfoSpeedKnob->setLabel( tr( "LFO Speed" ) );
|
||||
m_lfoSpeedKnob->move( 56, 86 );
|
||||
m_lfoSpeedKnob->setHintText( tr( "LFO Speed:" ) + " ", "" );
|
||||
|
||||
m_lfoDepth = new knob( knobBright_26, widget, tr( "LFO Depth" ),
|
||||
_track );
|
||||
m_lfoDepth->setLabel( tr( "LFO Depth" ) );
|
||||
m_lfoDepth->setRange( 0.0, 128.0, 0.1 );
|
||||
m_lfoDepth->setInitValue( 10.0 );
|
||||
m_lfoDepth->move( 117, 86 );
|
||||
m_lfoDepth->setHintText( tr( "LFO Depth:" ) + " ", "" );
|
||||
m_lfoDepthKnob = new knob( knobBright_26, widget, tr( "LFO Depth" ) );
|
||||
m_lfoDepthKnob->setLabel( tr( "LFO Depth" ) );
|
||||
m_lfoDepthKnob->move( 117, 86 );
|
||||
m_lfoDepthKnob->setHintText( tr( "LFO Depth:" ) + " ", "" );
|
||||
|
||||
m_adsr = new knob( knobBright_26, widget, tr( "ADSR" ), _track );
|
||||
m_adsr->setLabel( tr( "ADSR" ) );
|
||||
m_adsr->setRange( 0.0, 128.0, 0.1 );
|
||||
m_adsr->setInitValue( 0.0 );
|
||||
m_adsr->move( 178, 86 );
|
||||
m_adsr->setHintText( tr( "ADSR:" ) + " ", "" );
|
||||
m_adsrKnob = new knob( knobBright_26, widget, tr( "ADSR" ) );
|
||||
m_adsrKnob->setLabel( tr( "ADSR" ) );
|
||||
m_adsrKnob->move( 178, 86 );
|
||||
m_adsrKnob->setHintText( tr( "ADSR:" ) + " ", "" );
|
||||
|
||||
return( widget );
|
||||
}
|
||||
@@ -228,44 +447,36 @@ QWidget * mallets::setupTubeBellControls( QWidget * _parent, track * _track )
|
||||
|
||||
|
||||
|
||||
QWidget * mallets::setupBandedWGControls( QWidget * _parent, track * _track )
|
||||
QWidget * malletsInstrumentView::setupBandedWGControls( QWidget * _parent )
|
||||
{
|
||||
// BandedWG
|
||||
QWidget * widget = new QWidget( _parent );
|
||||
widget->setFixedSize( 250, 250 );
|
||||
|
||||
m_strike = new ledCheckBox( tr( "Bowed" ), widget, tr( "Bowed" ),
|
||||
_track );
|
||||
m_strike->move( 165, 30 );
|
||||
m_strikeLED = new ledCheckBox( tr( "Bowed" ), widget, tr( "Bowed" ) );
|
||||
m_strikeLED->move( 165, 30 );
|
||||
m_strikeLED->model()->setTrack( castModel<malletsInstrument>()->getInstrumentTrack() );
|
||||
castModel<malletsInstrument>()->m_strike = m_strikeLED;
|
||||
|
||||
m_pressure = new knob( knobBright_26, widget, tr( "Pressure" ),
|
||||
_track );
|
||||
m_pressure->setLabel( tr( "Pressure" ) );
|
||||
m_pressure->setRange( 0.0, 128.0, 0.1 );
|
||||
m_pressure->setInitValue( 64.0 );
|
||||
m_pressure->move( 56, 86 );
|
||||
m_pressure->setHintText( tr( "Pressure:" ) + " ", "" );
|
||||
m_pressureKnob = new knob( knobBright_26, widget, tr( "Pressure" ) );
|
||||
m_pressureKnob->setLabel( tr( "Pressure" ) );
|
||||
m_pressureKnob->move( 56, 86 );
|
||||
m_pressureKnob->setHintText( tr( "Pressure:" ) + " ", "" );
|
||||
|
||||
m_motion = new knob( knobBright_26, widget, tr( "Motion" ), _track );
|
||||
m_motion->setLabel( tr( "Motion" ) );
|
||||
m_motion->setRange( 0.0, 128.0, 0.1 );
|
||||
m_motion->setInitValue( 64.0 );
|
||||
m_motion->move( 117, 86 );
|
||||
m_motion->setHintText( tr( "Motion:" ) + " ", "" );
|
||||
m_motionKnob = new knob( knobBright_26, widget, tr( "Motion" ) );
|
||||
m_motionKnob->setLabel( tr( "Motion" ) );
|
||||
m_motionKnob->move( 117, 86 );
|
||||
m_motionKnob->setHintText( tr( "Motion:" ) + " ", "" );
|
||||
|
||||
m_velocity = new knob( knobBright_26, widget, tr( "Speed" ), _track );
|
||||
m_velocity->setLabel( tr( "Speed" ) );
|
||||
m_velocity->setRange( 0.0, 128.0, 0.1 );
|
||||
m_velocity->setInitValue( 74.5 );
|
||||
m_velocity->move( 178, 86 );
|
||||
m_velocity->setHintText( tr( "Speed:" ) + " ", "" );
|
||||
m_velocityKnob = new knob( knobBright_26, widget, tr( "Speed" ) );
|
||||
m_velocityKnob->setLabel( tr( "Speed" ) );
|
||||
m_velocityKnob->move( 178, 86 );
|
||||
m_velocityKnob->setHintText( tr( "Speed:" ) + " ", "" );
|
||||
|
||||
m_vibrato = new knob( knobBright_26, widget, tr( "Vibrato" ), _track );
|
||||
m_vibrato->setLabel( tr( "Vibrato" ) );
|
||||
m_vibrato->setRange( 0.0, 128.0, 0.1 );
|
||||
m_vibrato->setInitValue( 64.0 );
|
||||
m_vibrato->move( 178, 129 );
|
||||
m_vibrato->setHintText( tr( "Vibrato:" ) + " ", "" );
|
||||
m_vibratoKnob = new knob( knobBright_26, widget, tr( "Vibrato" ) );
|
||||
m_vibratoKnob->setLabel( tr( "Vibrato" ) );
|
||||
m_vibratoKnob->move( 178, 129 );
|
||||
m_vibratoKnob->setHintText( tr( "Vibrato:" ) + " ", "" );
|
||||
|
||||
return( widget );
|
||||
}
|
||||
@@ -273,221 +484,37 @@ QWidget * mallets::setupBandedWGControls( QWidget * _parent, track * _track )
|
||||
|
||||
|
||||
|
||||
comboBox * mallets::setupPresets( QWidget * _parent, track * _track )
|
||||
void malletsInstrumentView::modelChanged( void )
|
||||
{
|
||||
comboBox * presets = new comboBox( _parent, tr( "Instrument" ),
|
||||
_track );
|
||||
presets->setGeometry( 64, 157, 99, 22 );
|
||||
presets->setFont( pointSize<8>( presets->font() ) );
|
||||
|
||||
connect( presets, SIGNAL( valueChanged( int ) ),
|
||||
_parent, SLOT( changePreset( int ) ) );
|
||||
|
||||
// ModalBar
|
||||
presets->addItem( tr( "Marimba" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
presets->addItem( tr( "Vibraphone" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
presets->addItem( tr( "Agogo" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
presets->addItem( tr( "Wood1" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
presets->addItem( tr( "Reso" ) );
|
||||
m_scalers.append( 2.5 );
|
||||
presets->addItem( tr( "Wood2" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
presets->addItem( tr( "Beats" ) );
|
||||
m_scalers.append( 20.0 );
|
||||
presets->addItem( tr( "Two Fixed" ) );
|
||||
m_scalers.append( 5.0 );
|
||||
presets->addItem( tr( "Clump" ) );
|
||||
m_scalers.append( 4.0 );
|
||||
|
||||
// TubeBell
|
||||
presets->addItem( tr( "Tubular Bells" ) );
|
||||
m_scalers.append( 1.8 );
|
||||
|
||||
// BandedWG
|
||||
presets->addItem( tr( "Uniform Bar" ) );
|
||||
m_scalers.append( 25.0 );
|
||||
presets->addItem( tr( "Tuned Bar" ) );
|
||||
m_scalers.append( 10.0 );
|
||||
presets->addItem( tr( "Glass" ) );
|
||||
m_scalers.append( 16.0 );
|
||||
presets->addItem( tr( "Tibetan Bowl" ) );
|
||||
m_scalers.append( 7.0 );
|
||||
|
||||
return( presets );
|
||||
malletsInstrument * inst = castModel<malletsInstrument>();
|
||||
m_hardnessKnob->setModel( &inst->m_hardnessModel );
|
||||
m_positionKnob->setModel( &inst->m_positionModel );
|
||||
m_vibratoGainKnob->setModel( &inst->m_vibratoGainModel );
|
||||
m_vibratoFreqKnob->setModel( &inst->m_vibratoFreqModel );
|
||||
m_stickKnob->setModel( &inst->m_stickModel );
|
||||
m_modulatorKnob->setModel( &inst->m_modulatorModel );
|
||||
m_crossfadeKnob->setModel( &inst->m_crossfadeModel );
|
||||
m_lfoSpeedKnob->setModel( &inst->m_lfoSpeedModel );
|
||||
m_lfoDepthKnob->setModel( &inst->m_lfoDepthModel );
|
||||
m_adsrKnob->setModel( &inst->m_adsrModel );
|
||||
m_pressureKnob->setModel( &inst->m_pressureModel );
|
||||
m_motionKnob->setModel( &inst->m_motionModel );
|
||||
m_vibratoKnob->setModel( &inst->m_vibratoModel );
|
||||
m_velocityKnob->setModel( &inst->m_velocityModel );
|
||||
//m_strikeLED->setModel( &inst->m_strikeModel );
|
||||
m_presetsCombo->setModel( &inst->m_presetsModel );
|
||||
m_spreadKnob->setModel( &inst->m_spreadModel );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
void malletsInstrumentView::changePreset()
|
||||
{
|
||||
// ModalBar
|
||||
m_hardness->saveSettings( _doc, _this, "hardness" );
|
||||
m_position->saveSettings( _doc, _this, "position" );
|
||||
m_vibratoGain->saveSettings( _doc, _this, "vib_gain" );
|
||||
m_vibratoFreq->saveSettings( _doc, _this, "vib_freq" );
|
||||
m_stick->saveSettings( _doc, _this, "stick_mix" );
|
||||
|
||||
// TubeBell
|
||||
m_modulator->saveSettings( _doc, _this, "modulator" );
|
||||
m_crossfade->saveSettings( _doc, _this, "crossfade" );
|
||||
m_lfoSpeed->saveSettings( _doc, _this, "lfo_speed" );
|
||||
m_lfoDepth->saveSettings( _doc, _this, "lfo_depth" );
|
||||
m_adsr->saveSettings( _doc, _this, "adsr" );
|
||||
malletsInstrument * inst = castModel<malletsInstrument>();
|
||||
int _preset = inst->m_presetsModel.value();
|
||||
|
||||
// BandedWG
|
||||
m_pressure->saveSettings( _doc, _this, "pressure" );
|
||||
m_motion->saveSettings( _doc, _this, "motion" );
|
||||
m_vibrato->saveSettings( _doc, _this, "vibrato" );
|
||||
m_velocity->saveSettings( _doc, _this, "velocity" );
|
||||
m_strike->saveSettings( _doc, _this, "strike" );
|
||||
|
||||
m_presets->saveSettings( _doc, _this, "preset" );
|
||||
m_spread->saveSettings( _doc, _this, "spread" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::loadSettings( const QDomElement & _this )
|
||||
{
|
||||
// ModalBar
|
||||
m_hardness->loadSettings( _this, "hardness" );
|
||||
m_position->loadSettings( _this, "position" );
|
||||
m_vibratoGain->loadSettings( _this, "vib_gain" );
|
||||
m_vibratoFreq->loadSettings( _this, "vib_freq" );
|
||||
m_stick->loadSettings( _this, "stick_mix" );
|
||||
|
||||
// TubeBell
|
||||
m_modulator->loadSettings( _this, "modulator" );
|
||||
m_crossfade->loadSettings( _this, "crossfade" );
|
||||
m_lfoSpeed->loadSettings( _this, "lfo_speed" );
|
||||
m_lfoDepth->loadSettings( _this, "lfo_depth" );
|
||||
m_adsr->loadSettings( _this, "adsr" );
|
||||
|
||||
// BandedWG
|
||||
m_pressure->loadSettings( _this, "pressure" );
|
||||
m_motion->loadSettings( _this, "motion" );
|
||||
m_vibrato->loadSettings( _this, "vibrato" );
|
||||
m_velocity->loadSettings( _this, "velocity" );
|
||||
m_strike->loadSettings( _this, "strike" );
|
||||
|
||||
m_presets->loadSettings( _this, "preset" );
|
||||
m_spread->loadSettings( _this, "spread" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
QString mallets::nodeName( void ) const
|
||||
{
|
||||
return( malletsstk_plugin_descriptor.name );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::playNote( notePlayHandle * _n, bool )
|
||||
{
|
||||
if( m_filesMissing )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int p = m_presets->value();
|
||||
|
||||
const float freq = _n->frequency();
|
||||
if ( _n->totalFramesPlayed() == 0 )
|
||||
{
|
||||
float vel = static_cast<float>( _n->getVolume() ) / 100.0f;
|
||||
|
||||
if( p < 9 )
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth(
|
||||
freq,
|
||||
vel,
|
||||
m_vibratoGain->value(),
|
||||
m_hardness->value(),
|
||||
m_position->value(),
|
||||
m_stick->value(),
|
||||
m_vibratoFreq->value(),
|
||||
p,
|
||||
(Uint8) m_spread->value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
else if( p == 9 )
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth(
|
||||
freq,
|
||||
vel,
|
||||
p,
|
||||
m_lfoDepth->value(),
|
||||
m_modulator->value(),
|
||||
m_crossfade->value(),
|
||||
m_lfoSpeed->value(),
|
||||
m_adsr->value(),
|
||||
(Uint8) m_spread->value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
else
|
||||
{
|
||||
_n->m_pluginData = new malletsSynth(
|
||||
freq,
|
||||
vel,
|
||||
m_pressure->value(),
|
||||
m_motion->value(),
|
||||
m_vibrato->value(),
|
||||
p - 10,
|
||||
m_strike->value() * 128.0,
|
||||
m_velocity->value(),
|
||||
(Uint8) m_spread->value(),
|
||||
engine::getMixer()->sampleRate() );
|
||||
}
|
||||
}
|
||||
|
||||
const fpp_t frames = _n->framesLeftForCurrentPeriod();
|
||||
|
||||
malletsSynth * ps = static_cast<malletsSynth *>( _n->m_pluginData );
|
||||
sample_t add_scale = 0.0f;
|
||||
if( p == 10 )
|
||||
{
|
||||
add_scale =
|
||||
static_cast<sample_t>( m_strike->value() ) * freq * 2.5f;
|
||||
}
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
const sample_t left = ps->nextSampleLeft() *
|
||||
( m_scalers[m_presets->value()] + add_scale );
|
||||
const sample_t right = ps->nextSampleRight() *
|
||||
( m_scalers[m_presets->value()] + add_scale );
|
||||
for( Uint8 chnl = 0; chnl < DEFAULT_CHANNELS / 2; ++chnl )
|
||||
{
|
||||
m_buffer[frame][chnl * DEFAULT_CHANNELS / 2] = left;
|
||||
m_buffer[frame][( chnl + 1 ) * DEFAULT_CHANNELS / 2] =
|
||||
right;
|
||||
}
|
||||
}
|
||||
|
||||
getInstrumentTrack()->processAudioBuffer( m_buffer, frames, _n );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::deleteNotePluginData( notePlayHandle * _n )
|
||||
{
|
||||
delete static_cast<malletsSynth *>( _n->m_pluginData );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void mallets::changePreset( int _preset )
|
||||
{
|
||||
printf("malletsInstrumentView %d\n", _preset);
|
||||
if( _preset < 9 )
|
||||
{
|
||||
m_tubeBellWidget->hide();
|
||||
@@ -655,7 +682,7 @@ extern "C"
|
||||
// neccessary for getting instance out of shared lib
|
||||
plugin * lmms_plugin_main( void * _data )
|
||||
{
|
||||
return( new mallets( static_cast<instrumentTrack *>( _data ) ) );
|
||||
return( new malletsInstrument( static_cast<instrumentTrack *>( _data ) ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -31,11 +31,9 @@
|
||||
|
||||
#include "combobox.h"
|
||||
#include "instrument.h"
|
||||
#include "knob.h"
|
||||
#include "note_play_handle.h"
|
||||
#include "led_checkbox.h"
|
||||
#include "mixer.h"
|
||||
|
||||
class knob;
|
||||
class notePlayHandle;
|
||||
|
||||
|
||||
class malletsSynth
|
||||
@@ -118,12 +116,11 @@ protected:
|
||||
|
||||
|
||||
|
||||
class mallets : public instrument
|
||||
class malletsInstrument : public instrument
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
mallets( instrumentTrack * _channel_track );
|
||||
virtual ~mallets();
|
||||
malletsInstrument( instrumentTrack * _channel_track );
|
||||
virtual ~malletsInstrument( void );
|
||||
|
||||
virtual void FASTCALL playNote( notePlayHandle * _n,
|
||||
bool _try_parallelizing );
|
||||
@@ -136,45 +133,83 @@ public:
|
||||
|
||||
virtual QString nodeName( void ) const;
|
||||
|
||||
public slots:
|
||||
void changePreset( int _preset );
|
||||
virtual instrumentView * createView( QWidget * _parent );
|
||||
|
||||
private:
|
||||
void setWidgetBackground( QWidget * _widget, const QString & _pic );
|
||||
QWidget * setupModalBarControls( QWidget * _parent, track * _track );
|
||||
QWidget * setupTubeBellControls( QWidget * _parent, track * _track );
|
||||
QWidget * setupBandedWGControls( QWidget * _parent, track * _track );
|
||||
comboBox * setupPresets( QWidget * _parent, track * _track );
|
||||
knobModel m_hardnessModel;
|
||||
knobModel m_positionModel;
|
||||
knobModel m_vibratoGainModel;
|
||||
knobModel m_vibratoFreqModel;
|
||||
knobModel m_stickModel;
|
||||
|
||||
QWidget * m_modalBarWidget;
|
||||
knob * m_hardness;
|
||||
knob * m_position;
|
||||
knob * m_vibratoGain;
|
||||
knob * m_vibratoFreq;
|
||||
knob * m_stick;
|
||||
knobModel m_modulatorModel;
|
||||
knobModel m_crossfadeModel;
|
||||
knobModel m_lfoSpeedModel;
|
||||
knobModel m_lfoDepthModel;
|
||||
knobModel m_adsrModel;
|
||||
|
||||
QWidget * m_tubeBellWidget;
|
||||
knob * m_modulator;
|
||||
knob * m_crossfade;
|
||||
knob * m_lfoSpeed;
|
||||
knob * m_lfoDepth;
|
||||
knob * m_adsr;
|
||||
knobModel m_pressureModel;
|
||||
knobModel m_motionModel;
|
||||
knobModel m_vibratoModel;
|
||||
knobModel m_velocityModel;
|
||||
|
||||
QWidget * m_bandedWGWidget;
|
||||
knob * m_pressure;
|
||||
knob * m_motion;
|
||||
knob * m_vibrato;
|
||||
knob * m_velocity;
|
||||
// FIXME: Can't change the model of a ledCheckBox.
|
||||
ledCheckBox * m_strike;
|
||||
|
||||
comboBox * m_presets;
|
||||
knob * m_spread;
|
||||
comboBoxModel m_presetsModel;
|
||||
knobModel m_spreadModel;
|
||||
|
||||
QVector<sample_t> m_scalers;
|
||||
sampleFrame * m_buffer;
|
||||
|
||||
bool m_filesMissing;
|
||||
|
||||
|
||||
friend class malletsInstrumentView;
|
||||
} ;
|
||||
|
||||
|
||||
class malletsInstrumentView: public instrumentView
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
malletsInstrumentView( malletsInstrument * _instrument,
|
||||
QWidget * _parent );
|
||||
virtual ~malletsInstrumentView( void );
|
||||
|
||||
public slots:
|
||||
void changePreset( void );
|
||||
|
||||
private:
|
||||
virtual void modelChanged( void );
|
||||
|
||||
void setWidgetBackground( QWidget * _widget, const QString & _pic );
|
||||
QWidget * setupModalBarControls( QWidget * _parent );
|
||||
QWidget * setupTubeBellControls( QWidget * _parent );
|
||||
QWidget * setupBandedWGControls( QWidget * _parent );
|
||||
|
||||
QWidget * m_modalBarWidget;
|
||||
knob * m_hardnessKnob;
|
||||
knob * m_positionKnob;
|
||||
knob * m_vibratoGainKnob;
|
||||
knob * m_vibratoFreqKnob;
|
||||
knob * m_stickKnob;
|
||||
|
||||
QWidget * m_tubeBellWidget;
|
||||
knob * m_modulatorKnob;
|
||||
knob * m_crossfadeKnob;
|
||||
knob * m_lfoSpeedKnob;
|
||||
knob * m_lfoDepthKnob;
|
||||
knob * m_adsrKnob;
|
||||
|
||||
QWidget * m_bandedWGWidget;
|
||||
knob * m_pressureKnob;
|
||||
knob * m_motionKnob;
|
||||
knob * m_vibratoKnob;
|
||||
knob * m_velocityKnob;
|
||||
ledCheckBox * m_strikeLED;
|
||||
|
||||
comboBox * m_presetsCombo;
|
||||
knob * m_spreadKnob;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user