Changes made by Jean-Philippe Meuret to original ATSA (by Oscar Pablo Di Liscia, Pete Moss and Juan Pampin) to adapt it to the needs of QATSH, a Qt 4 GUI to ATSA (made to get a better ATSH, a GTK 1.2 GUI to ATSA) High level description * The ATS file format has not been changed in any way. * All computations have been converted to double (no more floats) * All sampled sound file input / output have been removed from the library => no more link to sndlib (or any other) which implied changing the interface of several functions to replace file names by sample arrays or so. * The synthesis of a sampled sound from an ATS sound has been added, based on code from ATSH (synth-funcs.c) Low level description : * all source files : - replaced mus_sample_t by double everywhere (now atsa works with double precision samples, and is independant from any sound IO library). * atsa.h - changed (fixed) "HAMMING" define to "HANNING" (and updated relevant source files) - removed sndlib related stuff (configuration) - removed includes that are only necessary for function implementation (moved these includes to the .c files) - added some more comments - added some more macros found elsewhere in the code but that should have been put there before - modified interface of several functions : . init_sound : added the 'with_noise' flag for critical noise bands initialization . residual_analysis : replaced the 'file' parameter by double** res, int s_rate, int n_frames . compute_residual : - moved the 'fil' parameter from 'mus_sample_t **' to a 'double *' (enforces double precision and monophonic samples) - removed the output_file parameter : the function now directly returns the computed residual arrays as a double** . tracker : - replaced 'soundfile' char* parameter by double* in_samps, int s_rate, int n_frames - replaced 'resfile' char* parameter by double ***res . ppp2 : changed num arg type from 'int' to 'unsigned int' . changed char* to const char* everywhere - added ats_load function to load an ATS sound from a file - added set_av (made public this funtion from utilities.c) - added do_synthesis (from new synthesis.c) - added do_atsh_synthesis (from new synthesis.atsh.c) - added 'max_partials' field to ATS_SOUND structure, to enable variable number of partials - added increase_max_partials to reallocate/copy partials data arrays in an ATS_SOUND - added add_partial to add a new partial (all 0 or copy of a given one) - added remove_partial to remove a given partial - removed main_anal function (it's more a use example than a part of the library) - redeclared ATSA_CRITICAL_BAND_EDGES as an extern double array (defined in critical-bands.c) - removed unused 'args' field from ANARGS structure - removed unused 'bands' field from ATS_SOUND structure * utilities.c - init_sound : . added the 'with_noise' flag for critical noise bands initialization and associated code (allocating ATS_SOUND::band_energy or setting it to 0) . added initializaton of ampmax and freqmax to NIL, bands to 0 . added initialization of the new 'max_partials' field (same value as 'partials') - free_sound : . uncommented the allocation of band_energy . replaced every call to free(p) by if(p){free(p); p=0;} for safety . changed partials array data size to 'max_partials' - ppp2 : . changed num arg type from 'int' to 'unsigned int' - set_av : . added partial amplitude (amp) average computation . added partial sorting by increasing frequency - added increase_max_partials for reallocating a sound with more possible partials - added add_partial to add a new partial (all 0 or copy of a given one) - added remove_partial to remove a given partial * save-load-sound.c - added ats_load function to load an ATS sound from a file with transparent little/big endian management (taken from atsh); output ATS sound is assumed to be optimized (ats_save enforces this). * tracker.c . compute_frames : fixed buggy computation returning more frames than necessary. . tracker: - replaced 'soundfile' char* parameter by double* in_samps, int s_rate, int n_frames - replaced 'resfile' char* parameter by double ***res - enforces in_samps to be a monophonic sound (no more error if stereo) - no more loading of the input sample file - no more storing of the computed residual to disk (updates res) - fixed generated ATS_SOUND duration to the really analyzed one (nb frames * nb samples per frame / sample rate) * residual-analysis.c - residual_analysis : . replaced the 'file' parameter by double** res, int s_rate, int n_frames . no more loading of the input residual sample file - updated code that uses ATSA_CRITICAL_BAND_EDGES (now a double array, no more a macro). * residual.c - compute_residual : . moved the 'fil' parameter from 'mus_sample_t **' to a 'double *' (enforces double precision and monophonic samples) . removed the output_file parameter : the function now directly returns the computed residual arrays as a double** * critical-bands.c - added definition of ATSA_CRITICAL_BAND_EDGES (an extern double array declared in atsa.h that was formely defined as a macro) - updated code that uses it. * synthesis.atsh.c - new synthesis related function, heavily inspired by synth-funcs.c from ATSH * synthesis.c - new synthesis related function, an improved version of synthesis.atsh.c * other-utils.c - fixed unsecure peak_frq_inc and peak_smr_dec about integer overflow * peak-detection.c * peak-tracking.c * atsa.c and atsa-nogui.c : removed from the library, to make it independand from any sampled sound file IO library ; should be put in an example project