summaryrefslogtreecommitdiffstats
path: root/src/include/soundformat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/soundformat.h')
-rw-r--r--src/include/soundformat.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/include/soundformat.h b/src/include/soundformat.h
new file mode 100644
index 0000000..0f07d9a
--- /dev/null
+++ b/src/include/soundformat.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ soundformat.h - description
+ -------------------
+ begin : Sun Aug 1 2004
+ copyright : (C) 2004 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. *
+ * *
+ ***************************************************************************/
+
+#ifndef KRADIO_SOUNDFORMAT_H
+#define KRADIO_SOUNDFORMAT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <endian.h>
+#include <tqstring.h>
+#include <tdeconfig.h>
+
+struct SoundFormat {
+ unsigned m_SampleRate;
+ unsigned m_Channels;
+ unsigned m_SampleBits;
+ bool m_IsSigned;
+ unsigned m_Endianess;
+ TQString m_Encoding; // "raw", "mp3", ... (no "wav", because it's only header + raw data)
+
+ SoundFormat(unsigned sample_rate, unsigned channels, unsigned sample_bits, bool is_signed, unsigned endianess, const TQString &enc)
+ : m_SampleRate(sample_rate), m_Channels(channels), m_SampleBits(sample_bits), m_IsSigned(is_signed), m_Endianess(endianess), m_Encoding(enc) {}
+ SoundFormat(unsigned sample_rate, unsigned channels, unsigned sample_bits, bool is_signed, unsigned endianess)
+ : m_SampleRate(sample_rate), m_Channels(channels), m_SampleBits(sample_bits), m_IsSigned(is_signed), m_Endianess(endianess), m_Encoding("raw") {}
+ SoundFormat(unsigned sample_rate, unsigned channels, unsigned sample_bits, bool is_signed)
+ : m_SampleRate(sample_rate), m_Channels(channels), m_SampleBits(sample_bits), m_IsSigned(is_signed), m_Endianess(BYTE_ORDER), m_Encoding("raw") {}
+ SoundFormat(bool stereo)
+ : m_SampleRate(44100), m_Channels(stereo ? 2 : 1), m_SampleBits(16), m_IsSigned(true), m_Endianess(BYTE_ORDER), m_Encoding("raw") {}
+ SoundFormat()
+ : m_SampleRate(44100), m_Channels(2), m_SampleBits(16), m_IsSigned(true), m_Endianess(BYTE_ORDER), m_Encoding("raw") {}
+
+ bool operator == (const SoundFormat &o) const { return m_SampleRate == o.m_SampleRate &&
+ m_Channels == o.m_Channels &&
+ m_SampleBits == o.m_SampleBits &&
+ m_IsSigned == o.m_IsSigned &&
+ m_Endianess == o.m_Endianess &&
+ m_Encoding == o.m_Encoding
+ ;
+ }
+ bool operator != (const SoundFormat &o) const { return !operator == (o); }
+
+ int sampleSize() const; // size of a single sample
+ int frameSize() const; // sampleSize * channels
+ int minValue() const;
+ int maxValue() const;
+
+ void restoreConfig(const TQString &prefix, TDEConfig *c);
+ void saveConfig(const TQString &prefix, TDEConfig *c) const;
+
+ int convertSampleToInt(const char *sample, bool do_scale) const;
+ void convertIntToSample(int src, char *dst, bool is_scaled) const;
+ void convertSamplesToInts(const char *src, int *dst, size_t n, bool do_scale) const;
+ void convertIntsToSamples(const int *src, char *dst, size_t n, bool is_scaled) const;
+ void convertSamplesToFloat (const char *src, float **dst, size_t n) const;
+ void convertFloatsToSamples(const float **src, char *dst, size_t n) const;
+};
+
+
+#endif