1 /*************************************************************************/
2 /*                                                                       */
3 /*                Centre for Speech Technology Research                  */
4 /*                     University of Edinburgh, UK                       */
5 /*                      Copyright (c) 1995,1996                          */
6 /*                        All Rights Reserved.                           */
7 /*                                                                       */
8 /*  Permission is hereby granted, free of charge, to use and distribute  */
9 /*  this software and its documentation without restriction, including   */
10 /*  without limitation the rights to use, copy, modify, merge, publish,  */
11 /*  distribute, sublicense, and/or sell copies of this work, and to      */
12 /*  permit persons to whom this work is furnished to do so, subject to   */
13 /*  the following conditions:                                            */
14 /*   1. The code must retain the above copyright notice, this list of    */
15 /*      conditions and the following disclaimer.                         */
16 /*   2. Any modifications must be clearly marked as such.                */
17 /*   3. Original authors' names are not deleted.                         */
18 /*   4. The authors' names are not used to endorse or promote products   */
19 /*      derived from this software without specific prior written        */
20 /*      permission.                                                      */
21 /*                                                                       */
22 /*  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK        */
23 /*  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      */
24 /*  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   */
25 /*  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE     */
26 /*  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    */
27 /*  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   */
28 /*  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          */
29 /*  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       */
30 /*  THIS SOFTWARE.                                                       */
31 /*                                                                       */
32 /*************************************************************************/
33 /*                         Author :  Paul Taylor                         */
34 /*                         Date   :  April 1995                          */
35 /*-----------------------------------------------------------------------*/
36 /*                        Matrix Class for shorts                        */
37 /*                                                                       */
38 /*=======================================================================*/
39 
40 #include <cstdlib>
41 #include <cstdio>
42 #include <fstream>
43 #include <cmath>
44 #include <climits>
45 #include "EST_String.h"
46 #include "EST_types.h"
47 #include "EST_FileType.h"
48 #include "EST_Option.h"
49 #include "EST_SMatrix.h"
50 #include "EST_cutils.h"  // for swap functions
51 #include "EST_Token.h"
52 #include "rateconv.h"
53 
EST_SMatrix(EST_SMatrix & a,int b)54 EST_SMatrix::EST_SMatrix(EST_SMatrix &a, int b)
55 :EST_TSimpleMatrix<short>(a.num_rows(), a.num_columns())
56 {
57     short vv = 0;
58     if (b < 0)
59 	return;
60     if (b == 0)
61 	fill(vv);
62 }
63 
rateconv(int in_samp_freq,int out_samp_freq)64 int EST_SMatrix::rateconv(int in_samp_freq, int out_samp_freq)
65 {
66   short *in_buf = new short[num_rows()];
67   short ** results = new short *[num_columns()];
68   int *len = new int[num_columns()];
69   int max_len=0;
70 
71   for(int c=0; c<num_columns(); c++)
72     {
73       short *out_buf;
74       int osize;
75 
76       copy_column(c, in_buf);
77 
78       if (::rateconv(in_buf,
79 		   num_rows(), &out_buf, &osize,
80 		   in_samp_freq, out_samp_freq) == 0)
81 	{
82 	  results[c]=out_buf;
83 	  len[c]=osize;
84 	  if (osize > max_len)
85 	    max_len = osize;
86 	}
87       else
88 	return -1;
89     }
90   delete [] in_buf;
91 
92   resize(max_len, EST_CURRENT, 0);
93   fill(0);
94 
95   for(int c1=0; c1<num_columns(); c1++)
96     {
97       set_column(c1, results[c1], 0, len[c1]);
98       delete [] results[c1];
99     }
100 
101   delete [] results;
102   delete [] len;
103   return 0;
104 }
105 
106