13
0
livetrax/tools/update_qm-dsp.sh

139 lines
3.9 KiB
Bash
Executable File

#!/bin/sh
if ! test -f wscript || ! test -d gtk2_ardour || ! test -d libs/qm-dsp/;then
echo "This script needs to run from ardour's top-level src tree"
exit 1
fi
if test -z "`which rsync`" -o -z "`which git`"; then
echo "this script needs rsync and git"
exit 1
fi
ASRC=`pwd`
set -e
TMP=`mktemp -d`
test -d "$TMP"
echo $TMP
trap "rm -rf $TMP" EXIT
cd $TMP
git clone git://github.com/c4dm/qm-dsp.git qm-dsp
cd qm-dsp
git describe --tags > "$ASRC/libs/qm-dsp/gitrev.txt"
QMDSP="$TMP/qm-dsp"
cd "$ASRC/libs/qm-dsp"
find base dsp ext maths -type f -exec rsync -c --progress "$QMDSP/{}" "{}" \;
## this applies to qm-vamp-plugins-v1.7.1-20-g4d15479
## (see also Ardour 5.8-250-gc0c24aff7)
patch -p3 << EOF
diff --git a/libs/qm-dsp/dsp/signalconditioning/FiltFilt.cpp b/libs/qm-dsp/dsp/signalconditioning/FiltFilt.cpp
index 714d5755d..c88641de7 100644
--- a/libs/qm-dsp/dsp/signalconditioning/FiltFilt.cpp
+++ b/libs/qm-dsp/dsp/signalconditioning/FiltFilt.cpp
@@ -35,6 +35,13 @@ void FiltFilt::process(double *src, double *dst, unsigned int length)
if (length == 0) return;
+ if (length < 2) {
+ for( i = 0; i < length; i++ ) {
+ dst[i] = src [i];
+ }
+ return;
+ }
+
unsigned int nFilt = m_ord + 1;
unsigned int nFact = 3 * ( nFilt - 1);
unsigned int nExt = length + 2 * nFact;
@@ -58,11 +65,16 @@ void FiltFilt::process(double *src, double *dst, unsigned int length)
filtScratchIn[ index++ ] = sample0 - src[ i ];
}
index = 0;
- for( i = 0; i < nFact; i++ )
+ for( i = 0; i < nFact && i + 2 < length; i++ )
{
filtScratchIn[ (nExt - nFact) + index++ ] = sampleN - src[ (length - 2) - i ];
}
+ for(; i < nFact; i++ )
+ {
+ filtScratchIn[ (nExt - nFact) + index++ ] = 0;
+ }
+
index = 0;
for( i = 0; i < length; i++ )
{
EOF
## this applies to qm-vamp-plugins-v1.7.1-20-g4d15479
## fix OSX 10.5 / PPC builds gcc4.2
patch -p3 << EOF
diff --git a/libs/qm-dsp/base/KaiserWindow.h b/libs/qm-dsp/base/KaiserWindow.h
index f16a4b6c1..0253d6d4c 100644
--- a/libs/qm-dsp/base/KaiserWindow.h
+++ b/libs/qm-dsp/base/KaiserWindow.h
@@ -81,7 +81,7 @@ public:
}
const double *getWindow() const {
- return m_window.data();
+ return &m_window[0];
}
void cut(double *src) const {
diff --git a/libs/qm-dsp/base/SincWindow.h b/libs/qm-dsp/base/SincWindow.h
index bb35d90c2..02de92867 100644
--- a/libs/qm-dsp/base/SincWindow.h
+++ b/libs/qm-dsp/base/SincWindow.h
@@ -37,7 +37,7 @@ public:
}
const double *getWindow() const {
- return m_window.data();
+ return &m_window[0];
}
void cut(double *src) const {
EOF
## this applies to qm-vamp-plugins-v1.7.1-20-g4d15479
## MSVC compatibility
patch -p3 << EOF
diff --git a/libs/qm-dsp/dsp/signalconditioning/Filter.cpp b/libs/qm-dsp/dsp/signalconditioning/Filter.cpp
index e9523e229..53fb35abe 100644
--- a/libs/qm-dsp/dsp/signalconditioning/Filter.cpp
+++ b/libs/qm-dsp/dsp/signalconditioning/Filter.cpp
@@ -74,8 +74,8 @@ Filter::reset()
}
void
-Filter::process(const double *const __restrict__ in,
- double *const __restrict__ out,
+Filter::process(const double *const __restrict in,
+ double *const __restrict out,
const int n)
{
for (int s = 0; s < n; ++s) {
diff --git a/libs/qm-dsp/dsp/signalconditioning/Filter.h b/libs/qm-dsp/dsp/signalconditioning/Filter.h
index 05f79e972..8c1aee731 100644
--- a/libs/qm-dsp/dsp/signalconditioning/Filter.h
+++ b/libs/qm-dsp/dsp/signalconditioning/Filter.h
@@ -42,8 +42,8 @@ public:
* write the resulting \arg n samples into \arg out. There must be
* enough room in \arg out for \arg n samples to be written.
*/
- void process(const double *const __restrict__ in,
- double *const __restrict__ out,
+ void process(const double *const __restrict in,
+ double *const __restrict out,
const int n);
int getOrder() const { return m_order; }
EOF
git add gitrev.txt base dsp ext maths