0ae49c2719
Instead of having a global quality setting for the encoder make the encoder provide its default value by itself. Fixes the libmp3lame encoder using an unsuitable value since the range differs greatly between the encoders. Centralize reading the configuration values for rbspeex. The values are stored in member variables, so it's not necessary to read them multiple times. Change-Id: Ia26cb1fc3bb4f927d13212fe7883bdfe2571a711
118 lines
3.8 KiB
C++
118 lines
3.8 KiB
C++
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
*
|
|
* Copyright (C) 2007 by Dominik Wenger
|
|
*
|
|
* All files in this archive are subject to the GNU General Public License.
|
|
* See the file COPYING in the source tree root for full license agreement.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include <QtCore>
|
|
#include "encoderrbspeex.h"
|
|
#include "rbsettings.h"
|
|
#include "rbspeex.h"
|
|
|
|
EncoderRbSpeex::EncoderRbSpeex(QObject *parent) : EncoderBase(parent)
|
|
{
|
|
|
|
}
|
|
|
|
void EncoderRbSpeex::generateSettings()
|
|
{
|
|
loadSettings();
|
|
insertSetting(eVOLUME, new EncTtsSetting(this, EncTtsSetting::eDOUBLE,
|
|
tr("Volume:"), volume, 1.0, 10.0));
|
|
insertSetting(eQUALITY, new EncTtsSetting(this, EncTtsSetting::eDOUBLE,
|
|
tr("Quality:"), quality, 0, 10.0));
|
|
insertSetting(eCOMPLEXITY, new EncTtsSetting(this, EncTtsSetting::eINT,
|
|
tr("Complexity:"), complexity, 0, 10));
|
|
insertSetting(eNARROWBAND,new EncTtsSetting(this, EncTtsSetting::eBOOL,
|
|
tr("Use Narrowband:"), narrowband));
|
|
}
|
|
|
|
void EncoderRbSpeex::saveSettings()
|
|
{
|
|
//save settings in user config
|
|
RbSettings::setSubValue("rbspeex",RbSettings::EncoderVolume,
|
|
getSetting(eVOLUME)->current().toDouble());
|
|
RbSettings::setSubValue("rbspeex",RbSettings::EncoderQuality,
|
|
getSetting(eQUALITY)->current().toDouble());
|
|
RbSettings::setSubValue("rbspeex",RbSettings::EncoderComplexity,
|
|
getSetting(eCOMPLEXITY)->current().toInt());
|
|
RbSettings::setSubValue("rbspeex",RbSettings::EncoderNarrowBand,
|
|
getSetting(eNARROWBAND)->current().toBool());
|
|
|
|
RbSettings::sync();
|
|
}
|
|
|
|
|
|
void EncoderRbSpeex::loadSettings(void)
|
|
{
|
|
// try to get config from settings
|
|
quality = RbSettings::subValue("rbspeex", RbSettings::EncoderQuality).toDouble();
|
|
if(quality < 0) {
|
|
quality = 8.0;
|
|
}
|
|
complexity = RbSettings::subValue("rbspeex", RbSettings::EncoderComplexity).toInt();
|
|
volume = RbSettings::subValue("rbspeex", RbSettings::EncoderVolume).toDouble();
|
|
narrowband = RbSettings::subValue("rbspeex", RbSettings::EncoderNarrowBand).toBool();
|
|
}
|
|
|
|
|
|
bool EncoderRbSpeex::start()
|
|
{
|
|
|
|
// make sure configuration parameters are set.
|
|
loadSettings();
|
|
return true;
|
|
}
|
|
|
|
bool EncoderRbSpeex::encode(QString input,QString output)
|
|
{
|
|
qDebug() << "[RbSpeex] Encoding " << input << " to "<< output;
|
|
char errstr[512];
|
|
|
|
FILE *fin,*fout;
|
|
if ((fin = fopen(input.toLocal8Bit(), "rb")) == NULL) {
|
|
qDebug() << "[RbSpeex] Error: could not open input file\n";
|
|
return false;
|
|
}
|
|
if ((fout = fopen(output.toLocal8Bit(), "wb")) == NULL) {
|
|
qDebug() << "[RbSpeex] Error: could not open output file\n";
|
|
fclose(fin);
|
|
return false;
|
|
}
|
|
|
|
int ret = encode_file(fin, fout, quality, complexity, narrowband, volume,
|
|
errstr, sizeof(errstr));
|
|
fclose(fout);
|
|
fclose(fin);
|
|
|
|
if (!ret) {
|
|
/* Attempt to delete unfinished output */
|
|
qDebug() << "[RbSpeex] Error:" << errstr;
|
|
QFile(output).remove();
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool EncoderRbSpeex::configOk()
|
|
{
|
|
// check config. Make sure current settings are loaded.
|
|
loadSettings();
|
|
if(volume <= 0 || quality <= 0 || complexity <= 0)
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
|