mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactor(filter_audio): completely remove filter_audio dependency
The filter_audio API is not working for qTox/Tox and thus disabled by default via compiler switch. In current qTox UI, it is not configurable, even when this switch is enabled. According to issue #3194 the library is no longer maintained as well. I don't see any reason to keep it in qTox.
This commit is contained in:
parent
a77afca1ec
commit
792103f8b0
|
@ -60,12 +60,6 @@ cd ffmpeg*
|
||||||
make -j$(nproc)
|
make -j$(nproc)
|
||||||
make install
|
make install
|
||||||
cd ../../
|
cd ../../
|
||||||
# filter_audio
|
|
||||||
git clone https://github.com/irungentoo/filter_audio
|
|
||||||
cd filter_audio
|
|
||||||
make -j$(nproc)
|
|
||||||
sudo make install
|
|
||||||
cd ..
|
|
||||||
# libsodium
|
# libsodium
|
||||||
git clone git://github.com/jedisct1/libsodium.git
|
git clone git://github.com/jedisct1/libsodium.git
|
||||||
cd libsodium
|
cd libsodium
|
||||||
|
@ -96,6 +90,6 @@ make -j10
|
||||||
# clean it up, and build normal version
|
# clean it up, and build normal version
|
||||||
make clean
|
make clean
|
||||||
echo '*** BUILDING "FULL" VERSION ***'
|
echo '*** BUILDING "FULL" VERSION ***'
|
||||||
qmake qtox.pro QMAKE_CC="$CC" QMAKE_CXX="$CXX" DISABLE_FILTER_AUDIO=NO
|
qmake qtox.pro QMAKE_CC="$CC" QMAKE_CXX="$CXX"
|
||||||
# ↓ with $(nproc) fails, since travis gives 32 threads, and it leads to OOM
|
# ↓ with $(nproc) fails, since travis gives 32 threads, and it leads to OOM
|
||||||
make -j10
|
make -j10
|
||||||
|
|
33
INSTALL.md
33
INSTALL.md
|
@ -29,7 +29,6 @@
|
||||||
- [openSUSE](#opensuse-toxcore)
|
- [openSUSE](#opensuse-toxcore)
|
||||||
- [Slackware](#slackware-toxcore)
|
- [Slackware](#slackware-toxcore)
|
||||||
- [Ubuntu >=15.04](#ubuntu-toxcore)
|
- [Ubuntu >=15.04](#ubuntu-toxcore)
|
||||||
- [filter_audio](#filter_audio)
|
|
||||||
- [sqlcipher](#sqlcipher)
|
- [sqlcipher](#sqlcipher)
|
||||||
- [Compile toxcore](#compile-toxcore)
|
- [Compile toxcore](#compile-toxcore)
|
||||||
- [Compile qTox](#compile-qtox)
|
- [Compile qTox](#compile-qtox)
|
||||||
|
@ -46,7 +45,6 @@
|
||||||
| toxcore | most recent | core, av |
|
| toxcore | most recent | core, av |
|
||||||
| FFmpeg | >= 2.6.0 | avformat, avdevice, avcodec, avutil, swscale |
|
| FFmpeg | >= 2.6.0 | avformat, avdevice, avcodec, avutil, swscale |
|
||||||
| OpenAL Soft | >= 1.16.0 | |
|
| OpenAL Soft | >= 1.16.0 | |
|
||||||
| filter_audio | most recent | |
|
|
||||||
| qrencode | >= 3.0.3 | |
|
| qrencode | >= 3.0.3 | |
|
||||||
| sqlcipher | >= 3.2.0 | |
|
| sqlcipher | >= 3.2.0 | |
|
||||||
| libXScrnSaver | >= 1.2 | |
|
| libXScrnSaver | >= 1.2 | |
|
||||||
|
@ -298,28 +296,6 @@ libopus-dev libvpx-dev libsodium-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### filter_audio
|
|
||||||
This step is best done before compiling toxcore.
|
|
||||||
|
|
||||||
Now you can either follow the instructions at
|
|
||||||
https://github.com/irungentoo/toxcore/blob/master/INSTALL.md#unix or use the
|
|
||||||
[`bootstrap.sh`](/bootstrap.sh) script. The script will automatically download
|
|
||||||
and install `toxcore` and `libfilteraudio`:
|
|
||||||
```bash
|
|
||||||
## in qTox directory
|
|
||||||
./bootstrap.sh # use -h or --help for more information
|
|
||||||
|
|
||||||
```
|
|
||||||
If you've used script, you can skip directly to [compiling qTox](#compile-qtox).
|
|
||||||
|
|
||||||
If you want to compile and install it manually:
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/irungentoo/filter_audio
|
|
||||||
cd filter_audio
|
|
||||||
make -j$(nproc)
|
|
||||||
sudo make install
|
|
||||||
```
|
|
||||||
|
|
||||||
### sqlcipher
|
### sqlcipher
|
||||||
|
|
||||||
If you are not using Fedora, skip this section, and go directly to compiling
|
If you are not using Fedora, skip this section, and go directly to compiling
|
||||||
|
@ -459,15 +435,6 @@ brew install git ffmpeg qrencode libtool automake autoconf check qt5 libvpx \
|
||||||
opus sqlcipher libsodium
|
opus sqlcipher libsodium
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, install [filter_audio](https://github.com/irungentoo/filter_audio) (you
|
|
||||||
may delete the directory it creates afterwards):
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/irungentoo/filter_audio.git
|
|
||||||
cd filter_audio
|
|
||||||
sudo make install
|
|
||||||
cd ../
|
|
||||||
```
|
|
||||||
|
|
||||||
Next, install
|
Next, install
|
||||||
[toxcore](https://github.com/irungentoo/toxcore/blob/master/INSTALL.md#osx)
|
[toxcore](https://github.com/irungentoo/toxcore/blob/master/INSTALL.md#osx)
|
||||||
|
|
||||||
|
|
34
bootstrap.sh
34
bootstrap.sh
|
@ -39,12 +39,10 @@ BASE_DIR=${SCRIPT_DIR}/${INSTALL_DIR}
|
||||||
|
|
||||||
# directory names of cloned repositories
|
# directory names of cloned repositories
|
||||||
TOX_CORE_DIR=libtoxcore-latest
|
TOX_CORE_DIR=libtoxcore-latest
|
||||||
FILTER_AUDIO_DIR=libfilteraudio-latest
|
|
||||||
SQLCIPHER_DIR=sqlcipher-stable
|
SQLCIPHER_DIR=sqlcipher-stable
|
||||||
|
|
||||||
# default values for user given parameters
|
# default values for user given parameters
|
||||||
INSTALL_TOX=true
|
INSTALL_TOX=true
|
||||||
INSTALL_FILTER_AUDIO=true
|
|
||||||
INSTALL_SQLCIPHER=false
|
INSTALL_SQLCIPHER=false
|
||||||
SYSTEM_WIDE=true
|
SYSTEM_WIDE=true
|
||||||
KEEP_BUILD_FILES=false
|
KEEP_BUILD_FILES=false
|
||||||
|
@ -63,12 +61,6 @@ while [ $# -ge 1 ] ; do
|
||||||
elif [ ${1} = "--without-tox" ] ; then
|
elif [ ${1} = "--without-tox" ] ; then
|
||||||
INSTALL_TOX=false
|
INSTALL_TOX=false
|
||||||
shift
|
shift
|
||||||
elif [ ${1} = "--with-filter-audio" ] ; then
|
|
||||||
INSTALL_FILTER_AUDIO=true
|
|
||||||
shift
|
|
||||||
elif [ ${1} = "--without-filter-audio" ] ; then
|
|
||||||
INSTALL_FILTER_AUDIO=false
|
|
||||||
shift
|
|
||||||
elif [ ${1} = "--with-sqlcipher" ] ; then
|
elif [ ${1} = "--with-sqlcipher" ] ; then
|
||||||
INSTALL_SQLCIPHER=true
|
INSTALL_SQLCIPHER=true
|
||||||
shift
|
shift
|
||||||
|
@ -88,7 +80,7 @@ while [ $# -ge 1 ] ; do
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# print help
|
# print help
|
||||||
echo "Use this script to install/update libtoxcore and libfilteraudio"
|
echo "Use this script to install/update libtoxcore"
|
||||||
echo ""
|
echo ""
|
||||||
echo "usage:"
|
echo "usage:"
|
||||||
echo " ${0} PARAMETERS"
|
echo " ${0} PARAMETERS"
|
||||||
|
@ -96,8 +88,6 @@ while [ $# -ge 1 ] ; do
|
||||||
echo "parameters:"
|
echo "parameters:"
|
||||||
echo " --with-tox : install/update libtoxcore"
|
echo " --with-tox : install/update libtoxcore"
|
||||||
echo " --without-tox : do not install/update libtoxcore"
|
echo " --without-tox : do not install/update libtoxcore"
|
||||||
echo " --with-filter-audio : install/update libfilteraudio"
|
|
||||||
echo " --without-filter-audio : do not install/update libfilteraudio"
|
|
||||||
echo " --with-sqlcipher : install/update sqlcipher"
|
echo " --with-sqlcipher : install/update sqlcipher"
|
||||||
echo " --without-sqlcipher : do not install/update sqlcipher"
|
echo " --without-sqlcipher : do not install/update sqlcipher"
|
||||||
echo " -h|--help : displays this help"
|
echo " -h|--help : displays this help"
|
||||||
|
@ -105,7 +95,7 @@ while [ $# -ge 1 ] ; do
|
||||||
echo " -k|--keep : keep build files after installation/update"
|
echo " -k|--keep : keep build files after installation/update"
|
||||||
echo ""
|
echo ""
|
||||||
echo "example usages:"
|
echo "example usages:"
|
||||||
echo " ${0} -- install libtoxcore and libfilteraudio"
|
echo " ${0} -- install libtoxcore"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -113,7 +103,6 @@ done
|
||||||
|
|
||||||
############ print debug output ############
|
############ print debug output ############
|
||||||
echo "with tox : ${INSTALL_TOX}"
|
echo "with tox : ${INSTALL_TOX}"
|
||||||
echo "with filter-audio : ${INSTALL_FILTER_AUDIO}"
|
|
||||||
echo "with sqlcipher : ${INSTALL_SQLCIPHER}"
|
echo "with sqlcipher : ${INSTALL_SQLCIPHER}"
|
||||||
echo "install system-wide : ${SYSTEM_WIDE}"
|
echo "install system-wide : ${SYSTEM_WIDE}"
|
||||||
echo "keep build files : ${KEEP_BUILD_FILES}"
|
echo "keep build files : ${KEEP_BUILD_FILES}"
|
||||||
|
@ -127,7 +116,6 @@ mkdir -p ${BASE_DIR}
|
||||||
# remove not needed dirs
|
# remove not needed dirs
|
||||||
remove_build_dirs() {
|
remove_build_dirs() {
|
||||||
rm -rf ${BASE_DIR}/${TOX_CORE_DIR}
|
rm -rf ${BASE_DIR}/${TOX_CORE_DIR}
|
||||||
rm -rf ${BASE_DIR}/${FILTER_AUDIO_DIR}
|
|
||||||
rm -rf ${BASE_DIR}/${SQLCIPHER_DIR}
|
rm -rf ${BASE_DIR}/${SQLCIPHER_DIR}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,24 +164,6 @@ if [[ $INSTALL_TOX = "true" ]]; then
|
||||||
popd
|
popd
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#install libfilteraudio
|
|
||||||
if [[ $INSTALL_FILTER_AUDIO = "true" ]]; then
|
|
||||||
git clone https://github.com/irungentoo/filter_audio.git \
|
|
||||||
${BASE_DIR}/${FILTER_AUDIO_DIR} --depth 1
|
|
||||||
pushd ${BASE_DIR}/${FILTER_AUDIO_DIR}
|
|
||||||
|
|
||||||
if [[ $SYSTEM_WIDE = "false" ]]; then
|
|
||||||
PREFIX=${BASE_DIR} make -j$(nproc)
|
|
||||||
PREFIX=${BASE_DIR} make install
|
|
||||||
else
|
|
||||||
make -j$(nproc)
|
|
||||||
sudo make install
|
|
||||||
sudo ldconfig
|
|
||||||
fi
|
|
||||||
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
#install sqlcipher
|
#install sqlcipher
|
||||||
if [[ $INSTALL_SQLCIPHER = "true" ]]; then
|
if [[ $INSTALL_SQLCIPHER = "true" ]]; then
|
||||||
|
|
|
@ -39,7 +39,6 @@ MACDEPLOYQT="${QT_DIR_VER}/bin/macdeployqt" # Don't change
|
||||||
|
|
||||||
TOXCORE_DIR="${MAIN_DIR}/toxcore" # Change to Git location
|
TOXCORE_DIR="${MAIN_DIR}/toxcore" # Change to Git location
|
||||||
|
|
||||||
FA_DIR="${MAIN_DIR}/filter_audio"
|
|
||||||
LIB_INSTALL_PREFIX="${QTOX_DIR}/libs"
|
LIB_INSTALL_PREFIX="${QTOX_DIR}/libs"
|
||||||
|
|
||||||
if [[ ! -e "${LIB_INSTALL_PREFIX}" ]]; then
|
if [[ ! -e "${LIB_INSTALL_PREFIX}" ]]; then
|
||||||
|
@ -139,18 +138,6 @@ function install() {
|
||||||
git clone https://github.com/tux3/qTox.git
|
git clone https://github.com/tux3/qTox.git
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# filter_audio
|
|
||||||
if [[ -e $FA_DIR/.git/index ]]; then # Check if this exists
|
|
||||||
fcho "Filter_Audio git repo already in place !"
|
|
||||||
cd $FA_DIR
|
|
||||||
git pull
|
|
||||||
else
|
|
||||||
fcho "Cloning Filter_Audio git ... "
|
|
||||||
git clone https://github.com/irungentoo/filter_audio.git
|
|
||||||
cd $FA_DIR
|
|
||||||
fi
|
|
||||||
fcho "Installing filter_audio."
|
|
||||||
make install PREFIX="${LIB_INSTALL_PREFIX}"
|
|
||||||
|
|
||||||
# toxcore build
|
# toxcore build
|
||||||
if [[ $TRAVIS = true ]]; then #travis check
|
if [[ $TRAVIS = true ]]; then #travis check
|
||||||
|
@ -231,11 +218,6 @@ function bootstrap() {
|
||||||
fcho "------------------------------"
|
fcho "------------------------------"
|
||||||
fcho "starting bootstrap process ..."
|
fcho "starting bootstrap process ..."
|
||||||
|
|
||||||
# filter_audio
|
|
||||||
cd $FA_DIR
|
|
||||||
fcho "Installing filter_audio."
|
|
||||||
make install PREFIX="${LIB_INSTALL_PREFIX}"
|
|
||||||
|
|
||||||
#Toxcore
|
#Toxcore
|
||||||
build_toxcore
|
build_toxcore
|
||||||
|
|
||||||
|
|
27
qtox.pro
27
qtox.pro
|
@ -68,21 +68,12 @@ contains(DISABLE_PLATFORM_EXT, YES) {
|
||||||
DEFINES += QTOX_PLATFORM_EXT
|
DEFINES += QTOX_PLATFORM_EXT
|
||||||
}
|
}
|
||||||
|
|
||||||
contains(DISABLE_FILTER_AUDIO, NO) {
|
|
||||||
DEFINES += QTOX_FILTER_AUDIO
|
|
||||||
}
|
|
||||||
|
|
||||||
contains(JENKINS,YES) {
|
contains(JENKINS,YES) {
|
||||||
INCLUDEPATH += ./libs/include/
|
INCLUDEPATH += ./libs/include/
|
||||||
} else {
|
} else {
|
||||||
INCLUDEPATH += libs/include
|
INCLUDEPATH += libs/include
|
||||||
}
|
}
|
||||||
|
|
||||||
contains(DEFINES, QTOX_FILTER_AUDIO) {
|
|
||||||
HEADERS += src/audio/audiofilterer.h
|
|
||||||
SOURCES += src/audio/audiofilterer.cpp
|
|
||||||
}
|
|
||||||
|
|
||||||
contains(DEFINES, QTOX_PLATFORM_EXT) {
|
contains(DEFINES, QTOX_PLATFORM_EXT) {
|
||||||
HEADERS += src/platform/timer.h
|
HEADERS += src/platform/timer.h
|
||||||
SOURCES += src/platform/timer_osx.cpp \
|
SOURCES += src/platform/timer_osx.cpp \
|
||||||
|
@ -103,13 +94,6 @@ win32 {
|
||||||
LIBS += -lqrencode -lsqlcipher -lcrypto
|
LIBS += -lqrencode -lsqlcipher -lcrypto
|
||||||
LIBS += -lopengl32 -lole32 -loleaut32 -lvfw32 -lws2_32 -liphlpapi -lgdi32 -lshlwapi -luuid
|
LIBS += -lopengl32 -lole32 -loleaut32 -lvfw32 -lws2_32 -liphlpapi -lgdi32 -lshlwapi -luuid
|
||||||
LIBS += -lstrmiids # For DirectShow
|
LIBS += -lstrmiids # For DirectShow
|
||||||
contains(DEFINES, QTOX_FILTER_AUDIO) {
|
|
||||||
contains(STATICPKG, YES) {
|
|
||||||
LIBS += -Wl,-Bstatic -lfilteraudio
|
|
||||||
} else {
|
|
||||||
LIBS += -lfilteraudio
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
macx {
|
macx {
|
||||||
BUNDLEID = chat.tox.qtox
|
BUNDLEID = chat.tox.qtox
|
||||||
|
@ -120,7 +104,6 @@ win32 {
|
||||||
LIBS += -framework AVFoundation -framework Foundation -framework CoreMedia -framework ApplicationServices
|
LIBS += -framework AVFoundation -framework Foundation -framework CoreMedia -framework ApplicationServices
|
||||||
LIBS += -lqrencode -lsqlcipher
|
LIBS += -lqrencode -lsqlcipher
|
||||||
contains(DEFINES, QTOX_PLATFORM_EXT) { LIBS += -framework IOKit -framework CoreFoundation }
|
contains(DEFINES, QTOX_PLATFORM_EXT) { LIBS += -framework IOKit -framework CoreFoundation }
|
||||||
contains(DEFINES, QTOX_FILTER_AUDIO) { LIBS += -lfilteraudio }
|
|
||||||
#Files to be includes into the qTox.app/Contents/Resources folder
|
#Files to be includes into the qTox.app/Contents/Resources folder
|
||||||
#OSX-Migrater.sh part of migrateProfiles() compatabilty code
|
#OSX-Migrater.sh part of migrateProfiles() compatabilty code
|
||||||
APP_RESOURCE.files = img/icons/qtox_profile.icns OSX-Migrater.sh
|
APP_RESOURCE.files = img/icons/qtox_profile.icns OSX-Migrater.sh
|
||||||
|
@ -167,16 +150,8 @@ win32 {
|
||||||
LIBS += -lX11 -lXss
|
LIBS += -lX11 -lXss
|
||||||
}
|
}
|
||||||
|
|
||||||
contains(DEFINES, QTOX_FILTER_AUDIO) {
|
|
||||||
contains(STATICPKG, YES) {
|
|
||||||
LIBS += -Wl,-Bstatic -lfilteraudio
|
|
||||||
} else {
|
|
||||||
LIBS += -lfilteraudio
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
contains(JENKINS, YES) {
|
contains(JENKINS, YES) {
|
||||||
LIBS = ./libs/lib/libtoxav.a ./libs/lib/libvpx.a ./libs/lib/libopus.a ./libs/lib/libtoxdns.a ./libs/lib/libtoxencryptsave.a ./libs/lib/libtoxcore.a ./libs/lib/libopenal.a ./libs/lib/libsodium.a ./libs/lib/libfilteraudio.a ./libs/lib/libavdevice.a ./libs/lib/libavformat.a ./libs/lib/libavcodec.a ./libs/lib/libavutil.a ./libs/lib/libswscale.a ./libs/lib/libqrencode.a -ldl -lX11 -lXss
|
LIBS = ./libs/lib/libtoxav.a ./libs/lib/libvpx.a ./libs/lib/libopus.a ./libs/lib/libtoxdns.a ./libs/lib/libtoxencryptsave.a ./libs/lib/libtoxcore.a ./libs/lib/libopenal.a ./libs/lib/libsodium.a ./libs/lib/libavdevice.a ./libs/lib/libavformat.a ./libs/lib/libavcodec.a ./libs/lib/libavutil.a ./libs/lib/libswscale.a ./libs/lib/libqrencode.a -ldl -lX11 -lXss
|
||||||
contains(ENABLE_SYSTRAY_UNITY_BACKEND, YES) {
|
contains(ENABLE_SYSTRAY_UNITY_BACKEND, YES) {
|
||||||
LIBS += -lgobject-2.0 -lappindicator -lgtk-x11-2.0
|
LIBS += -lgobject-2.0 -lappindicator -lgtk-x11-2.0
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,6 @@
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
#include "audiofilterer.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@internal
|
@internal
|
||||||
|
|
||||||
|
@ -108,10 +104,6 @@ Audio::Audio()
|
||||||
|
|
||||||
moveToThread(audioThread);
|
moveToThread(audioThread);
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
filterer.startFilter(AUDIO_SAMPLE_RATE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
connect(&captureTimer, &QTimer::timeout, this, &Audio::doCapture);
|
connect(&captureTimer, &QTimer::timeout, this, &Audio::doCapture);
|
||||||
captureTimer.setInterval(AUDIO_FRAME_DURATION/2);
|
captureTimer.setInterval(AUDIO_FRAME_DURATION/2);
|
||||||
captureTimer.setSingleShot(false);
|
captureTimer.setSingleShot(false);
|
||||||
|
@ -128,9 +120,6 @@ Audio::~Audio()
|
||||||
audioThread->wait();
|
audioThread->wait();
|
||||||
cleanupInput();
|
cleanupInput();
|
||||||
cleanupOutput();
|
cleanupOutput();
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
filterer.closeFilter();
|
|
||||||
#endif
|
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,17 +569,6 @@ void Audio::doCapture()
|
||||||
int16_t buf[AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS];
|
int16_t buf[AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS];
|
||||||
alcCaptureSamples(alInDev, buf, AUDIO_FRAME_SAMPLE_COUNT);
|
alcCaptureSamples(alInDev, buf, AUDIO_FRAME_SAMPLE_COUNT);
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
if (Settings::getInstance().getFilterAudio())
|
|
||||||
{
|
|
||||||
#ifdef ALC_LOOPBACK_CAPTURE_SAMPLES
|
|
||||||
// compatibility with older versions of OpenAL
|
|
||||||
getEchoesToFilter(filterer, AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS);
|
|
||||||
#endif
|
|
||||||
filterer.filterAudio(buf, AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (quint32 i = 0; i < AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS; ++i)
|
for (quint32 i = 0; i < AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS; ++i)
|
||||||
{
|
{
|
||||||
// gain amplification with clipping to 16-bit boundaries
|
// gain amplification with clipping to 16-bit boundaries
|
||||||
|
@ -698,18 +676,3 @@ void Audio::stopLoop()
|
||||||
alSourcei(alMainSource, AL_LOOPING, AL_FALSE);
|
alSourcei(alMainSource, AL_LOOPING, AL_FALSE);
|
||||||
alSourceStop(alMainSource);
|
alSourceStop(alMainSource);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(QTOX_FILTER_AUDIO) && defined(ALC_LOOPBACK_CAPTURE_SAMPLES)
|
|
||||||
void Audio::getEchoesToFilter(AudioFilterer* filterer, int samples)
|
|
||||||
{
|
|
||||||
ALint samples;
|
|
||||||
alcGetIntegerv(&alOutDev, ALC_LOOPBACK_CAPTURE_SAMPLES, sizeof(samples), &samples);
|
|
||||||
if (samples >= samples)
|
|
||||||
{
|
|
||||||
int16_t buf[samples];
|
|
||||||
alcCaptureSamplesLoopback(&alOutDev, buf, samples);
|
|
||||||
filterer->passAudioOutput(buf, samples);
|
|
||||||
filterer->setEchoDelayMs(5); // This 5ms is configurable I believe
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -42,9 +42,6 @@
|
||||||
#include <AL/alext.h>
|
#include <AL/alext.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
#include "audiofilterer.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Public default audio settings
|
// Public default audio settings
|
||||||
static constexpr uint32_t AUDIO_SAMPLE_RATE = 48000; ///< The next best Opus would take is 24k
|
static constexpr uint32_t AUDIO_SAMPLE_RATE = 48000; ///< The next best Opus would take is 24k
|
||||||
|
@ -115,9 +112,7 @@ private:
|
||||||
void playMono16SoundCleanup();
|
void playMono16SoundCleanup();
|
||||||
/// Called on the captureTimer events to capture audio
|
/// Called on the captureTimer events to capture audio
|
||||||
void doCapture();
|
void doCapture();
|
||||||
#if defined(QTOX_FILTER_AUDIO) && defined(ALC_LOOPBACK_CAPTURE_SAMPLES)
|
|
||||||
void getEchoesToFilter(AudioFilterer* filter, int samples);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Private* d;
|
Private* d;
|
||||||
|
@ -137,9 +132,6 @@ private:
|
||||||
bool outputInitialized;
|
bool outputInitialized;
|
||||||
|
|
||||||
QList<ALuint> outSources;
|
QList<ALuint> outSources;
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
AudioFilterer filterer;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // AUDIO_H
|
#endif // AUDIO_H
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright © 2014-2015 by The qTox Project
|
|
||||||
|
|
||||||
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
||||||
|
|
||||||
qTox is libre software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
qTox is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with qTox. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
|
|
||||||
#include "audiofilterer.h"
|
|
||||||
extern "C"{
|
|
||||||
#include <filter_audio.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioFilterer::startFilter(uint32_t fs)
|
|
||||||
{
|
|
||||||
closeFilter();
|
|
||||||
filter = new_filter_audio(fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioFilterer::closeFilter()
|
|
||||||
{
|
|
||||||
if (filter)
|
|
||||||
kill_filter_audio(filter);
|
|
||||||
filter = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AudioFilterer::filterAudio(int16_t* data, unsigned int samples)
|
|
||||||
{
|
|
||||||
return filter && 0 == filter_audio(filter, data, samples);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable/disable filters. 1 to enable, 0 to disable. */
|
|
||||||
bool AudioFilterer::enableDisableFilters(int echo, int noise, int gain, int vad)
|
|
||||||
{
|
|
||||||
return filter && 0 == enable_disable_filters(filter, echo, noise, gain, vad);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Give the audio output from your software to this function so it knows what echo to cancel from the frame */
|
|
||||||
bool AudioFilterer::passAudioOutput(const int16_t *data, int samples)
|
|
||||||
{
|
|
||||||
return filter && 0 == pass_audio_output(filter, data, samples);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tell the echo canceller how much time in ms it takes for audio to be played and recorded back after. */
|
|
||||||
bool AudioFilterer::setEchoDelayMs(int16_t msInSndCardBuf)
|
|
||||||
{
|
|
||||||
return filter && 0 == set_echo_delay_ms(filter, msInSndCardBuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioFilterer::~AudioFilterer()
|
|
||||||
{
|
|
||||||
closeFilter();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QTOX_FILTER_AUDIO
|
|
|
@ -1,55 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright © 2014-2015 by The qTox Project
|
|
||||||
|
|
||||||
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
||||||
|
|
||||||
qTox is libre software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
qTox is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with qTox. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
#ifndef AUDIOFILTERER_H
|
|
||||||
#define AUDIOFILTERER_H
|
|
||||||
#include <cstdint>
|
|
||||||
|
|
||||||
#ifndef _FILTER_AUDIO
|
|
||||||
typedef struct Filter_Audio Filter_Audio;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class AudioFilterer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit AudioFilterer() = default;
|
|
||||||
explicit AudioFilterer(const AudioFilterer&) = delete;
|
|
||||||
~AudioFilterer();
|
|
||||||
AudioFilterer operator=(const AudioFilterer) = delete;
|
|
||||||
void startFilter(uint32_t fs);
|
|
||||||
void closeFilter();
|
|
||||||
|
|
||||||
/* Enable/disable filters. 1 to enable, 0 to disable. */
|
|
||||||
bool enableDisableFilters(int echo, int noise, int gain, int vad);
|
|
||||||
|
|
||||||
bool filterAudio(int16_t* data, unsigned int samples);
|
|
||||||
|
|
||||||
/* Give the audio output from your software to this function so it knows what echo to cancel from the frame */
|
|
||||||
bool passAudioOutput(const int16_t *data, int samples);
|
|
||||||
|
|
||||||
/* Tell the echo canceller how much time in ms it takes for audio to be played and recorded back after. */
|
|
||||||
bool setEchoDelayMs(int16_t msInSndCardBuf);
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct Filter_Audio* filter{nullptr};
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // AUDIOFILTERER_H
|
|
||||||
#endif // QTOX_FILTER_AUDIO
|
|
|
@ -31,10 +31,6 @@
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QtConcurrent/QtConcurrentRun>
|
#include <QtConcurrent/QtConcurrentRun>
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
#include "src/audio/audiofilterer.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
IndexedList<ToxFriendCall> CoreAV::calls;
|
IndexedList<ToxFriendCall> CoreAV::calls;
|
||||||
IndexedList<ToxGroupCall> CoreAV::groupCalls;
|
IndexedList<ToxGroupCall> CoreAV::groupCalls;
|
||||||
|
|
||||||
|
@ -251,30 +247,6 @@ bool CoreAV::sendCallAudio(uint32_t callId, const int16_t *pcm, size_t samples,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
if (Settings::getInstance().getFilterAudio())
|
|
||||||
{
|
|
||||||
if (!call.filterer)
|
|
||||||
{
|
|
||||||
call.filterer = new AudioFilterer();
|
|
||||||
call.filterer->startFilter(AUDIO_SAMPLE_RATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ALC_LOOPBACK_CAPTURE_SAMPLES
|
|
||||||
// compatibility with older versions of OpenAL
|
|
||||||
Audio::getInstance().getEchoesToFilter(call.filterer, AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS);
|
|
||||||
#endif
|
|
||||||
call.filterer->filterAudio(buf, AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS);
|
|
||||||
}
|
|
||||||
else if (call.filterer)
|
|
||||||
{
|
|
||||||
delete call.filterer;
|
|
||||||
call.filterer = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// TOXAV_ERR_SEND_FRAME_SYNC means toxav failed to lock, retry 5 times in this case
|
// TOXAV_ERR_SEND_FRAME_SYNC means toxav failed to lock, retry 5 times in this case
|
||||||
TOXAV_ERR_SEND_FRAME err;
|
TOXAV_ERR_SEND_FRAME err;
|
||||||
int retries = 0;
|
int retries = 0;
|
||||||
|
|
|
@ -27,10 +27,6 @@
|
||||||
#include "src/core/toxcall.h"
|
#include "src/core/toxcall.h"
|
||||||
#include <tox/toxav.h>
|
#include <tox/toxav.h>
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
class AudioFilterer;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
class QThread;
|
class QThread;
|
||||||
class CoreVideoSource;
|
class CoreVideoSource;
|
||||||
|
|
|
@ -7,10 +7,6 @@
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QtConcurrent/QtConcurrent>
|
#include <QtConcurrent/QtConcurrent>
|
||||||
|
|
||||||
#ifdef QTOX_FILTER_AUDIO
|
|
||||||
#include "src/audio/audiofilterer.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
ToxCall::ToxCall(uint32_t CallId)
|
ToxCall::ToxCall(uint32_t CallId)
|
||||||
|
|
|
@ -238,7 +238,6 @@ void Settings::loadGlobal()
|
||||||
outDev = s.value("outDev", "").toString();
|
outDev = s.value("outDev", "").toString();
|
||||||
audioInGainDecibel = s.value("inGain", 0).toReal();
|
audioInGainDecibel = s.value("inGain", 0).toReal();
|
||||||
outVolume = s.value("outVolume", 100).toInt();
|
outVolume = s.value("outVolume", 100).toInt();
|
||||||
filterAudio = s.value("filterAudio", false).toBool();
|
|
||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
s.beginGroup("Video");
|
s.beginGroup("Video");
|
||||||
|
@ -469,7 +468,6 @@ void Settings::saveGlobal()
|
||||||
s.setValue("outDev", outDev);
|
s.setValue("outDev", outDev);
|
||||||
s.setValue("inGain", audioInGainDecibel);
|
s.setValue("inGain", audioInGainDecibel);
|
||||||
s.setValue("outVolume", outVolume);
|
s.setValue("outVolume", outVolume);
|
||||||
s.setValue("filterAudio", filterAudio);
|
|
||||||
s.endGroup();
|
s.endGroup();
|
||||||
|
|
||||||
s.beginGroup("Video");
|
s.beginGroup("Video");
|
||||||
|
@ -1414,19 +1412,6 @@ void Settings::setOutVolume(int volume)
|
||||||
outVolume = volume;
|
outVolume = volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Settings::getFilterAudio() const
|
|
||||||
{
|
|
||||||
QMutexLocker locker{&bigLock};
|
|
||||||
// temporary disable filteraudio, as it doesn't work as expected
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Settings::setFilterAudio(bool newValue)
|
|
||||||
{
|
|
||||||
QMutexLocker locker{&bigLock};
|
|
||||||
filterAudio = newValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
QSize Settings::getCamVideoRes() const
|
QSize Settings::getCamVideoRes() const
|
||||||
{
|
{
|
||||||
QMutexLocker locker{&bigLock};
|
QMutexLocker locker{&bigLock};
|
||||||
|
|
|
@ -187,9 +187,6 @@ public:
|
||||||
int getOutVolume() const;
|
int getOutVolume() const;
|
||||||
void setOutVolume(int volume);
|
void setOutVolume(int volume);
|
||||||
|
|
||||||
bool getFilterAudio() const;
|
|
||||||
void setFilterAudio(bool newValue);
|
|
||||||
|
|
||||||
QString getVideoDev() const;
|
QString getVideoDev() const;
|
||||||
void setVideoDev(const QString& deviceSpecifier);
|
void setVideoDev(const QString& deviceSpecifier);
|
||||||
|
|
||||||
|
@ -434,7 +431,6 @@ private:
|
||||||
QString outDev;
|
QString outDev;
|
||||||
qreal audioInGainDecibel;
|
qreal audioInGainDecibel;
|
||||||
int outVolume;
|
int outVolume;
|
||||||
bool filterAudio;
|
|
||||||
|
|
||||||
// Video
|
// Video
|
||||||
QString videoDev;
|
QString videoDev;
|
||||||
|
|
|
@ -407,11 +407,6 @@ void AVForm::onOutDevChanged(QString deviceDescriptor)
|
||||||
bodyUI->playbackSlider->setSliderPosition(qRound(audio.outputVolume() * 100.0));
|
bodyUI->playbackSlider->setSliderPosition(qRound(audio.outputVolume() * 100.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AVForm::onFilterAudioToggled(bool filterAudio)
|
|
||||||
{
|
|
||||||
Settings::getInstance().setFilterAudio(filterAudio);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AVForm::onPlaybackValueChanged(int value)
|
void AVForm::onPlaybackValueChanged(int value)
|
||||||
{
|
{
|
||||||
Settings::getInstance().setOutVolume(value);
|
Settings::getInstance().setOutVolume(value);
|
||||||
|
|
|
@ -56,7 +56,6 @@ private slots:
|
||||||
// audio
|
// audio
|
||||||
void onInDevChanged(QString deviceDescriptor);
|
void onInDevChanged(QString deviceDescriptor);
|
||||||
void onOutDevChanged(QString deviceDescriptor);
|
void onOutDevChanged(QString deviceDescriptor);
|
||||||
void onFilterAudioToggled(bool filterAudio);
|
|
||||||
void onPlaybackValueChanged(int value);
|
void onPlaybackValueChanged(int value);
|
||||||
void onMicrophoneValueChanged(int value);
|
void onMicrophoneValueChanged(int value);
|
||||||
|
|
||||||
|
|
|
@ -29,27 +29,6 @@ if [ ! -d "include/tox" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
## filter_audio
|
|
||||||
if [ ! -d $QTOX_DIR/libs/filter_audio ]; then
|
|
||||||
git clone https://github.com/irungentoo/filter_audio.git $QTOX_DIR/libs/filter_audio
|
|
||||||
rm bin/libfilteraudio.dll
|
|
||||||
else
|
|
||||||
pushd $QTOX_DIR/libs/filter_audio
|
|
||||||
git pull
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "bin/libfilteraudio.dll" ]; then
|
|
||||||
pushd $QTOX_DIR/libs/filter_audio
|
|
||||||
PREFIX="$QTOX_DIR/libs" CC="gcc.exe" make install
|
|
||||||
mv libfilteraudio.dll.a $QTOX_DIR/libs/lib
|
|
||||||
popd
|
|
||||||
if [ -f "lib/libfilteraudio.dll" ]; then
|
|
||||||
mv lib/libfilteraudio.dll bin/
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
## qrencode
|
## qrencode
|
||||||
if [ ! -f "qrencode-3.4.4.tar.gz" ]; then
|
if [ ! -f "qrencode-3.4.4.tar.gz" ]; then
|
||||||
wget http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
|
wget http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
|
||||||
|
|
Loading…
Reference in New Issue
Block a user