libsndfile / libsamplerate

An audio Sample Rate Conversion library
http://libsndfile.github.io/libsamplerate/
BSD 2-Clause "Simplified" License
600 stars 167 forks source link

need help with resampling the waveform in macOS #197

Closed ganjiakhil closed 1 year ago

ganjiakhil commented 1 year ago

I was able to successfully install libsamplerate and libsndfile following instrucitons in INSTALL file in libsamplerate source file. But I keep facing these errors when importing the samplerate.h and using it.

I have part of the waveform and I want to resample that from 16000 to 32000 and below is the code I am using (since unable to attach a cpp file)


but I keep facing the error as below -

Executing task: C/C++: g++ build active file

Starting build... /usr/bin/g++ -fdiagnostics-color=always -g /Users/aganji155/Documents/akhil/ResamplingAudio/APP.cpp -o /Users/aganji155/Documents/akhil/ResamplingAudio/APP Undefined symbols for architecture x86_64: "_src_simple", referenced from: _main in APP-811664.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Build finished with error(s).


Code -

include

include

include

include "libsamplerate-0.1.9/src/samplerate.h"

int main() { // Load audio waveform //const int inputSampleRate = 16000; //const int outputSampleRate = 16000; float waveform[100] = { -3.8146973e-03, -4.3029785e-03, -3.4179688e-03, -3.0517578e-03, -1.6174316e-03, -1.4038086e-03, -1.8310547e-04, 3.0517578e-04,1.4953613e-03, 1.2512207e-03, 2.8686523e-03, 2.8686523e-03,3.9367676e-03, 3.8146973e-03, 3.7231445e-03, 3.4484863e-03,2.8381348e-03, 2.1667480e-03, 1.7395020e-03, 3.3569336e-04,-1.2207031e-04, -1.1596680e-03, -1.1596680e-03, -2.5939941e-03,-2.4414062e-03, -3.3569336e-03, -3.3264160e-03, -4.0283203e-03,-3.2043457e-03, -2.4719238e-03, -2.1362305e-03, -1.5258789e-03,-3.6621094e-04, 4.5776367e-04, 1.2817383e-03, 1.5563965e-03,2.3498535e-03, 2.2277832e-03, 2.6245117e-03, 2.1972656e-03,2.2277832e-03, 8.5449219e-04, 9.7656250e-04, -1.5258789e-04,-9.1552734e-05, -1.2207031e-03, -9.7656250e-04, -8.5449219e-04,-1.1596680e-03, -6.4086914e-04, -4.2724609e-04, 0.0000000e+00, -3.9672852e-04, -5.7983398e-04, -5.7983398e-04, -4.2724609e-04,0.0000000e+00, 4.2724609e-04, 1.0070801e-03, 1.3732910e-03,1.6479492e-03, 2.1972656e-03, 2.4108887e-03, 2.6245117e-03,2.0446777e-03, 1.1901855e-03, 3.9672852e-04, -4.2724609e-04,-1.1291504e-03, -1.6174316e-03, -2.3803711e-03, -2.9602051e-03,-2.7465820e-03, -2.6855469e-03, -2.4414062e-03, -2.5939941e-03,-1.3427734e-03, -1.0986328e-03, 3.0517578e-05, 6.4086914e-04,1.6784668e-03, 1.4038086e-03, 1.5258789e-03, 1.4038086e-03,5.7983398e-04, 2.1362305e-04, 2.4414062e-04, 2.4414062e-04,4.8828125e-04, 1.1901855e-03, 8.8500977e-04, 1.1291504e-03,6.4086914e-04, 2.4414062e-04, -6.7138672e-04, -7.6293945e-04,-2.2277832e-03, -2.4414062e-03, -2.8381348e-03, -2.3498535e-03 }; // audio waveform data // SF_INFO inputSoundFileInfo; // SNDFILE* infile = nullptr; // infile = sf_open(filePath.c_str(), SFM_READ, &inputSoundFileInfo);

// float audioIn[inputSoundFileInfo.channels * inputSoundFileInfo.frames];
// sf_read_float(infile, audioIn, inputSoundFileInfo.channels * inputSoundFileInfo.frames);

float sampleRate = 16000.0f;
float outsamplerate = 32000.0f;
float srcRatio = sampleRate / outsamplerate;
int outputFrames = ceilf(100 * srcRatio);

// Convert to mono
std::vector<float> monoData(100);
for (int i = 0; i < 100; i++) // for (int i = 0; i < N; i++) -- N is replaced with 100 as it is waveform length I have
{
    for (int j = 0; j < 1; j++) // for (int j = 0; j < channels; j++)  -- channels is replaced with 1 since I already have monodata
        monoData[i] += waveform[i * 1 + j];
    monoData[i] /= 1;
}

// Resample
SRC_DATA srcData;
srcData.data_in = monoData.data();
srcData.input_frames = 100;

std::vector<float> dataOut(outputFrames);
srcData.data_out = dataOut.data();

srcData.output_frames = outputFrames;
srcData.src_ratio = srcRatio;

src_simple(&srcData, SRC_SINC_BEST_QUALITY, 1);

// sf_close(infile);

return 0;

}


Please help, i am stuck with this more than a week now.

erikd commented 1 year ago

This is not a libsamplerate problem. This is a problem due to your incorrect usage of the compiler and associated tools.

The reason you see this error us because you are not linking the libsamplerate library. You need to fix that,

I can see you are using the clang compiler which means you are probably on MacOS. You should ask this question in a Mac/Clang related forum.