5 Commits

Author SHA1 Message Date
garyscavone
6aacd357d7 Merge pull request #150 from donarturo11/fix-msvc-compile-error
Remove adding /clr flag to cl compiler
2025-03-29 15:24:59 -04:00
Artur Wrona
0d4bb84732 Remove adding /clr flag to cl compiler 2025-03-19 13:10:50 +01:00
garyscavone
270edc855f Sample rate fix in effects.cpp, revised code in PitShift for hanning windowing. 2024-12-18 20:45:43 -05:00
garyscavone
d7d6079f6b Merge pull request #144 from zonkmachine/modalbarcontrol
Fix mixed up control messages
2024-12-09 10:18:26 -05:00
Oskar Wallgren
aeaef391ef Fix mixed up control messages
In ModalBar.cpp the control messages for 'Stick direct mix' and 'Vibrato amplitude'
have been mixed up. This also concerns some documentation but the description
on https://ccrma.stanford.edu/software/stk/classstk_1_1ModalBar.html, which is
generated from the source, is correct.
2023-10-06 16:39:01 +02:00
5 changed files with 31 additions and 22 deletions

View File

@@ -12,7 +12,6 @@ SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release" "Debug" "RelWithD
message("Build type: " ${CMAKE_BUILD_TYPE})
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /clr")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2 /DNDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7 /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=2 /D_STK_DEBUG_ /D__RTAUDIO_DEBUG__ /D__RTMIDI_DEBUG__")
else()

View File

@@ -17,7 +17,7 @@ namespace stk {
*/
/***************************************************/
const int maxDelay = 5024;
const int maxDelay = 5000; //5024;
class PitShift : public Effect
{
@@ -64,6 +64,7 @@ class PitShift : public Effect
DelayL delayLine_;
StkFloat delay_[2];
StkFloat env_[2];
StkFrames window_;
StkFloat rate_;
unsigned long delayLength_;
unsigned long halfLength_;
@@ -73,25 +74,29 @@ class PitShift : public Effect
inline StkFloat PitShift :: tick( StkFloat input )
{
// Calculate the two delay length values, keeping them within the
// range 12 to maxDelay-12.
// range 0 to delayLength.
delay_[0] += rate_;
while ( delay_[0] > maxDelay-12 ) delay_[0] -= delayLength_;
while ( delay_[0] < 12 ) delay_[0] += delayLength_;
while ( delay_[0] >= delayLength_ ) delay_[0] -= delayLength_;
while ( delay_[0] < 0 ) delay_[0] += delayLength_;
delay_[1] = delay_[0] + halfLength_;
while ( delay_[1] > maxDelay-12 ) delay_[1] -= delayLength_;
while ( delay_[1] < 12 ) delay_[1] += delayLength_;
while ( delay_[1] >= delayLength_ ) delay_[1] -= delayLength_;
while ( delay_[1] < 0 ) delay_[1] += delayLength_;
// Set the new delay line lengths.
delayLine_.setDelay( delay_[0] );
// Calculate a triangular envelope.
env_[1] = fabs( ( delay_[0] - halfLength_ + 12 ) * ( 1.0 / (halfLength_ + 12 ) ) );
env_[0] = 1.0 - env_[1];
//env_[1] = fabs( ( delay_[0] - halfLength_ ) * ( 1.0 / (halfLength_ ) ) );
//env_[0] = 1.0 - env_[1];
// Or use the precomputed hanning window.
env_[1] = window_[delay_[0]];
env_[0] = window_[delay_[1]];
// Delay input and apply envelope.
lastFrame_[0] = env_[1] * delayLine_.tapOut( delay_[1] );
lastFrame_[0] = +env_[0] * delayLine_.tick( input );
lastFrame_[0] += env_[0] * delayLine_.tick( input );
// Compute effect mix and output.
lastFrame_[0] *= effectMix_;

View File

@@ -219,17 +219,17 @@ int tick( void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames,
int main( int argc, char *argv[] )
{
// If you want to change the default sample rate (set in Stk.h), do
// it before instantiating any objects! If the sample rate is
// specified in the command line, it will override this setting.
Stk::setSampleRate( 48000.0 );
TickData data;
RtAudio adac;
int i;
if ( argc < 2 || argc > 6 ) usage();
// If you want to change the default sample rate (set in Stk.h), do
// it before instantiating any objects! If the sample rate is
// specified in the command line, it will override this setting.
Stk::setSampleRate( 48000.0 );
// Parse the command-line arguments.
unsigned int port = 2001;
for ( i=1; i<argc; i++ ) {

View File

@@ -9,9 +9,9 @@
Control Change Numbers:
- Stick Hardness = 2
- Stick Position = 4
- Vibrato Gain = 8
- Vibrato Gain = 1
- Vibrato Frequency = 11
- Direct Stick Mix = 1
- Direct Stick Mix = 8
- Volume = 128
- Modal Presets = 16
- Marimba = 0
@@ -173,9 +173,9 @@ void ModalBar :: controlChange( int number, StkFloat value )
else if (number == __SK_ProphesyRibbon_) // 16
this->setPreset((int) value);
else if (number == __SK_Balance_) // 8
vibratoGain_ = normalizedValue * 0.3;
else if (number == __SK_ModWheel_) // 1
directGain_ = normalizedValue;
else if (number == __SK_ModWheel_) // 1
vibratoGain_ = normalizedValue * 0.3;
else if (number == __SK_ModFrequency_) // 11
vibrato_.setFrequency( normalizedValue * 12.0 );
else if (number == __SK_AfterTouch_Cont_) // 128

View File

@@ -16,15 +16,20 @@ namespace stk {
PitShift :: PitShift( void )
{
delayLength_ = maxDelay - 24;
delayLength_ = maxDelay;
halfLength_ = delayLength_ / 2;
delay_[0] = 12;
delay_[1] = maxDelay / 2;
delay_[0] = 0;
delay_[1] = delayLength_ / 2;
delayLine_.setMaximumDelay( maxDelay );
delayLine_.setDelay( delay_[0] );
effectMix_ = 0.5;
rate_ = 1.0;
window_.resize( delayLength_, 1 );
StkFloat temp = TWO_PI / delayLength_;
for ( unsigned long i=0; i<=window_.size(); i++ )
window_[i] = (cos( i * temp ) + 1.0) / 2.0;
}
void PitShift :: clear()