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"));