@ -776,6 +776,28 @@ void loop()
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void handleNoteOn ( byte inChannel , byte inNumber , byte inVelocity )
{
# if NUM_DRUMS > 0
if ( activesample < 6 & & seq_running = = false & & LCDML . FUNC_getID ( ) = = LCDML . OTHER_getIDFromFunction ( UI_func_seq_pattern_editor ) ) // live play pitched sample
{
if ( drum_counter > = NUM_DRUMS )
drum_counter = 0 ;
uint8_t slot = drum_get_slot ( drum_config [ activesample ] . drum_class ) ;
float pan = mapfloat ( drum_config [ activesample ] . pan , - 1.0 , 1.0 , 0.0 , 1.0 ) ;
drum_mixer_r . gain ( slot , ( 1.0 - pan ) * drum_config [ activesample ] . vol_max ) ;
drum_mixer_l . gain ( slot , pan * drum_config [ activesample ] . vol_max ) ;
# ifdef USE_FX
drum_reverb_send_mixer_r . gain ( slot , ( 1.0 - pan ) * volume_transform ( drum_config [ activesample ] . reverb_send ) ) ;
drum_reverb_send_mixer_l . gain ( slot , pan * volume_transform ( drum_config [ activesample ] . reverb_send ) ) ;
# endif
if ( drum_config [ activesample ] . drum_data ! = NULL & & drum_config [ activesample ] . len > 0 )
{
Drum [ slot ] - > enableInterpolation ( true ) ;
Drum [ slot ] - > setPlaybackRate ( ( float ) pow ( 2 , ( inNumber - 72 ) / 12.00 ) * drum_config [ activesample ] . p_offset ) ;
Drum [ slot ] - > playRaw ( ( int16_t * ) drum_config [ activesample ] . drum_data , drum_config [ activesample ] . len , 1 ) ;
}
}
else
# endif
//Ignore the note when playing & recording the same note into the sequencer
if ( seq_recording = = false | | ( seq_recording & & inNumber ! = seq_note_in ) )
{
@ -887,29 +909,29 @@ uint8_t drum_get_slot(uint8_t dt)
Drum [ i ] - > enableInterpolation ( false ) ;
Drum [ i ] - > setPlaybackRate ( 1.0 ) ;
}
else
{
if ( drum_type [ i ] = = dt )
{
# ifdef DEBUG
Serial . print ( F ( " Stopping Drum " ) ) ;
Serial . print ( i ) ;
Serial . print ( F ( " type " ) ) ;
Serial . println ( dt ) ;
# endif
Drum [ i ] - > stop ( ) ;
return ( i ) ;
}
}
// else
// {
// if (drum_type[i] == dt)
// {
//#ifdef DEBUG
// Serial.print(F("Stopping Drum "));
// Serial.print(i);
// Serial.print(F(" type "));
// Serial.println(dt);
//#endif
// Drum[i]->stop();
//
// return (i);
// }
// }
}
# ifdef DEBUG
Serial . print ( F ( " Using next free Drum slot " ) ) ;
Serial . println ( drum_counter % 4 ) ;
Serial . println ( drum_counter % NUM_DRUMS ) ;
# endif
drum_type [ drum_counter % 4 ] = dt ;
drum_type [ drum_counter % NUM_DRUMS ] = dt ;
drum_counter + + ;
return ( drum_counter - 1 % 4 ) ;
return ( drum_counter - 1 % NUM_DRUMS ) ;
}
# endif