/* Calf Box, an open source musical instrument. Copyright (C) 2010-2011 Krzysztof Foltman This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CBOX_SAMPLER_IMPL_H #define CBOX_SAMPLER_IMPL_H extern void sampler_gen_reset(struct sampler_gen *v); extern uint32_t sampler_gen_sample_playback(struct sampler_gen *v, float *leftright, uint32_t limit); extern void sampler_program_change_byidx(struct sampler_module *m, struct sampler_channel *c, int program_idx); extern void sampler_program_change(struct sampler_module *m, struct sampler_channel *c, int program); static inline int sfz_note_from_string(const char *note) { static const int semis[] = {9, 11, 0, 2, 4, 5, 7}; int pos; int nn = tolower(note[0]); int nv; if ((nn >= '0' && nn <= '9') || nn == '-') { int nv = atoi(note); if (nv >= -1 && nv <= 127) return nv; return -2; } if (nn < 'a' || nn > 'g') return -2; nv = semis[nn - 'a']; for (pos = 1; tolower(note[pos]) == 'b' || note[pos] == '#'; pos++) nv += (note[pos] != '#') ? -1 : +1; if ((note[pos] == '-' && note[pos + 1] == '1' && note[pos + 2] == '\0') || (note[pos] >= '0' && note[pos] <= '9' && note[pos + 1] == '\0')) { return nv + 12 * (1 + atoi(note + pos)); } return -2; } static inline gboolean atof_C_verify(const char *key, const char *value, double *result, GError **error) { char *endptr = NULL; double res = g_ascii_strtod(value, &endptr); if (endptr && !*endptr && endptr != value) { *result = res; return TRUE; } g_set_error(error, CBOX_MODULE_ERROR, CBOX_MODULE_ERROR_FAILED, "'%s' is not a correct numeric value for %s", value, key); return FALSE; } #endif