annotate src/libsamplerate-0.1.9/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 4a7071416412
children
rev   line source
cannam@126 1 /*
cannam@126 2 ** Copyright (c) 2002-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
cannam@126 3 ** All rights reserved.
cannam@126 4 **
cannam@126 5 ** This code is released under 2-clause BSD license. Please see the
cannam@126 6 ** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING
cannam@126 7 */
cannam@126 8
cannam@126 9 #include <stdio.h>
cannam@126 10 #include <stdlib.h>
cannam@126 11 #include <string.h>
cannam@126 12 #include <ctype.h>
cannam@126 13 #include <math.h>
cannam@126 14
cannam@126 15 #include "util.h"
cannam@126 16
cannam@126 17 #ifndef M_PI
cannam@126 18 #define M_PI 3.14159265358979323846264338
cannam@126 19 #endif
cannam@126 20
cannam@126 21 void
cannam@126 22 gen_windowed_sines (int freq_count, const double *freqs, double max, float *output, int output_len)
cannam@126 23 { int k, freq ;
cannam@126 24 double amplitude, phase ;
cannam@126 25
cannam@126 26 amplitude = max / freq_count ;
cannam@126 27
cannam@126 28 for (k = 0 ; k < output_len ; k++)
cannam@126 29 output [k] = 0.0 ;
cannam@126 30
cannam@126 31 for (freq = 0 ; freq < freq_count ; freq++)
cannam@126 32 { phase = 0.9 * M_PI / freq_count ;
cannam@126 33
cannam@126 34 if (freqs [freq] <= 0.0 || freqs [freq] >= 0.5)
cannam@126 35 { printf ("\n%s : Error : freq [%d] == %g is out of range. Should be < 0.5.\n", __FILE__, freq, freqs [freq]) ;
cannam@126 36 exit (1) ;
cannam@126 37 } ;
cannam@126 38
cannam@126 39 for (k = 0 ; k < output_len ; k++)
cannam@126 40 output [k] += amplitude * sin (freqs [freq] * (2 * k) * M_PI + phase) ;
cannam@126 41 } ;
cannam@126 42
cannam@126 43 /* Apply Hanning Window. */
cannam@126 44 for (k = 0 ; k < output_len ; k++)
cannam@126 45 output [k] *= 0.5 - 0.5 * cos ((2 * k) * M_PI / (output_len - 1)) ;
cannam@126 46
cannam@126 47 /* data [k] *= 0.3635819 - 0.4891775 * cos ((2 * k) * M_PI / (output_len - 1))
cannam@126 48 + 0.1365995 * cos ((4 * k) * M_PI / (output_len - 1))
cannam@126 49 - 0.0106411 * cos ((6 * k) * M_PI / (output_len - 1)) ;
cannam@126 50 */
cannam@126 51
cannam@126 52 return ;
cannam@126 53 } /* gen_windowed_sines */
cannam@126 54
cannam@126 55 void
cannam@126 56 save_oct_float (char *filename, float *input, int in_len, float *output, int out_len)
cannam@126 57 { FILE *file ;
cannam@126 58 int k ;
cannam@126 59
cannam@126 60 printf ("Dumping input and output data to file : %s.\n\n", filename) ;
cannam@126 61
cannam@126 62 if (! (file = fopen (filename, "w")))
cannam@126 63 return ;
cannam@126 64
cannam@126 65 fprintf (file, "# Not created by Octave\n") ;
cannam@126 66
cannam@126 67 fprintf (file, "# name: input\n") ;
cannam@126 68 fprintf (file, "# type: matrix\n") ;
cannam@126 69 fprintf (file, "# rows: %d\n", in_len) ;
cannam@126 70 fprintf (file, "# columns: 1\n") ;
cannam@126 71
cannam@126 72 for (k = 0 ; k < in_len ; k++)
cannam@126 73 fprintf (file, "% g\n", input [k]) ;
cannam@126 74
cannam@126 75 fprintf (file, "# name: output\n") ;
cannam@126 76 fprintf (file, "# type: matrix\n") ;
cannam@126 77 fprintf (file, "# rows: %d\n", out_len) ;
cannam@126 78 fprintf (file, "# columns: 1\n") ;
cannam@126 79
cannam@126 80 for (k = 0 ; k < out_len ; k++)
cannam@126 81 fprintf (file, "% g\n", output [k]) ;
cannam@126 82
cannam@126 83 fclose (file) ;
cannam@126 84 return ;
cannam@126 85 } /* save_oct_float */
cannam@126 86
cannam@126 87 void
cannam@126 88 save_oct_double (char *filename, double *input, int in_len, double *output, int out_len)
cannam@126 89 { FILE *file ;
cannam@126 90 int k ;
cannam@126 91
cannam@126 92 printf ("Dumping input and output data to file : %s.\n\n", filename) ;
cannam@126 93
cannam@126 94 if (! (file = fopen (filename, "w")))
cannam@126 95 return ;
cannam@126 96
cannam@126 97 fprintf (file, "# Not created by Octave\n") ;
cannam@126 98
cannam@126 99 fprintf (file, "# name: input\n") ;
cannam@126 100 fprintf (file, "# type: matrix\n") ;
cannam@126 101 fprintf (file, "# rows: %d\n", in_len) ;
cannam@126 102 fprintf (file, "# columns: 1\n") ;
cannam@126 103
cannam@126 104 for (k = 0 ; k < in_len ; k++)
cannam@126 105 fprintf (file, "% g\n", input [k]) ;
cannam@126 106
cannam@126 107 fprintf (file, "# name: output\n") ;
cannam@126 108 fprintf (file, "# type: matrix\n") ;
cannam@126 109 fprintf (file, "# rows: %d\n", out_len) ;
cannam@126 110 fprintf (file, "# columns: 1\n") ;
cannam@126 111
cannam@126 112 for (k = 0 ; k < out_len ; k++)
cannam@126 113 fprintf (file, "% g\n", output [k]) ;
cannam@126 114
cannam@126 115 fclose (file) ;
cannam@126 116 return ;
cannam@126 117 } /* save_oct_double */
cannam@126 118
cannam@126 119 void
cannam@126 120 interleave_data (const float *in, float *out, int frames, int channels)
cannam@126 121 { int fr, ch ;
cannam@126 122
cannam@126 123 for (fr = 0 ; fr < frames ; fr++)
cannam@126 124 for (ch = 0 ; ch < channels ; ch++)
cannam@126 125 out [ch + channels * fr] = in [fr + frames * ch] ;
cannam@126 126
cannam@126 127 return ;
cannam@126 128 } /* interleave_data */
cannam@126 129
cannam@126 130 void
cannam@126 131 deinterleave_data (const float *in, float *out, int frames, int channels)
cannam@126 132 { int fr, ch ;
cannam@126 133
cannam@126 134 for (ch = 0 ; ch < channels ; ch++)
cannam@126 135 for (fr = 0 ; fr < frames ; fr++)
cannam@126 136 out [fr + frames * ch] = in [ch + channels * fr] ;
cannam@126 137
cannam@126 138 return ;
cannam@126 139 } /* deinterleave_data */
cannam@126 140
cannam@126 141 void
cannam@126 142 reverse_data (float *data, int datalen)
cannam@126 143 { int left, right ;
cannam@126 144 float temp ;
cannam@126 145
cannam@126 146 left = 0 ;
cannam@126 147 right = datalen - 1 ;
cannam@126 148
cannam@126 149 while (left < right)
cannam@126 150 { temp = data [left] ;
cannam@126 151 data [left] = data [right] ;
cannam@126 152 data [right] = temp ;
cannam@126 153 left ++ ;
cannam@126 154 right -- ;
cannam@126 155 } ;
cannam@126 156
cannam@126 157 } /* reverse_data */
cannam@126 158
cannam@126 159 const char *
cannam@126 160 get_cpu_name (void)
cannam@126 161 {
cannam@126 162 const char *name = "Unknown", *search = NULL ;
cannam@126 163 static char buffer [512] ;
cannam@126 164 FILE * file = NULL ;
cannam@126 165 int is_pipe = 0 ;
cannam@126 166
cannam@126 167 #if defined (__linux__)
cannam@126 168 file = fopen ("/proc/cpuinfo", "r") ;
cannam@126 169 search = "model name" ;
cannam@126 170 #elif defined (__APPLE__)
cannam@126 171 file = popen ("/usr/sbin/system_profiler -detailLevel full SPHardwareDataType", "r") ;
cannam@126 172 search = "Processor Name" ;
cannam@126 173 is_pipe = 1 ;
cannam@126 174 #elif defined (__FreeBSD__)
cannam@126 175 file = popen ("sysctl -a", "r") ;
cannam@126 176 search = "hw.model" ;
cannam@126 177 is_pipe = 1 ;
cannam@126 178 #else
cannam@126 179 file = NULL ;
cannam@126 180 #endif
cannam@126 181
cannam@126 182 if (file == NULL)
cannam@126 183 return name ;
cannam@126 184
cannam@126 185 if (search == NULL)
cannam@126 186 { printf ("Error : search is NULL in function %s.\n", __func__) ;
cannam@126 187 return name ;
cannam@126 188 } ;
cannam@126 189
cannam@126 190 while (fgets (buffer, sizeof (buffer), file) != NULL)
cannam@126 191 if (strstr (buffer, search))
cannam@126 192 { char *src, *dest ;
cannam@126 193
cannam@126 194 if ((src = strchr (buffer, ':')) != NULL)
cannam@126 195 { src ++ ;
cannam@126 196 while (isspace (src [0]))
cannam@126 197 src ++ ;
cannam@126 198 name = src ;
cannam@126 199
cannam@126 200 /* Remove consecutive spaces. */
cannam@126 201 src ++ ;
cannam@126 202 for (dest = src ; src [0] ; src ++)
cannam@126 203 { if (isspace (src [0]) && isspace (dest [-1]))
cannam@126 204 continue ;
cannam@126 205 dest [0] = src [0] ;
cannam@126 206 dest ++ ;
cannam@126 207 } ;
cannam@126 208 dest [0] = 0 ;
cannam@126 209 break ;
cannam@126 210 } ;
cannam@126 211 } ;
cannam@126 212
cannam@126 213 if (is_pipe)
cannam@126 214 pclose (file) ;
cannam@126 215 else
cannam@126 216 fclose (file) ;
cannam@126 217
cannam@126 218 return name ;
cannam@126 219 } /* get_cpu_name */
cannam@126 220