diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2022-05-30 19:40:31 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2022-05-31 01:17:58 +0900 |
commit | d95a4fea540b371fa86493d069fdbd54f33c5b40 (patch) | |
tree | 079b038ab559439eb7ded40a07bd79fd92926b3b /plugins/recording/recording-config.cpp | |
parent | e54890e0480e5adee69f5220a7c6dd072bbd75ea (diff) | |
download | tderadio-d95a4fea540b371fa86493d069fdbd54f33c5b40.tar.gz tderadio-d95a4fea540b371fa86493d069fdbd54f33c5b40.zip |
Standardize folder structure.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'plugins/recording/recording-config.cpp')
-rw-r--r-- | plugins/recording/recording-config.cpp | 215 |
1 files changed, 215 insertions, 0 deletions
diff --git a/plugins/recording/recording-config.cpp b/plugins/recording/recording-config.cpp new file mode 100644 index 0000000..2395e28 --- /dev/null +++ b/plugins/recording/recording-config.cpp @@ -0,0 +1,215 @@ +/*************************************************************************** + recording-config.cpp - description + ------------------- + begin : Mi Apr 30 2005 + copyright : (C) 2005 by Martin Witte + email : witte@kawo1.rwth-aachen.de + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free 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 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "recording-config.h" + +#include <sndfile.h> + +RecordingConfig::RecordingConfig () +: m_EncodeBufferSize(256*1024), + m_EncodeBufferCount(3), + m_mp3Quality(7), + m_oggQuality(1.0), + m_Directory("/tmp"), + m_OutputFormat(outputWAV), + m_PreRecordingEnable (false), + m_PreRecordingSeconds(10) +{ + checkFormatSettings(); +} + +RecordingConfig::RecordingConfig (const TQString &directory, + OutputFormat of, + const SoundFormat &sf, int mp3_q, float ogg_q) +: m_EncodeBufferSize(256*1024), + m_EncodeBufferCount(3), + m_SoundFormat(sf), + m_mp3Quality(mp3_q), + m_oggQuality(ogg_q), + m_Directory(directory), + m_OutputFormat(of), + m_PreRecordingEnable (false), + m_PreRecordingSeconds(10) +{ + checkFormatSettings(); +} + + +RecordingConfig::RecordingConfig (const RecordingConfig &c) + : + m_EncodeBufferSize(c.m_EncodeBufferSize), + m_EncodeBufferCount(c.m_EncodeBufferCount), + m_SoundFormat(c.m_SoundFormat), + m_mp3Quality(c.m_mp3Quality), + m_oggQuality(c.m_oggQuality), + m_Directory(c.m_Directory), + m_OutputFormat(c.m_OutputFormat), + m_PreRecordingEnable (false), + m_PreRecordingSeconds(10) +{ + checkFormatSettings(); +} + + +void RecordingConfig::restoreConfig(TDEConfig *c) +{ + m_EncodeBufferSize = c->readNumEntry("encodeBufferSize", 256*1024); + m_EncodeBufferCount = c->readNumEntry("encodeBufferCount", 3); + + m_SoundFormat.restoreConfig("", c); + m_Directory = c->readEntry("directory", "/tmp"); + m_mp3Quality = c->readNumEntry("mp3quality", 7); + m_oggQuality = c->readDoubleNumEntry("oggquality", 1.0); + TQString of = c->readEntry("outputFormat", ".wav"); + + if (of == ".wav") + m_OutputFormat = outputWAV; + else if (of == ".aiff") + m_OutputFormat = outputAIFF; + else if (of == ".au") + m_OutputFormat = outputAU; +#ifdef HAVE_LAME + else if (of == ".mp3") + m_OutputFormat = outputMP3; +#endif +#ifdef HAVE_OGG + else if (of == ".ogg") + m_OutputFormat = outputOGG; +#endif + else if (of == ".raw") + m_OutputFormat = outputRAW; + + // if there was any unknown format + else + m_OutputFormat = outputWAV; + + m_PreRecordingEnable = c->readBoolEntry("prerecording-enable", false); + m_PreRecordingSeconds = c->readNumEntry("prerecording-seconds", 10); + + checkFormatSettings(); +} + + +void RecordingConfig::saveConfig(TDEConfig *c) const +{ + c->writeEntry("encodeBufferSize", m_EncodeBufferSize); + c->writeEntry("encodeBufferCount", m_EncodeBufferCount); + m_SoundFormat.saveConfig("", c); + c->writeEntry("directory", m_Directory); + c->writeEntry("mp3quality", m_mp3Quality); + c->writeEntry("oggquality", m_oggQuality); + + switch(m_OutputFormat) { + case outputWAV: c->writeEntry("outputFormat", ".wav"); break; + case outputAIFF: c->writeEntry("outputFormat", ".aiff"); break; + case outputAU: c->writeEntry("outputFormat", ".au"); break; + case outputMP3: c->writeEntry("outputFormat", ".mp3"); break; + case outputOGG: c->writeEntry("outputFormat", ".ogg"); break; + case outputRAW: c->writeEntry("outputFormat", ".raw"); break; + default: c->writeEntry("outputFormat", ".wav"); break; + } + + c->writeEntry("prerecording-enable", m_PreRecordingEnable); + c->writeEntry("prerecording-seconds", m_PreRecordingSeconds); +} + + +void RecordingConfig::getSoundFileInfo(SF_INFO &sinfo, bool input) +{ + checkFormatSettings(); + + sinfo.samplerate = m_SoundFormat.m_SampleRate; + sinfo.channels = m_SoundFormat.m_Channels; + sinfo.format = 0; + sinfo.seekable = !input; + + // U8 only supported for RAW and WAV + if (m_SoundFormat.m_SampleBits == 8) { + if ((m_SoundFormat.m_IsSigned && + m_OutputFormat != outputWAV) || + m_OutputFormat == outputAU + ) { + sinfo.format |= SF_FORMAT_PCM_S8; + } else { + sinfo.format |= SF_FORMAT_PCM_U8; + } + } + if (m_SoundFormat.m_SampleBits == 16) + sinfo.format |= SF_FORMAT_PCM_16; + + if (m_SoundFormat.m_Endianess == LITTLE_ENDIAN) + sinfo.format |= SF_ENDIAN_LITTLE; + else + sinfo.format |= SF_ENDIAN_BIG; + + if (input) { + sinfo.format |= SF_FORMAT_RAW; + } else { + switch (m_OutputFormat) { + case outputWAV: sinfo.format |= SF_FORMAT_WAV; break; + case outputAIFF: sinfo.format |= SF_FORMAT_AIFF; break; + case outputAU: sinfo.format |= SF_FORMAT_AU; break; + case outputRAW: sinfo.format |= SF_FORMAT_RAW; break; + default: sinfo.format |= SF_FORMAT_WAV; break; + } + } +} + + +void RecordingConfig::checkFormatSettings() +{ + // correct Endianess and Signs for specific formats + switch (m_OutputFormat) { + case outputWAV: + m_SoundFormat.m_Endianess = LITTLE_ENDIAN; + if (m_SoundFormat.m_SampleBits == 8) + m_SoundFormat.m_IsSigned = false; + // libsndfile only supports signed 16 bit samples + if (m_SoundFormat.m_SampleBits == 16) + m_SoundFormat.m_IsSigned = true; + break; + case outputAIFF: + m_SoundFormat.m_Endianess = BIG_ENDIAN; + // libsndfile only supports signed 16 bit samples + if (m_SoundFormat.m_SampleBits == 16) + m_SoundFormat.m_IsSigned = true; + break; + case outputAU: + m_SoundFormat.m_Endianess = BIG_ENDIAN; + m_SoundFormat.m_IsSigned = true; + // libsndfile only supports signed 16 bit samples + if (m_SoundFormat.m_SampleBits == 16) + m_SoundFormat.m_IsSigned = true; + break; + case outputMP3: + m_SoundFormat.m_IsSigned = true; + m_SoundFormat.m_SampleBits = 16; + break; + case outputOGG: + m_SoundFormat.m_IsSigned = true; + m_SoundFormat.m_SampleBits = 16; + break; + case outputRAW: + // libsndfile only supports signed 16 bit samples + if (m_SoundFormat.m_SampleBits == 16) + m_SoundFormat.m_IsSigned = true; + break; + default: + break; + } +} + |