Skip to content

Commit fbc63b3

Browse files
committed
Quick fix
1 parent 2195459 commit fbc63b3

File tree

1 file changed

+35
-30
lines changed

1 file changed

+35
-30
lines changed

include/ReSinc.hpp

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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>
846850
typename 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
// =============================================================================
10061011
template<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

10191024
template<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

10311036
template<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

Comments
 (0)