@@ -422,30 +422,34 @@ class Resampler {
422422 * @brief Resamples a JUCE-style AudioBuffer.
423423 * @return The number of output samples produced.
424424 */
425- template <typename T>
426- typename std::
427- enable_if_t <resinc_traits::is_juce_type<std::decay_t <T>>::value, int >
428- resample (T&& input, non_deduced<std::remove_reference_t <T>>& output);
425+ template <typename T1, typename T2>
426+ typename std::enable_if_t <
427+ resinc_traits::is_juce_type<std::decay_t <T1>>::value &&
428+ resinc_traits::is_juce_type<std::decay_t <T2>>::value,
429+ int >
430+ resample (T1&& input, T2& output);
429431
430432 /* *
431433 * @brief Resamples a single-channel container.
432434 * @return The number of output samples produced.
433435 */
434- template <typename T >
436+ template <typename T1, typename T2 >
435437 typename std::enable_if_t <
436- resinc_traits::is_single_channel<std::decay_t <T>>::value,
438+ resinc_traits::is_single_channel<std::decay_t <T1>>::value &&
439+ resinc_traits::is_single_channel<std::decay_t <T2>>::value,
437440 int >
438- resample (T && input, non_deduced<std:: remove_reference_t <T>> & output);
441+ resample (T1 && input, T2 & output);
439442
440443 /* *
441444 * @brief Resamples a multi-channel container (vector of vectors).
442445 * @return The number of output samples produced.
443446 */
444- template <typename T >
447+ template <typename T1, typename T2 >
445448 typename std::enable_if_t <
446- resinc_traits::is_multi_channel<std::decay_t <T>>::value,
449+ resinc_traits::is_multi_channel<std::decay_t <T1>>::value &&
450+ resinc_traits::is_multi_channel<std::decay_t <T2>>::value,
447451 int >
448- resample (T && input, non_deduced<std:: remove_reference_t <T>> & output);
452+ resample (T1 && input, T2 & output);
449453
450454 /* *
451455 * @brief Resamples from raw pointers (Base Implementation).
@@ -846,10 +850,11 @@ template<typename T, typename Callable>
846850typename std::enable_if_t <resinc_traits::is_juce_type<std::decay_t <T>>::value>
847851 Oversampler<TYPE, OVERSAMPLE_FACTOR, SINC_RADIUS>::process(
848852 Callable&& processBlock) {
849- int ch = static_cast <int >(interpolatedBuf.size ());
853+ const int ch = static_cast <int >(interpolatedBuf.size ());
854+ const int len = static_cast <int >(interpolatedBuf[0 ].size ());
850855 std::vector<TYPE*> ptrs (ch);
851856 for (int i = 0 ; i < ch; ++i) ptrs[i] = interpolatedBuf[i].data ();
852- T buffer (ptrs.data (), ch, static_cast < int >(interpolatedBuf[ 0 ]. size ()) );
857+ T buffer (static_cast <TYPE* const *>( ptrs.data ()) , ch, len );
853858 processBlock (buffer);
854859}
855860
@@ -1004,37 +1009,37 @@ void Resampler<TYPE, SINC_RADIUS, RESOLUTION>::configure(TYPE sampleRate,
10041009// IMPLEMENTATIONS: Resample
10051010// =============================================================================
10061011template <typename TYPE, int SINC_RADIUS, int RESOLUTION>
1007- template <typename T >
1008- typename std::enable_if_t <resinc_traits::is_juce_type<std:: decay_t <T>>::value,
1009- int >
1010- Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(
1011- T&& input,
1012- non_deduced<std:: remove_reference_t <T>> & output) {
1012+ template <typename T1, typename T2 >
1013+ typename std::enable_if_t <
1014+ resinc_traits::is_juce_type<std:: decay_t <T1>>::value &&
1015+ resinc_traits::is_juce_type<std:: decay_t <T2>>::value,
1016+ int >
1017+ Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(T1&& input, T2 & output) {
10131018 return resample_helper (input.getArrayOfReadPointers (),
10141019 output.getArrayOfWritePointers (),
10151020 input.getNumChannels (),
10161021 output.getNumSamples ());
10171022}
10181023
10191024template <typename TYPE, int SINC_RADIUS, int RESOLUTION>
1020- template <typename T >
1021- typename std::
1022- enable_if_t < resinc_traits::is_single_channel<std::decay_t <T >>::value, int >
1023- Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(
1024- T&& input,
1025- non_deduced<std:: remove_reference_t <T>> & output) {
1025+ template <typename T1, typename T2 >
1026+ typename std::enable_if_t <
1027+ resinc_traits::is_single_channel<std::decay_t <T1 >>::value &&
1028+ resinc_traits::is_single_channel<std:: decay_t <T2>>::value,
1029+ int >
1030+ Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(T1&& input, T2 & output) {
10261031 const TYPE* ptr = input.data ();
10271032 TYPE* outPtr = output.data ();
10281033 return resample_helper (&ptr, &outPtr, 1 , static_cast <int >(input.size ()));
10291034}
10301035
10311036template <typename TYPE, int SINC_RADIUS, int RESOLUTION>
1032- template <typename T >
1033- typename std::
1034- enable_if_t < resinc_traits::is_multi_channel<std::decay_t <T >>::value, int >
1035- Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(
1036- T&& input,
1037- non_deduced<std:: remove_reference_t <T>> & output) {
1037+ template <typename T1, typename T2 >
1038+ typename std::enable_if_t <
1039+ resinc_traits::is_multi_channel<std::decay_t <T1 >>::value &&
1040+ resinc_traits::is_multi_channel<std:: decay_t <T2>>::value,
1041+ int >
1042+ Resampler<TYPE, SINC_RADIUS, RESOLUTION>::resample(T1&& input, T2 & output) {
10381043 int channels = static_cast <int >(input.size ());
10391044 if (channels == 0 ) return 0 ;
10401045 std::vector<const TYPE*> inPtrs (channels);
0 commit comments