annotate src/libsamplerate-0.1.8/tests/util.c @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 545efbb81310
children
rev   line source
cannam@85 1 /*
cannam@85 2 ** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
cannam@85 3 **
cannam@85 4 ** This program is free software; you can redistribute it and/or modify
cannam@85 5 ** it under the terms of the GNU General Public License as published by
cannam@85 6 ** the Free Software Foundation; either version 2 of the License, or
cannam@85 7 ** (at your option) any later version.
cannam@85 8 **
cannam@85 9 ** This program is distributed in the hope that it will be useful,
cannam@85 10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
cannam@85 11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cannam@85 12 ** GNU General Public License for more details.
cannam@85 13 **
cannam@85 14 ** You should have received a copy of the GNU General Public License
cannam@85 15 ** along with this program; if not, write to the Free Software
cannam@85 16 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
cannam@85 17 */
cannam@85 18
cannam@85 19 #include <stdio.h>
cannam@85 20 #include <stdlib.h>
cannam@85 21 #include <string.h>
cannam@85 22 #include <ctype.h>
cannam@85 23 #include <math.h>
cannam@85 24
cannam@85 25 #include "util.h"
cannam@85 26
cannam@85 27 #ifndef M_PI
cannam@85 28 #define M_PI 3.14159265358979323846264338
cannam@85 29 #endif
cannam@85 30
cannam@85 31 void
cannam@85 32 gen_windowed_sines (int freq_count, const double *freqs, double max, float *output, int output_len)
cannam@85 33 { int k, freq ;
cannam@85 34 double amplitude, phase ;
cannam@85 35
cannam@85 36 amplitude = max / freq_count ;
cannam@85 37
cannam@85 38 for (k = 0 ; k < output_len ; k++)
cannam@85 39 output [k] = 0.0 ;
cannam@85 40
cannam@85 41 for (freq = 0 ; freq < freq_count ; freq++)
cannam@85 42 { phase = 0.9 * M_PI / freq_count ;
cannam@85 43
cannam@85 44 if (freqs [freq] <= 0.0 || freqs [freq] >= 0.5)
cannam@85 45 { printf ("\n%s : Error : freq [%d] == %g is out of range. Should be < 0.5.\n", __FILE__, freq, freqs [freq]) ;
cannam@85 46 exit (1) ;
cannam@85 47 } ;
cannam@85 48
cannam@85 49 for (k = 0 ; k < output_len ; k++)
cannam@85 50 output [k] += amplitude * sin (freqs [freq] * (2 * k) * M_PI + phase) ;
cannam@85 51 } ;
cannam@85 52
cannam@85 53 /* Apply Hanning Window. */
cannam@85 54 for (k = 0 ; k < output_len ; k++)
cannam@85 55 output [k] *= 0.5 - 0.5 * cos ((2 * k) * M_PI / (output_len - 1)) ;
cannam@85 56
cannam@85 57 /* data [k] *= 0.3635819 - 0.4891775 * cos ((2 * k) * M_PI / (output_len - 1))
cannam@85 58 + 0.1365995 * cos ((4 * k) * M_PI / (output_len - 1))
cannam@85 59 - 0.0106411 * cos ((6 * k) * M_PI / (output_len - 1)) ;
cannam@85 60 */
cannam@85 61
cannam@85 62 return ;
cannam@85 63 } /* gen_windowed_sines */
cannam@85 64
cannam@85 65 void
cannam@85 66 save_oct_float (char *filename, float *input, int in_len, float *output, int out_len)
cannam@85 67 { FILE *file ;
cannam@85 68 int k ;
cannam@85 69
cannam@85 70 printf ("Dumping input and output data to file : %s.\n\n", filename) ;
cannam@85 71
cannam@85 72 if (! (file = fopen (filename, "w")))
cannam@85 73 return ;
cannam@85 74
cannam@85 75 fprintf (file, "# Not created by Octave\n") ;
cannam@85 76
cannam@85 77 fprintf (file, "# name: input\n") ;
cannam@85 78 fprintf (file, "# type: matrix\n") ;
cannam@85 79 fprintf (file, "# rows: %d\n", in_len) ;
cannam@85 80 fprintf (file, "# columns: 1\n") ;
cannam@85 81
cannam@85 82 for (k = 0 ; k < in_len ; k++)
cannam@85 83 fprintf (file, "% g\n", input [k]) ;
cannam@85 84
cannam@85 85 fprintf (file, "# name: output\n") ;
cannam@85 86 fprintf (file, "# type: matrix\n") ;
cannam@85 87 fprintf (file, "# rows: %d\n", out_len) ;
cannam@85 88 fprintf (file, "# columns: 1\n") ;
cannam@85 89
cannam@85 90 for (k = 0 ; k < out_len ; k++)
cannam@85 91 fprintf (file, "% g\n", output [k]) ;
cannam@85 92
cannam@85 93 fclose (file) ;
cannam@85 94 return ;
cannam@85 95 } /* save_oct_float */
cannam@85 96
cannam@85 97 void
cannam@85 98 save_oct_double (char *filename, double *input, int in_len, double *output, int out_len)
cannam@85 99 { FILE *file ;
cannam@85 100 int k ;
cannam@85 101
cannam@85 102 printf ("Dumping input and output data to file : %s.\n\n", filename) ;
cannam@85 103
cannam@85 104 if (! (file = fopen (filename, "w")))
cannam@85 105 return ;
cannam@85 106
cannam@85 107 fprintf (file, "# Not created by Octave\n") ;
cannam@85 108
cannam@85 109 fprintf (file, "# name: input\n") ;
cannam@85 110 fprintf (file, "# type: matrix\n") ;
cannam@85 111 fprintf (file, "# rows: %d\n", in_len) ;
cannam@85 112 fprintf (file, "# columns: 1\n") ;
cannam@85 113
cannam@85 114 for (k = 0 ; k < in_len ; k++)
cannam@85 115 fprintf (file, "% g\n", input [k]) ;
cannam@85 116
cannam@85 117 fprintf (file, "# name: output\n") ;
cannam@85 118 fprintf (file, "# type: matrix\n") ;
cannam@85 119 fprintf (file, "# rows: %d\n", out_len) ;
cannam@85 120 fprintf (file, "# columns: 1\n") ;
cannam@85 121
cannam@85 122 for (k = 0 ; k < out_len ; k++)
cannam@85 123 fprintf (file, "% g\n", output [k]) ;
cannam@85 124
cannam@85 125 fclose (file) ;
cannam@85 126 return ;
cannam@85 127 } /* save_oct_double */
cannam@85 128
cannam@85 129 void
cannam@85 130 interleave_data (const float *in, float *out, int frames, int channels)
cannam@85 131 { int fr, ch ;
cannam@85 132
cannam@85 133 for (fr = 0 ; fr < frames ; fr++)
cannam@85 134 for (ch = 0 ; ch < channels ; ch++)
cannam@85 135 out [ch + channels * fr] = in [fr + frames * ch] ;
cannam@85 136
cannam@85 137 return ;
cannam@85 138 } /* interleave_data */
cannam@85 139
cannam@85 140 void
cannam@85 141 deinterleave_data (const float *in, float *out, int frames, int channels)
cannam@85 142 { int fr, ch ;
cannam@85 143
cannam@85 144 for (ch = 0 ; ch < channels ; ch++)
cannam@85 145 for (fr = 0 ; fr < frames ; fr++)
cannam@85 146 out [fr + frames * ch] = in [ch + channels * fr] ;
cannam@85 147
cannam@85 148 return ;
cannam@85 149 } /* deinterleave_data */
cannam@85 150
cannam@85 151 void
cannam@85 152 reverse_data (float *data, int datalen)
cannam@85 153 { int left, right ;
cannam@85 154 float temp ;
cannam@85 155
cannam@85 156 left = 0 ;
cannam@85 157 right = datalen - 1 ;
cannam@85 158
cannam@85 159 while (left < right)
cannam@85 160 { temp = data [left] ;
cannam@85 161 data [left] = data [right] ;
cannam@85 162 data [right] = temp ;
cannam@85 163 left ++ ;
cannam@85 164 right -- ;
cannam@85 165 } ;
cannam@85 166
cannam@85 167 } /* reverse_data */
cannam@85 168
cannam@85 169 const char *
cannam@85 170 get_cpu_name (void)
cannam@85 171 {
cannam@85 172 const char *name = "Unknown", *search = NULL ;
cannam@85 173 static char buffer [512] ;
cannam@85 174 FILE * file = NULL ;
cannam@85 175 int is_pipe = 0 ;
cannam@85 176
cannam@85 177 #if defined (__linux__)
cannam@85 178 file = fopen ("/proc/cpuinfo", "r") ;
cannam@85 179 search = "model name" ;
cannam@85 180 #elif defined (__APPLE__)
cannam@85 181 file = popen ("/usr/sbin/system_profiler -detailLevel full SPHardwareDataType", "r") ;
cannam@85 182 search = "Processor Name" ;
cannam@85 183 is_pipe = 1 ;
cannam@85 184 #elif defined (__FreeBSD__)
cannam@85 185 file = popen ("sysctl -a", "r") ;
cannam@85 186 search = "hw.model" ;
cannam@85 187 is_pipe = 1 ;
cannam@85 188 #else
cannam@85 189 file = NULL ;
cannam@85 190 #endif
cannam@85 191
cannam@85 192 if (file == NULL)
cannam@85 193 return name ;
cannam@85 194
cannam@85 195 if (search == NULL)
cannam@85 196 { printf ("Error : search is NULL in function %s.\n", __func__) ;
cannam@85 197 return name ;
cannam@85 198 } ;
cannam@85 199
cannam@85 200 while (fgets (buffer, sizeof (buffer), file) != NULL)
cannam@85 201 if (strstr (buffer, search))
cannam@85 202 { char *src, *dest ;
cannam@85 203
cannam@85 204 if ((src = strchr (buffer, ':')) != NULL)
cannam@85 205 { src ++ ;
cannam@85 206 while (isspace (src [0]))
cannam@85 207 src ++ ;
cannam@85 208 name = src ;
cannam@85 209
cannam@85 210 /* Remove consecutive spaces. */
cannam@85 211 src ++ ;
cannam@85 212 for (dest = src ; src [0] ; src ++)
cannam@85 213 { if (isspace (src [0]) && isspace (dest [-1]))
cannam@85 214 continue ;
cannam@85 215 dest [0] = src [0] ;
cannam@85 216 dest ++ ;
cannam@85 217 } ;
cannam@85 218 dest [0] = 0 ;
cannam@85 219 break ;
cannam@85 220 } ;
cannam@85 221 } ;
cannam@85 222
cannam@85 223 if (is_pipe)
cannam@85 224 pclose (file) ;
cannam@85 225 else
cannam@85 226 fclose (file) ;
cannam@85 227
cannam@85 228 return name ;
cannam@85 229 } /* get_cpu_name */
cannam@85 230