# Resampling Audio using Lagrange Interpolator

**URL:** https://forum.juce.com/t/resampling-audio-using-lagrange-interpolator/26209
**Category:** General JUCE discussion
**Created:** [January 31, 2018, 9:27pm UTC](https://forum.juce.com/t/resampling-audio-using-lagrange-interpolator/26209 "2018-01-31T21:27:32Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![godwincharan](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/godwincharan/32/213_2.png) [@godwincharan](https://forum.juce.com/u/godwincharan)
#### Post date: [February 2, 2018, 5:33am UTC](https://forum.juce.com/t/resampling-audio-using-lagrange-interpolator/26209/2 "2018-02-02T05:33:41Z")

</div>

```
void fileConvert(const File& file, const double& dOutSampleRate) {
	AudioFormatManager formatManager;
	formatManager.registerBasicFormats();
	AudioFormatReader* reader = formatManager.createReaderFor(file);
	if (reader) {
		if (reader->lengthInSamples > 0) {
			if (reader->sampleRate != dOutSampleRate) {
				//find the out file number of samples
				juce::int64 iSamples = ceil(dOutSampleRate * reader->lengthInSamples / reader->sampleRate);

			AudioSampleBuffer tempBuffer(reader->numChannels, iSamples);
			AudioSampleBuffer readBuffer(reader->numChannels, reader->lengthInSamples);

			//read the samples from file
			reader->read(&readBuffer, 0, readBuffer.getNumSamples(), 0, true, true);

			LagrangeInterpolator interpolator;
			int iResult = 0;
			for (int i = 0; i < reader->numChannels; i++) {
				iResult = interpolator.process(reader->sampleRate / dOutSampleRate,
					readBuffer.getReadPointer(i),
					tempBuffer.getWritePointer(i),
					tempBuffer.getNumSamples());
			}

			File sTempFile = File::createTempFile(String("temp_") + file.getFileNameWithoutExtension() + String(".wav"));
			AudioFormat* audioFormat = formatManager.findFormatForFileExtension(sTempFile.getFileExtension());
			juce::AudioFormatWriter* pTempWriter = audioFormat->createWriterFor(sTempFile.createOutputStream(),
				dOutSampleRate,
				reader->numChannels,
				reader->bitsPerSample ? reader->bitsPerSample : 24,
				reader->metadataValues,
				audioFormat->getQualityOptions().size() - 1);
			auto res = pTempWriter->writeFromAudioSampleBuffer(tempBuffer, 0, tempBuffer.getNumSamples());
			pTempWriter->flush();
			delete pTempWriter;

			jassert(res);
			delete reader;
		}
	}
	else {
		delete reader;
		AlertWindow::showMessageBox(AlertWindow::WarningIcon, "No Audio", "There is no enough audio for playing.");
	}
}
else {
	AlertWindow::showMessageBox(AlertWindow::WarningIcon, "Corrupt file Audio", "The audio file loaded is corrupted.");
}

```

}

---

_[View the full topic](https://forum.juce.com/t/resampling-audio-using-lagrange-interpolator/26209)._
