annotate src/libsamplerate-0.1.8/tests/simple_test.c @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
parents c7265573341e
children
rev   line source
Chris@0 1 /*
Chris@0 2 ** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
Chris@0 3 **
Chris@0 4 ** This program is free software; you can redistribute it and/or modify
Chris@0 5 ** it under the terms of the GNU General Public License as published by
Chris@0 6 ** the Free Software Foundation; either version 2 of the License, or
Chris@0 7 ** (at your option) any later version.
Chris@0 8 **
Chris@0 9 ** This program is distributed in the hope that it will be useful,
Chris@0 10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 ** GNU General Public License for more details.
Chris@0 13 **
Chris@0 14 ** You should have received a copy of the GNU General Public License
Chris@0 15 ** along with this program; if not, write to the Free Software
Chris@0 16 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Chris@0 17 */
Chris@0 18
Chris@0 19 #include <stdio.h>
Chris@0 20 #include <stdlib.h>
Chris@0 21 #include <string.h>
Chris@0 22 #include <math.h>
Chris@0 23
Chris@0 24 #include <samplerate.h>
Chris@0 25
Chris@0 26 #include "util.h"
Chris@0 27
Chris@0 28 #define BUFFER_LEN 2048
Chris@0 29
Chris@0 30 static void simple_test (int converter, double ratio) ;
Chris@0 31
Chris@0 32 int
Chris@0 33 main (void)
Chris@0 34 { static double src_ratios [] =
Chris@0 35 { 1.0001, 0.099, 0.1, 0.33333333, 0.789, 1.9, 3.1, 9.9
Chris@0 36 } ;
Chris@0 37
Chris@0 38 int k ;
Chris@0 39
Chris@0 40 puts ("") ;
Chris@0 41
Chris@0 42 puts (" Zero Order Hold interpolator :") ;
Chris@0 43 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@0 44 simple_test (SRC_ZERO_ORDER_HOLD, src_ratios [k]) ;
Chris@0 45
Chris@0 46 puts (" Linear interpolator :") ;
Chris@0 47 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@0 48 simple_test (SRC_LINEAR, src_ratios [k]) ;
Chris@0 49
Chris@0 50 puts (" Sinc interpolator :") ;
Chris@0 51 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@0 52 simple_test (SRC_SINC_FASTEST, src_ratios [k]) ;
Chris@0 53
Chris@0 54 puts ("") ;
Chris@0 55
Chris@0 56 return 0 ;
Chris@0 57 } /* main */
Chris@0 58
Chris@0 59 static void
Chris@0 60 simple_test (int converter, double src_ratio)
Chris@0 61 { static float input [BUFFER_LEN], output [BUFFER_LEN] ;
Chris@0 62
Chris@0 63 SRC_DATA src_data ;
Chris@0 64
Chris@0 65 int input_len, output_len, error, terminate ;
Chris@0 66
Chris@0 67 printf ("\tsimple_test (SRC ratio = %6.4f) ........... ", src_ratio) ;
Chris@0 68 fflush (stdout) ;
Chris@0 69
Chris@0 70 /* Calculate maximun input and output lengths. */
Chris@0 71 if (src_ratio >= 1.0)
Chris@0 72 { output_len = BUFFER_LEN ;
Chris@0 73 input_len = (int) floor (BUFFER_LEN / src_ratio) ;
Chris@0 74 }
Chris@0 75 else
Chris@0 76 { input_len = BUFFER_LEN ;
Chris@0 77 output_len = (int) floor (BUFFER_LEN * src_ratio) ;
Chris@0 78 } ;
Chris@0 79
Chris@0 80 /* Reduce input_len by 10 so output is longer than necessary. */
Chris@0 81 input_len -= 10 ;
Chris@0 82
Chris@0 83 if (output_len > BUFFER_LEN)
Chris@0 84 { printf ("\n\nLine %d : output_len > BUFFER_LEN\n\n", __LINE__) ;
Chris@0 85 exit (1) ;
Chris@0 86 } ;
Chris@0 87
Chris@0 88 memset (&src_data, 0, sizeof (src_data)) ;
Chris@0 89
Chris@0 90 src_data.data_in = input ;
Chris@0 91 src_data.input_frames = input_len ;
Chris@0 92
Chris@0 93 src_data.src_ratio = src_ratio ;
Chris@0 94
Chris@0 95 src_data.data_out = output ;
Chris@0 96 src_data.output_frames = BUFFER_LEN ;
Chris@0 97
Chris@0 98 if ((error = src_simple (&src_data, converter, 1)))
Chris@0 99 { printf ("\n\nLine %d : %s\n\n", __LINE__, src_strerror (error)) ;
Chris@0 100 exit (1) ;
Chris@0 101 } ;
Chris@0 102
Chris@0 103 terminate = (int) ceil ((src_ratio >= 1.0) ? src_ratio : 1.0 / src_ratio) ;
Chris@0 104
Chris@0 105 if (fabs (src_data.output_frames_gen - src_ratio * input_len) > 2 * terminate)
Chris@0 106 { printf ("\n\nLine %d : bad output data length %ld should be %d.\n", __LINE__,
Chris@0 107 src_data.output_frames_gen, (int) floor (src_ratio * input_len)) ;
Chris@0 108 printf ("\tsrc_ratio : %.4f\n", src_ratio) ;
Chris@0 109 printf ("\tinput_len : %d\n\toutput_len : %d\n\n", input_len, output_len) ;
Chris@0 110 exit (1) ;
Chris@0 111 } ;
Chris@0 112
Chris@0 113 puts ("ok") ;
Chris@0 114
Chris@0 115 return ;
Chris@0 116 } /* simple_test */
Chris@0 117