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:
Danny McRae
2008-01-04 03:05:56 +00:00
parent 8c1715cc26
commit 53d39ae4b8
3 changed files with 435 additions and 368 deletions

View File

@@ -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:

View File

@@ -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 ) ) );
}

View File

@@ -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