Mercurial > audlegacy-plugins
diff src/sndstretch/sndstretch.h @ 881:6bb0e52df3d6 trunk
[svn] - Made port of XMMS plugin SndStretch
author | mf0102 |
---|---|
date | Tue, 20 Mar 2007 12:22:25 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/sndstretch/sndstretch.h Tue Mar 20 12:22:25 2007 -0700 @@ -0,0 +1,152 @@ +// sndstretch.h +// +// sndstretch - algorithm for adjusting pitch and speed of s16le data +// Copyright (C) 2000 Florian Berger +// Email: florian.berger@jk.uni-linz.ac.at +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License Version 2 as +// published by the Free Software Foundation; +// +// This program 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 this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +// + +#ifndef SNDSTRETCH_H +#define SNDSTRETCH_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef short int s16; + + +typedef struct{ + int is_initialized; // init me = 0 + int snr_o_prod; + int snr_i_act; + int snr_o_act; + int pos_act; + int dsnr; + double snr_rest; // init me = 0.0 + + int _RESMAX_div_max, _RESMAX_mod_max; + int fade_in_i, fade_out_i, fade_rest_i; +} StretchJob; + +typedef struct{ + s16 last_samp[10]; /* 10 channels maximum ;) */ + int pos_rest; + + int snr; + int pos1, pos2; + int ch; + int ratio1_i; + int ds_li, ds_li_c, ds_rest; + int snr_proc_m_chnr; +} ScaleJob; + +typedef struct{ + s16 * ring_buff; // init me = (s16*)0 + s16 * ring_buff_old; // init me = (s16*)0 + s16 * buff_help; // init me = (s16*)0 + int ring_size; // init me = 1 + int ring_size_old; // init me = 0 + int ring_pos_w; // init me = 0 + int ring_pos_r; // init me = 0 + int snr_scale_i; + int snr_scale_o; + int snr_stretch_i; + int snr_stretch_o; + int snr_proc_scale; + int snr_proc_stretch; + int is_init; // init me = 0 + int dsnr; + double speed_act; // init me = 0 + double pitch_act; // init me = 0 + int fade_shift_act; + StretchJob stretch_job; + ScaleJob scale_job; +} PitchSpeedJob; + + + +int sndstretch( +// stretches the sound (not changing pitch !!!) +// returns number of output samples produced + s16 * buffer, int buff_size, // ring buffer + int pos_init, // only initial pos in ringbuffer + int snr_i, int snr_o, // enlarge - spec + int chnr, /* # of channels */ + s16 * outbuff, // output + int * out_prod, // # of output-samples produced + int snr_proc, // # of in-samples to process + int initialize // bool + ); + + +int sndscale( +// rescales the sound (including pitch) +// returns number of output samples produced + s16 * buffer, // ring buffer + int snr_i, int snr_o, // enlarge - specification + // (snr_o may not exceed 2^16 for + // integer optimized version) + int chnr, // # of channels + s16 * outbuff, // output + int * out_prod, // # of output-samples produced + int snr_proc, // # of in-samples to process + int initialize // bool + ); + + +int snd_pitch_speed( + /* input */ + s16 *buff_i, int channels, int snr_proc, + /* algorihm parameters */ + int initialize, double pitch, double speed, int fade_shift, + /* output */ + s16 * buff_o, int * snr_produced + ); + + +int snd_stretch_scale(s16 *buff_i, s16 * buff_o, + double pitch, double speed, int channels, + int snr_proc, int * snr_produced, int initialize ); + + +void InitPitchSpeedJob( PitchSpeedJob * job ); + +int snd_pitch_speed_job( + /* input */ + s16 *buff_i, int channels, int snr_proc, + /* algorihm parameters */ + int initialize, double pitch, double speed, int fade_shift, + /* output */ + s16 * buff_o, int * snr_produced, PitchSpeedJob * job, + int vol_corr + ); + +int snd_stretch_scale_job(s16 *buff_i, s16 * buff_o, + double pitch, double speed, int channels, + int snr_proc, int * snr_produced, int initialize, + PitchSpeedJob * job, int init_job); + +void CleanupPitchSpeedJob( PitchSpeedJob * job ); +/* cleaning up the allocated mess would be a good idea */ + +#ifdef __cplusplus +} +#endif + +#endif // SNDSTRETCH_H