1 /* Copyright (C) 2015-2021 Sergey V. Mikayev 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU Lesser General Public License as published by 5 * the Free Software Foundation, either version 2.1 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU Lesser General Public License for more details. 12 * 13 * You should have received a copy of the GNU Lesser General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef MT32EMU_SOXR_ADAPTER_H 18 #define MT32EMU_SOXR_ADAPTER_H 19 20 #include <soxr.h> 21 22 #include "../Enumerations.h" 23 24 namespace MT32Emu { 25 26 class Synth; 27 28 class SoxrAdapter { 29 public: 30 SoxrAdapter(Synth &synth, double targetSampleRate, SamplerateConversionQuality quality); 31 ~SoxrAdapter(); 32 33 void getOutputSamples(float *buffer, unsigned int length); 34 35 private: 36 Synth &synth; 37 float * const inBuffer; 38 soxr_t resampler; 39 40 static size_t getInputSamples(void *input_fn_state, soxr_in_t *data, size_t requested_len); 41 }; 42 43 } // namespace MT32Emu 44 45 #endif // MT32EMU_SOXR_ADAPTER_H 46