6 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
garyscavone
cea6f547d2 Merge pull request #146 from Kreijstal/patch-1
use pkgconf if available on CMakeLists
2024-12-08 11:33:33 -05:00
Kreijstal
212950d364 use pkgconf if available on CMakeLists
Otherwise fallback
2024-12-08 17:22:22 +01:00
4 changed files with 74 additions and 24 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()
@@ -46,13 +45,54 @@ file(GLOB STK_SRC "./src/*.cpp") # GLOB instead of GLOB_RECURSE as the asio depe
#========================================#
if(REALTIME)
if(ENABLE_JACK)
find_library(JACK_LIBRARY jack) # find_package(JACK) # TODO: NEED FindJACK.cmake
if(JACK_LIBRARY)
message("Jack API found: ${JACK_LIBRARY}")
link_libraries(${JACK_LIBRARY})
# Try to find PkgConfig
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
# PkgConfig is available, use it
pkg_check_modules(JACK QUIET jack)
endif()
if(NOT JACK_FOUND)
# PkgConfig was not found or Jack was not found through it, try a fallback
message(STATUS "PkgConfig not found or failed to find Jack, attempting fallback")
# Fallback: Search in common locations
find_path(JACK_INCLUDE_DIR
NAMES jack/jack.h
HINTS
ENV JACK_ROOT
"$ENV{ProgramFiles}/Jack"
/usr/local/include
/usr/include
)
find_library(JACK_LIBRARY
NAMES jack
HINTS
ENV JACK_ROOT
"$ENV{ProgramFiles}/Jack"
/usr/local/lib
/usr/lib
)
# Check if the fallback was successful
if(JACK_INCLUDE_DIR AND JACK_LIBRARY)
set(JACK_FOUND TRUE)
set(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
set(JACK_LIBRARIES ${JACK_LIBRARY})
message(STATUS "Found Jack (fallback):")
message(STATUS " Includes: ${JACK_INCLUDE_DIRS}")
message(STATUS " Libraries: ${JACK_LIBRARIES}")
else()
message(WARNING "Failed to find Jack library even with fallback. Please install Jack development package or ensure it is in a standard location.")
endif()
endif()
if(JACK_FOUND)
include_directories(${JACK_INCLUDE_DIRS})
link_libraries(${JACK_LIBRARIES})
add_definitions(-D__UNIX_JACK__)
else()
message(WARNING "JACK support requires the jack library!")
endif()
endif()

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

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