From adc31e77e9855a12af3624f2f4efcbb38143a4b4 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 17 Nov 2023 08:37:53 +0000 Subject: [PATCH 1/9] Win build fix --- src/common/Resampler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/Resampler.cpp b/src/common/Resampler.cpp index 1b213c5..4149c6a 100644 --- a/src/common/Resampler.cpp +++ b/src/common/Resampler.cpp @@ -192,7 +192,7 @@ D_IPP::D_IPP(Resampler::Quality /* quality */, // elements with indices greater than m_time + length for the // right filter wing for the last element. - m_history = int(m_window * 0.5 * max(1.0, 1.0 / m_factor)) + 1; + m_history = int(m_window * 0.5 * std::max(1.0, 1.0 / m_factor)) + 1; m_state = new IppsResamplingPolyphase_32f *[m_channels]; @@ -305,7 +305,7 @@ D_IPP::resample(float *const BQ_R__ *const BQ_R__ out, { if (ratio > m_factor) { m_factor = ratio; - m_history = int(m_window * 0.5 * max(1.0, 1.0 / m_factor)) + 1; + m_history = int(m_window * 0.5 * std::max(1.0, 1.0 / m_factor)) + 1; } if (m_debugLevel > 2) { @@ -348,7 +348,7 @@ D_IPP::resampleInterleaved(float *const BQ_R__ out, { if (ratio > m_factor) { m_factor = ratio; - m_history = int(m_window * 0.5 * max(1.0, 1.0 / m_factor)) + 1; + m_history = int(m_window * 0.5 * std::max(1.0, 1.0 / m_factor)) + 1; } if (m_debugLevel > 2) { From e54fd1fd951ce1d87bb3f3fcccb483f844a61b35 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Thu, 14 Dec 2023 13:52:19 +0000 Subject: [PATCH 2/9] Add simple Java test code --- .../rubberband/RubberBandStretcher.java | 8 +- .../rubberband/test/RubberBandTest.java | 82 +++++++++++++++++++ meson.build | 7 +- src/jni/RubberBandStretcherJNI.cpp | 42 ++++++++++ 4 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 com/breakfastquay/rubberband/test/RubberBandTest.java diff --git a/com/breakfastquay/rubberband/RubberBandStretcher.java b/com/breakfastquay/rubberband/RubberBandStretcher.java index 8469d62..aa7e613 100644 --- a/com/breakfastquay/rubberband/RubberBandStretcher.java +++ b/com/breakfastquay/rubberband/RubberBandStretcher.java @@ -45,6 +45,8 @@ public class RubberBandStretcher public native double getTimeRatio(); public native double getPitchScale(); + public native int getPreferredStartPad(); + public native int getStartDelay(); public native int getLatency(); public native void setTransientsOption(int options); @@ -54,11 +56,12 @@ public class RubberBandStretcher public native void setPitchOption(int options); public native void setExpectedInputDuration(long samples); + public native int getProcessSizeLimit(); public native void setMaxProcessSize(int samples); public native int getSamplesRequired(); - //!!! todo: setKeyFrameMap + public native void setKeyFrameMap(long[] from, long[] to); public native void study(float[][] input, int offset, int n, boolean finalBlock); public void study(float[][] input, boolean finalBlock) { @@ -120,6 +123,9 @@ public class RubberBandStretcher public static final int OptionChannelsApart = 0x00000000; public static final int OptionChannelsTogether = 0x10000000; + public static final int OptionEngineFaster = 0x00000000; + public static final int OptionEngineFiner = 0x20000000; + public static final int DefaultOptions = 0x00000000; public static final int PercussiveOptions = 0x00102000; diff --git a/com/breakfastquay/rubberband/test/RubberBandTest.java b/com/breakfastquay/rubberband/test/RubberBandTest.java new file mode 100644 index 0000000..d0e4637 --- /dev/null +++ b/com/breakfastquay/rubberband/test/RubberBandTest.java @@ -0,0 +1,82 @@ + +package com.breakfastquay.rubberband.test; + +import com.breakfastquay.rubberband.RubberBandStretcher; + +public class RubberBandTest +{ + + public static void main(String[] args) { + + int channels = 1; + int rate = 44100; + + RubberBandStretcher stretcher = new RubberBandStretcher + (rate, + channels, + RubberBandStretcher.OptionEngineFiner + + RubberBandStretcher.OptionProcessRealTime, + 1.0, + 1.0); + + stretcher.setTimeRatio(1.5); + stretcher.setPitchScale(0.8); + + System.err.println + (String.format("Channel count: %d\n" + + "Time ratio: %f\n" + + "Pitch scale: %f\n" + + "Preferred start pad: %d\n" + + "Start delay: %d\n" + + "Process size limit: %d", + stretcher.getChannelCount(), + stretcher.getTimeRatio(), + stretcher.getPitchScale(), + stretcher.getPreferredStartPad(), + stretcher.getStartDelay(), + stretcher.getProcessSizeLimit() + )); + + int blocksize = 1024; + int blocks = 200; + double freq = 440.0; + + stretcher.setMaxProcessSize(blocksize); + + float[][] buffer = new float[channels][blocksize]; + + int i0 = 0; + + for (int block = 0; block < blocks; ++block) { + + for (int c = 0; c < channels; ++c) { + for (int i = 0; i < blocksize; ++i) { + buffer[c][i] = (float)Math.sin + ((double)i0 * freq * Math.PI * 2.0 / (double)rate); + ++i0; + } + } + + stretcher.process(buffer, block + 1 == blocks); + + while (true) { + int available = stretcher.available(); + if (available <= 0) { + break; + } + int requested = available; + if (requested > blocksize) { + requested = blocksize; + } + int obtained = stretcher.retrieve(buffer, 0, requested); + for (int i = 0; i < obtained; ++i) { + System.out.println(Float.toString(buffer[0][i])); + } + } + } + + stretcher.dispose(); + } + +} + diff --git a/meson.build b/meson.build index 16ad97c..ebf5a89 100644 --- a/meson.build +++ b/meson.build @@ -62,6 +62,10 @@ java_sources = [ 'com/breakfastquay/rubberband/RubberBandStretcher.java', ] +java_test_sources = [ + 'com/breakfastquay/rubberband/test/RubberBandTest.java', +] + program_sources = [ 'main/main.cpp', ] @@ -651,7 +655,8 @@ if have_jni # NB the JNI library is not versioned install: true, ) - jar('rubberband', 'com/breakfastquay/rubberband/RubberBandStretcher.java') + jar('rubberband', java_sources) + jar('rubberband-test', java_test_sources) else target_summary += { 'JNI library': false } if not have_java diff --git a/src/jni/RubberBandStretcherJNI.cpp b/src/jni/RubberBandStretcherJNI.cpp index e1e6cf9..df04a26 100644 --- a/src/jni/RubberBandStretcherJNI.cpp +++ b/src/jni/RubberBandStretcherJNI.cpp @@ -87,6 +87,22 @@ JNIEXPORT jdouble JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_ JNIEXPORT jdouble JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getPitchScale (JNIEnv *, jobject); +/* + * Class: com_breakfastquay_rubberband_RubberBandStretcher + * Method: getPreferredStartPad + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getPreferredStartPad + (JNIEnv *, jobject); + +/* + * Class: com_breakfastquay_rubberband_RubberBandStretcher + * Method: getStartDelay + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getStartDelay + (JNIEnv *, jobject); + /* * Class: com_breakfastquay_rubberband_RubberBandStretcher * Method: getLatency @@ -151,6 +167,14 @@ JNIEXPORT void JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_set JNIEXPORT void JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_setMaxProcessSize (JNIEnv *, jobject, jint); +/* + * Class: com_breakfastquay_rubberband_RubberBandStretcher + * Method: getProcessSizeLimit + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getProcessSizeLimit + (JNIEnv *, jobject); + /* * Class: com_breakfastquay_rubberband_RubberBandStretcher * Method: getSamplesRequired @@ -269,6 +293,18 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_getPitchScale(JNIEnv *env, return getStretcher(env, obj)->getPitchScale(); } +JNIEXPORT jint JNICALL +Java_com_breakfastquay_rubberband_RubberBandStretcher_getPreferredStartPad(JNIEnv *env, jobject obj) +{ + return getStretcher(env, obj)->getPreferredStartPad(); +} + +JNIEXPORT jint JNICALL +Java_com_breakfastquay_rubberband_RubberBandStretcher_getStartDelay(JNIEnv *env, jobject obj) +{ + return getStretcher(env, obj)->getStartDelay(); +} + JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getLatency(JNIEnv *env, jobject obj) { @@ -317,6 +353,12 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_setMaxProcessSize(JNIEnv * getStretcher(env, obj)->setMaxProcessSize(size); } +JNIEXPORT jint JNICALL +Java_com_breakfastquay_rubberband_RubberBandStretcher_getProcessSizeLimit(JNIEnv *env, jobject obj) +{ + return getStretcher(env, obj)->getProcessSizeLimit(); +} + JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getSamplesRequired(JNIEnv *env, jobject obj) { From dc745e34870b4550f5032400fd0d8d62155cad64 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Thu, 14 Dec 2023 14:31:08 +0000 Subject: [PATCH 3/9] Implement & exercise getKeyFrameMap in JNI --- .../rubberband/RubberBandStretcher.java | 16 ++++++++++ .../rubberband/test/RubberBandTest.java | 32 +++++++++++++++++-- src/jni/RubberBandStretcherJNI.cpp | 24 ++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/com/breakfastquay/rubberband/RubberBandStretcher.java b/com/breakfastquay/rubberband/RubberBandStretcher.java index aa7e613..036516d 100644 --- a/com/breakfastquay/rubberband/RubberBandStretcher.java +++ b/com/breakfastquay/rubberband/RubberBandStretcher.java @@ -23,6 +23,9 @@ package com.breakfastquay.rubberband; +import java.util.Map; +import java.util.Set; + public class RubberBandStretcher { public RubberBandStretcher(int sampleRate, int channels, @@ -62,6 +65,19 @@ public class RubberBandStretcher public native int getSamplesRequired(); public native void setKeyFrameMap(long[] from, long[] to); + public void setKeyFrameMap(Map m) { + Set keys = m.keySet(); + int n = keys.size(); + long[] from = new long[n]; + long[] to = new long[n]; + int i = 0; + for (Long k : keys) { + from[i] = k.longValue(); + to[i] = m.get(k).longValue(); + ++i; + } + setKeyFrameMap(from, to); + } public native void study(float[][] input, int offset, int n, boolean finalBlock); public void study(float[][] input, boolean finalBlock) { diff --git a/com/breakfastquay/rubberband/test/RubberBandTest.java b/com/breakfastquay/rubberband/test/RubberBandTest.java index d0e4637..578f5ec 100644 --- a/com/breakfastquay/rubberband/test/RubberBandTest.java +++ b/com/breakfastquay/rubberband/test/RubberBandTest.java @@ -3,6 +3,8 @@ package com.breakfastquay.rubberband.test; import com.breakfastquay.rubberband.RubberBandStretcher; +import java.util.TreeMap; + public class RubberBandTest { @@ -15,7 +17,7 @@ public class RubberBandTest (rate, channels, RubberBandStretcher.OptionEngineFiner + - RubberBandStretcher.OptionProcessRealTime, + RubberBandStretcher.OptionProcessOffline, 1.0, 1.0); @@ -38,11 +40,16 @@ public class RubberBandTest )); int blocksize = 1024; - int blocks = 200; + int blocks = 400; double freq = 440.0; stretcher.setMaxProcessSize(blocksize); + TreeMap keyFrameMap = new TreeMap(); + keyFrameMap.put((long)(3 * rate), (long)(4 * rate)); + keyFrameMap.put((long)(5 * rate), (long)(5 * rate)); + stretcher.setKeyFrameMap(keyFrameMap); + float[][] buffer = new float[channels][blocksize]; int i0 = 0; @@ -53,6 +60,27 @@ public class RubberBandTest for (int i = 0; i < blocksize; ++i) { buffer[c][i] = (float)Math.sin ((double)i0 * freq * Math.PI * 2.0 / (double)rate); + if (i0 % rate == 0) { + buffer[c][i] = 1.f; + } + ++i0; + } + } + + stretcher.study(buffer, block + 1 == blocks); + } + + i0 = 0; + + for (int block = 0; block < blocks; ++block) { + + for (int c = 0; c < channels; ++c) { + for (int i = 0; i < blocksize; ++i) { + buffer[c][i] = (float)Math.sin + ((double)i0 * freq * Math.PI * 2.0 / (double)rate); + if (i0 % rate == 0) { + buffer[c][i] = 1.f; + } ++i0; } } diff --git a/src/jni/RubberBandStretcherJNI.cpp b/src/jni/RubberBandStretcherJNI.cpp index df04a26..9cac5fb 100644 --- a/src/jni/RubberBandStretcherJNI.cpp +++ b/src/jni/RubberBandStretcherJNI.cpp @@ -183,6 +183,14 @@ JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_get JNIEXPORT jint JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_getSamplesRequired (JNIEnv *, jobject); +/* + * Class: com_breakfastquay_rubberband_RubberBandStretcher + * Method: setKeyFrameMap + * Signature: ([J[J)V + */ +JNIEXPORT void JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_setKeyFrameMap + (JNIEnv *, jobject, jlongArray, jlongArray); + /* * Class: com_breakfastquay_rubberband_RubberBandStretcher * Method: study @@ -365,6 +373,22 @@ Java_com_breakfastquay_rubberband_RubberBandStretcher_getSamplesRequired(JNIEnv return getStretcher(env, obj)->getSamplesRequired(); } +JNIEXPORT void JNICALL +Java_com_breakfastquay_rubberband_RubberBandStretcher_setKeyFrameMap(JNIEnv *env, jobject obj, jlongArray from, jlongArray to) +{ + std::map m; + int flen = env->GetArrayLength(from); + int tlen = env->GetArrayLength(to); + jlong *farr = env->GetLongArrayElements(from, 0); + jlong *tarr = env->GetLongArrayElements(to, 0); + for (int i = 0; i < flen && i < tlen; ++i) { + m[farr[i]] = tarr[i]; + } + env->ReleaseLongArrayElements(from, farr, 0); + env->ReleaseLongArrayElements(to, tarr, 0); + getStretcher(env, obj)->setKeyFrameMap(m); +} + JNIEXPORT void JNICALL Java_com_breakfastquay_rubberband_RubberBandStretcher_study(JNIEnv *env, jobject obj, jobjectArray data, jint offset, jint n, jboolean final) { From 591be7cbab7d6976417b8d16349442397f88f71d Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 15 Dec 2023 20:13:59 +0000 Subject: [PATCH 4/9] Fix compiler warnings --- src/rubberband-c.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/rubberband-c.cpp b/src/rubberband-c.cpp index e7fd154..c00ad6c 100644 --- a/src/rubberband-c.cpp +++ b/src/rubberband-c.cpp @@ -90,17 +90,17 @@ double rubberband_get_formant_scale(const RubberBandState state) unsigned int rubberband_get_preferred_start_pad(const RubberBandState state) { - return state->m_s->getPreferredStartPad(); + return (unsigned int)state->m_s->getPreferredStartPad(); } unsigned int rubberband_get_start_delay(const RubberBandState state) { - return state->m_s->getStartDelay(); + return (unsigned int)state->m_s->getStartDelay(); } unsigned int rubberband_get_latency(const RubberBandState state) { - return state->m_s->getLatency(); + return (unsigned int)state->m_s->getLatency(); } void rubberband_set_transients_option(RubberBandState state, RubberBandOptions options) @@ -135,7 +135,7 @@ void rubberband_set_expected_input_duration(RubberBandState state, unsigned int unsigned int rubberband_get_samples_required(const RubberBandState state) { - return state->m_s->getSamplesRequired(); + return (unsigned int)state->m_s->getSamplesRequired(); } void rubberband_set_max_process_size(RubberBandState state, unsigned int samples) @@ -145,7 +145,7 @@ void rubberband_set_max_process_size(RubberBandState state, unsigned int samples unsigned int rubberband_get_process_size_limit(RubberBandState state) { - return state->m_s->getProcessSizeLimit(); + return (unsigned int)state->m_s->getProcessSizeLimit(); } void rubberband_set_key_frame_map(RubberBandState state, unsigned int keyframecount, unsigned int *from, unsigned int *to) @@ -174,12 +174,12 @@ int rubberband_available(const RubberBandState state) unsigned int rubberband_retrieve(const RubberBandState state, float *const *output, unsigned int samples) { - return state->m_s->retrieve(output, samples); + return (unsigned int)state->m_s->retrieve(output, samples); } unsigned int rubberband_get_channel_count(const RubberBandState state) { - return state->m_s->getChannelCount(); + return (unsigned int)state->m_s->getChannelCount(); } void rubberband_calculate_stretch(RubberBandState state) From 97091aebe81d9cfa0321fc6c8c56ae91af9bc040 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 15 Dec 2023 20:14:51 +0000 Subject: [PATCH 5/9] Suppress narrowing conversion warnings (if enabled) --- src/common/sysutils.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/sysutils.h b/src/common/sysutils.h index 88b905e..334917d 100644 --- a/src/common/sysutils.h +++ b/src/common/sysutils.h @@ -45,6 +45,9 @@ # define R__ #endif +#pragma GCC diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wconversion" + #ifdef __clang__ # define RTENTRY__ __attribute__((annotate("realtime"))) #else From 91db97f8f59df77568dd5e26b408f35ade10689e Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 15 Dec 2023 20:32:57 +0000 Subject: [PATCH 6/9] Fix some compiler warnings, and suppress a few others for MSVC --- src/common/sysutils.cpp | 2 +- src/common/sysutils.h | 4 ++++ src/ext/getopt/getopt.c | 4 ++++ src/ext/getopt/getopt_long.c | 4 ++++ src/faster/StretcherChannelData.cpp | 3 +-- src/finer/R3Stretcher.cpp | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/common/sysutils.cpp b/src/common/sysutils.cpp index 49e2914..c5779b6 100644 --- a/src/common/sysutils.cpp +++ b/src/common/sysutils.cpp @@ -152,7 +152,7 @@ system_is_multiprocessor() #ifdef _WIN32 -void gettimeofday(struct timeval *tv, void *tz) +void gettimeofday(struct timeval *tv, void * /* tz */) { union { long long ns100; diff --git a/src/common/sysutils.h b/src/common/sysutils.h index 334917d..5c6212f 100644 --- a/src/common/sysutils.h +++ b/src/common/sysutils.h @@ -45,8 +45,12 @@ # define R__ #endif +#ifdef _MSC_VER +#pragma warning(disable:4127; disable:4244; disable:4267) +#else #pragma GCC diagnostic ignored "-Wconversion" #pragma clang diagnostic ignored "-Wconversion" +#endif #ifdef __clang__ # define RTENTRY__ __attribute__((annotate("realtime"))) diff --git a/src/ext/getopt/getopt.c b/src/ext/getopt/getopt.c index ce9abb3..1ca7d77 100644 --- a/src/ext/getopt/getopt.c +++ b/src/ext/getopt/getopt.c @@ -35,6 +35,10 @@ #include #include +#ifdef _MSC_VER +#pragma warning (disable: 4131; disable: 4706) +#endif + int opterr = 1, /* if error message should be printed */ optind = 1, /* index into parent argv vector */ optopt, /* character checked for validity */ diff --git a/src/ext/getopt/getopt_long.c b/src/ext/getopt/getopt_long.c index 1f92449..f5cd244 100644 --- a/src/ext/getopt/getopt_long.c +++ b/src/ext/getopt/getopt_long.c @@ -54,6 +54,10 @@ #include #include +#ifdef _MSC_VER +#pragma warning (disable: 4131; disable: 4996) +#endif + GETOPT_API extern char opterrmsg[128]; char opterrmsg[128]; /* last error message is stored here */ diff --git a/src/faster/StretcherChannelData.cpp b/src/faster/StretcherChannelData.cpp index 640ddb4..8cbe423 100644 --- a/src/faster/StretcherChannelData.cpp +++ b/src/faster/StretcherChannelData.cpp @@ -89,8 +89,7 @@ R2Stretcher::ChannelData::construct(const std::set &sizes, unityResetLow = 16000.f; - for (std::set::const_iterator i = sizes.begin(); - i != sizes.end(); ++i) { + for (i = sizes.begin(); i != sizes.end(); ++i) { ffts[*i] = new FFT(*i); if (sizeof(process_t) == sizeof(double)) { ffts[*i]->initDouble(); diff --git a/src/finer/R3Stretcher.cpp b/src/finer/R3Stretcher.cpp index ea1b2c8..81524b9 100644 --- a/src/finer/R3Stretcher.cpp +++ b/src/finer/R3Stretcher.cpp @@ -1006,7 +1006,7 @@ R3Stretcher::consume(bool final) while (true) { - Profiler profiler("R3Stretcher::consume/loop"); + Profiler profiler2("R3Stretcher::consume/loop"); int readSpace = cd0->inbuf->getReadSpace(); m_log.log(2, "consume: read space", readSpace); From 9ea386261b502d321bb4ded22b27ece4e5d37c68 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 15 Dec 2023 20:50:22 +0000 Subject: [PATCH 7/9] Refine these a little. To revisit --- src/common/sysutils.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/sysutils.h b/src/common/sysutils.h index 5c6212f..1dba434 100644 --- a/src/common/sysutils.h +++ b/src/common/sysutils.h @@ -49,7 +49,10 @@ #pragma warning(disable:4127; disable:4244; disable:4267) #else #pragma GCC diagnostic ignored "-Wconversion" -#pragma clang diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wsign-conversion" +#pragma clang diagnostic ignored "-Wfloat-conversion" +#pragma clang diagnostic ignored "-Wimplicit-float-conversion" +#pragma clang diagnostic ignored "-Wshorten-64-to-32" #endif #ifdef __clang__ From 9027f860224f5a68ceb9344af4370be9b9d2e591 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 5 Jan 2024 15:37:44 +0000 Subject: [PATCH 8/9] Refine warning pragmas, and make it possible to revert to all warnings (e.g. in order to fix them!) --- src/common/sysutils.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/common/sysutils.h b/src/common/sysutils.h index 1dba434..53a771e 100644 --- a/src/common/sysutils.h +++ b/src/common/sysutils.h @@ -45,15 +45,18 @@ # define R__ #endif -#ifdef _MSC_VER +#ifndef RUBBERBAND_ENABLE_WARNINGS +#if defined(_MSC_VER) #pragma warning(disable:4127; disable:4244; disable:4267) -#else +#elif defined(__GNUC__) #pragma GCC diagnostic ignored "-Wconversion" +#elif defined(__clang__) #pragma clang diagnostic ignored "-Wsign-conversion" #pragma clang diagnostic ignored "-Wfloat-conversion" #pragma clang diagnostic ignored "-Wimplicit-float-conversion" #pragma clang diagnostic ignored "-Wshorten-64-to-32" #endif +#endif #ifdef __clang__ # define RTENTRY__ __attribute__((annotate("realtime"))) From 95cbb62dfe3009800f327631b1071be0e0180f69 Mon Sep 17 00:00:00 2001 From: Chris Cannam Date: Fri, 5 Jan 2024 15:38:06 +0000 Subject: [PATCH 9/9] Make dllexport suppressible --- rubberband/RubberBandStretcher.h | 2 ++ rubberband/rubberband-c.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/rubberband/RubberBandStretcher.h b/rubberband/RubberBandStretcher.h index 6b883a8..79234f4 100644 --- a/rubberband/RubberBandStretcher.h +++ b/rubberband/RubberBandStretcher.h @@ -30,7 +30,9 @@ #undef RUBBERBAND_DLLEXPORT #ifdef _MSC_VER +#ifndef RUBBERBAND_STATIC #define RUBBERBAND_DLLEXPORT __declspec(dllexport) +#endif #else #define RUBBERBAND_DLLEXPORT #endif diff --git a/rubberband/rubberband-c.h b/rubberband/rubberband-c.h index 73d1216..3967482 100644 --- a/rubberband/rubberband-c.h +++ b/rubberband/rubberband-c.h @@ -35,7 +35,9 @@ extern "C" { #undef RB_EXTERN #ifdef _MSC_VER +#ifndef RUBBERBAND_STATIC #define RB_EXTERN extern __declspec(dllexport) +#endif #else #define RB_EXTERN extern #endif