PCMSampledSP is a free implementation of some javax.sound.sampled.spi interfaces. Its main purpose is to re-sample PCM audio to different sampling rates using polyphase decomposition and a multi-step approach. Additionally, it supports changing a signal's bit depth.
The easiest way to use PCMSampledSP (other than simply using the jar) is to start a Maven project and introduce a PCMSampledSP dependency.
To do so, add something like this to the dependencies section of your pom:
<dependency>
<groupId>com.tagtraum</groupId>
<artifactId>pcmsampledsp</artifactId>
<version>0.9.5</version>
</dependency>If Maven can't resolve this dependency, you might also want to add the following repository to the repositories section of your pom:
<repository>
<id>beatunes</id>
<name>beaTunes Repository</name>
<url>https://www.beatunes.com/repo/maven2</url>
</repository>To use the library, simply use the javax.sound.sampled classes like you normally would.
To re-sample a 44.1kHz wave file to 48kHz, you could write something like this:
final File file = new File("Some44100HzFile.wav");
final AudioInputStream sourceStream = AudioSystem.getAudioInputStream(file);
final AudioFormat sourceFormat = sourceStream.getFormat();
final AudioFormat targetFormat = new AudioFormat(
sourceFormat.getEncoding(),
48000f, // target sample rate
sourceFormat.getSampleSizeInBits(),
sourceFormat.getChannels(),
sourceFormat.getFrameSize(),
48000f, // target frame rate
sourceFormat.isBigEndian()
);
final AudioInputStream resampledStream = AudioSystem.getAudioInputStream(targetFormat, sourceStream);
// do something with the resampled audio data
AudioSystem.write(resampledStream, AudioFileFormat.Type.WAVE, new File("Resampled48000HzFile.wav"));