diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-05 00:01:18 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-05 00:01:18 +0000 |
commit | 42995d7bf396933ee60c5f89c354ea89cf13df0d (patch) | |
tree | cfdcea0ac57420e7baf570bfe435e107bb842541 /flow/convert.h | |
download | arts-42995d7bf396933ee60c5f89c354ea89cf13df0d.tar.gz arts-42995d7bf396933ee60c5f89c354ea89cf13df0d.zip |
Copy of aRts for Trinity modifications
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/dependencies/arts@1070145 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'flow/convert.h')
-rw-r--r-- | flow/convert.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/flow/convert.h b/flow/convert.h new file mode 100644 index 0000000..35551a1 --- /dev/null +++ b/flow/convert.h @@ -0,0 +1,164 @@ + /* + + Copyright (C) 2000 Stefan Westerfeld + stefan@space.twc.de + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + */ + +#ifndef _arts_convert_h +#define _arts_convert_h + +#include "arts_export.h" + +/* + * BC - Status (2002-03-08): conversion functions + * + * None of them will be removed or changed, so it is safe to use them in + * your apps. It is *recommended* (though not necessary) to use the new + * resampling code (Resampler) where possible. + */ + +namespace Arts { + +/* + * Simple conversion routines. The function names are chosen like + * + * convert_mono_FROM_TO for mono conversions + * convert_stereo_FROM_TO for stereo conversions + * + * while FROM/TO are + * + * 8 for 8bit signed data + * 16le for 16bit signed little endian + * float for float data between -1 and 1 + * + * and may be prefixed by 2 to indicate that stereo is done with two seperate + * buffers or i to indicate interleaved stereo (one buffer which contains + * one sample left, one sample right, one sample left etc.) + * + * The parameter speed (for interpolations) is *not* the samplingrate, but + * a relative value. A speed of 2.0 means "play twice as fast". + */ + +// upconversions from integer to float +void ARTS_EXPORT convert_mono_8_float(unsigned long samples, + unsigned char *from, float *to); + +void ARTS_EXPORT interpolate_mono_8_float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *to); + +void ARTS_EXPORT convert_mono_16le_float(unsigned long samples, + unsigned char *from, float *to); + +void ARTS_EXPORT interpolate_mono_16le_float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *to); + +void ARTS_EXPORT convert_mono_16be_float(unsigned long samples, + unsigned char *from, float *to); + +void ARTS_EXPORT interpolate_mono_16be_float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *to); + +void ARTS_EXPORT convert_stereo_i8_2float(unsigned long samples, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT interpolate_stereo_i8_2float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT convert_stereo_i16le_2float(unsigned long samples, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT interpolate_stereo_i16le_2float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT convert_stereo_i16be_2float(unsigned long samples, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT interpolate_stereo_i16be_2float(unsigned long samples, + double startpos, double speed, + unsigned char *from, float *left, float *right); + +void ARTS_EXPORT convert_mono_float_float(unsigned long samples, + float *from, float *to); + +void ARTS_EXPORT interpolate_mono_float_float(unsigned long samples, + double startpos, double speed, + float *from, float *to); + +void ARTS_EXPORT convert_stereo_ifloat_2float(unsigned long samples, + float *from, float *left, float *right); + +void ARTS_EXPORT interpolate_stereo_ifloat_2float(unsigned long samples, + double startpos, double speed, + float *from, float *left, float *right); + +// downconversions from float to integer +void ARTS_EXPORT convert_mono_float_16le(unsigned long samples, + float *from, unsigned char *to); + +void ARTS_EXPORT convert_stereo_2float_i16le(unsigned long samples, + float *left, float *right, unsigned char *to); + +void ARTS_EXPORT convert_mono_float_16be(unsigned long samples, + float *from, unsigned char *to); + +void ARTS_EXPORT convert_stereo_2float_i16be(unsigned long samples, + float *left, float *right, unsigned char *to); + +void ARTS_EXPORT convert_mono_float_8(unsigned long samples, + float *from, unsigned char *to); + +void ARTS_EXPORT convert_stereo_2float_i8(unsigned long samples, + float *left, float *right, unsigned char *to); + + +/* + * This practical routine picks the right conversion routine for given + * parameters and makes boundary checks + */ + +// returnvalue: number of samples generated + +/* formats for unified conversion */ +enum { + uni_convert_u8 = 8, // unsigned 8 bit + uni_convert_s16_le = 16, // signed 16 bit, little endian + uni_convert_s16_be = 17, // signed 16 bit, big endian + uni_convert_float_ne = 0x100 // float, in native size/byteorder +}; + +unsigned long ARTS_EXPORT uni_convert_stereo_2float( + unsigned long samples, // number of required samples + unsigned char *from, // buffer containing the samples + unsigned long fromLen, // length of the buffer + unsigned int fromChannels, // channels stored in the buffer + unsigned int fromBits, // number of bits per sample + // (also: uni_convert_ formats given above) + float *left, float *right, // output buffers for left and right channel + double speed, // speed (2.0 means twice as fast) + double startposition // startposition + ); + +} + +#endif |