21 float n_pitch,
float a_pitch,
unsigned m_amp,
unsigned n_partials) :
22 _midi_key(m_key), _nom_pitch(n_pitch), _actual_pitch(a_pitch),
23 _max_amp(m_amp), _num_partials(n_partials) {
24 _note_name = (
char *) malloc(strlen(name) + 1);
37 bool SHARCSpectrum::SHARCSpectrum::read_from_file(
char * folder,
char * name) {
45 sprintf(cmd,
"ls %s/*%s.spect", folder, name);
46 inp = popen(cmd,
"r");
48 printf(
"\tError reading command %s\n", cmd);
53 unsigned len = strlen(f_name);
54 if ((retC == NULL) || (len < 2)) {
55 printf(
"\tError finding file %s\n", cmd);
58 if (f_name[len - 1] ==
'\n')
60 inp = fopen(f_name,
"r");
62 printf(
"\tError opening file %s\n", f_name);
66 fscanf(inp,
"%f %f\n", &, &phas);
68 harm->
number = p_count + 1;
70 harm->
amplitude = (float) pow(10.0, (((
double) amp) / 20.0));
72 _partials[p_count++] = harm;
76 if (p_count != _num_partials) {
77 printf(
"\tError: number of partials found (%d) not what I expected (%d) for %s in %s\n", p_count, _num_partials, name, folder);
89 printf(
"\tFR @ AMP @ PHA\n");
113 float real_freq, nom_freq, dur, start, centroid;
114 unsigned note_num, num_harm, m1, m2, m3, max_amp;
115 char note_name[8], f_name[256];
117 _name = (
char *) malloc(strlen(name) + 1);
120 sprintf(f_name,
"%s/%s/CONTENTS", folder, name);
122 input = fopen(f_name,
"r");
124 printf(
"\tError opening file %s\n", f_name);
127 sprintf(f_name,
"%s/%s", folder, name);
129 while( ! feof(input)) {
130 fscanf(input,
"%s %d %d %d %f %f %d %d %d %f %f %f\n",
131 note_name, ¬e_num, &num_harm, &max_amp, &nom_freq, &real_freq,
132 &m1, &m2, &m3, &dur, &start, ¢roid);
133 spect =
new SHARCSpectrum(f_name, note_name, note_num, nom_freq, real_freq,
145 char * * names = (
char * *) malloc(
_num_spectra * (
sizeof(
char *)));
154 unsigned * names = (
unsigned *) malloc(
_num_spectra * (
sizeof(
unsigned)));
163 float * names = (
float *) malloc(
_num_spectra * (
sizeof(
float)));
173 if ( ! strcmp(
_spectra[i]->_note_name, name)) {
182 if (
_spectra[i]->_midi_key == key) {
191 if (
_spectra[i]->_actual_pitch == freq) {
218 printf(
"\tSample spectrum for instrument %s sample %s\n",
_name, spect->
_note_name);
244 struct dirent * entry_p;
247 fprintf(stderr,
"Loading SHARC database from folder %s\n", folder);
248 dir_p = opendir(folder);
249 while(NULL != (entry_p = readdir(dir_p))) {
250 if (entry_p->d_name[0] !=
'.') {
252 sprintf(f_name,
"%s/%s", folder, entry_p->d_name);
254 if (stat (f_name, &stat_p) < 0) {
255 printf(
"\tError checking file %s\n", f_name);
259 if (S_ISDIR(stat_p.st_mode)) {
301 unsigned inst_c, spect_c, part_c;
303 inst_c = spect_c = part_c = 0;
310 logMsg(
"Loaded SHARC library = %d instruments, %d spectra, %d partials\n", inst_c, spect_c, part_c);
383 char ** i_names, ** s_names;
387 printf(
"Names of instruments:\n");
389 printf(
"\t%s\n", i_names[i]);
392 printf(
"Names of samples in instrument %s:\n", inst->
_name);
395 printf(
"\t%s\n", s_names[i]);
static void loadDefault()
void logMsg(const char *format,...)
These are the public logging messages.
unsigned count_partials()
unsigned * spectrum_keys()
bool read_from_directory(char *name)
AdditiveInstrument.h – Sum-of-sines synthesis instrument class.
static SHARCInstrument * instrument(char *instr)
char ** instrument_names()
float * spectrum_frequencies()
SHARCSpectrum ** _spectra
static SHARCLibrary * library()
unsigned _num_instruments
bool read_from_TOC(char *folder, char *name)
SHARCInstrument * instrument_named(const char *name)
#define CSL_NAME_LEN
default string length
static SHARCSpectrum * spectrum(const char *instr, char *note)
Struct for partial overtones.
unsigned count_partials()
SHARCSpectrum * spectrum_with_frequency(float freq)
SHARCSpectrum(char *folder, char *name, unsigned m_key, float n_pitch, float a_pitch, unsigned m_amp, unsigned n_partials)
SHARCInstrument(char *folder, char *name)
static SHARCLibrary * sSHARCLib
The protected single instance of the HRTF Database.
bool read_from_file(char *folder, char *name)
SHARCInstrument ** _instruments
SHARCSpectrum * spectrum_named(char *name)
SHARCSpectrum * spectrum_named(const char *inst, char *spect)
SHARCSpectrum * spectrum_with_key(unsigned key)
static std::string dataFolder()
the default directory for test data