Articles Tagged 'PeachNote Piano'
The DSP library for Taros, aptly named TarsosDSP, now includes an implementation of a pitch shifting algorithm (as of version 1.4). The goal of pitch shifting is to change the pitch of a piece of audio without affecting the duration. The algorithm implemented is a combination of resampling and time stretching. Resampling changes the pitch of the audio, but affects the total duration. Consecutively, the duration of the audio is stretched to the original (without affecting pitch) with time stretching. The result is very similar to phase vocoding.
The example application below shows how to pitch shift input from the microphone in real-time, or pitch shift a recorded track with the TarsosDSP library.
There is also a command line interface, the following command lowers the pitch of
in.wav by two semitones.
java -jar in.wav out.wav -200 ---------------------------------------------------- _______ _____ _____ _____ |__ __| | __ \ / ____| __ \ | | __ _ _ __ ___ ___ ___| | | | (___ | |__) | | |/ _` | '__/ __|/ _ \/ __| | | |\___ \| ___/ | | (_| | | \__ \ (_) \__ \ |__| |____) | | |_|\__,_|_| |___/\___/|___/_____/|_____/|_| ---------------------------------------------------- Name: TarsosDSP Pitch shifting utility. ---------------------------------------------------- Synopsis: java -jar PitchShift.jar source.wav target.wav cents ---------------------------------------------------- Description: Change the play back speed of audio without changing the pitch. source.wav A readable, mono wav file. target.wav Target location for the pitch shifted file. cents Pitch shifting in cents: 100 means one semitone up, -100 one down, 0 is no change. 1200 is one octave up.
The resampling feature was implemented with libresample4j by Laszlo Systems. libresample4j is a Java port of Dominic Mazzoni’s libresample 0.1.3, which is in turn based on Julius Smith’s Resample 1.7 library.
After about a year of development and several revisions TarsosDSP has enough features and is stable enough to slap the 1.0 tag onto it. A ‘read me’, manual, API documentation, source and binaries can be found on the TarsosDSP release directory. The source is present in the
What follows below is the information that can be found in the read me file:
TarsosDSP is a collection of classes to do simple audio processing. It features an implementation of a percussion onset detector and two pitch detection algorithms: Yin and the Mcleod Pitch method. Also included is a Goertzel DTMF decoding algorithm and a time stretch algorithm (WSOLA).
Its aim is to provide a simple interface to some audio (signal) processing algorithms implemented in pure JAVA. Some TarsosDSP example applications are available.
The following example filters a band of frequencies of an input file
testFile. It keeps the frequencies form
AudioInputStream inputStream = AudioSystem.getAudioInputStream(testFile); AudioDispatcher dispatcher = new AudioDispatcher(inputStream,stepSize,overlap); dispatcher.addAudioProcessor(new HighPass(startFrequency, sampleRate, overlap)); dispatcher.addAudioProcessor(new LowPassFS(stopFrequency, sampleRate, overlap)); dispatcher.addAudioProcessor(new FloatConverter(format)); dispatcher.addAudioProcessor(new WaveformWriter(format,stepSize, overlap, "filtered.wav")); dispatcher.run();
Quickly Getting Started with TarsosDSP
Head over to the TarsosDSP release repository and download the latest TarsosDSP library. To get up to speed quickly, check the TarsosDSP Example applications for inspiration and consult the API documentation. If you, for some reason, want to build from source, you need Apache Ant and git installed on your system. The following commands fetch the source and build the library and example jars:
git clone https://JorenSix@github.com/JorenSix/TarsosDSP.git cd TarsosDSP/build ant tarsos_dsp_library #Builds the core TarsosDSP library ant build_examples #Builds all the TarsosDSP examples ant javadoc #Creates the documentation in TarsosDSP/doc
When everything runs correctly you should be able to run all example applications and have the latest version of the TarsosDSP library for inclusion in your projects. Also the Javadoc documentation for the API should be available in TarsosDSP/doc. Drop me a line if you use TarsosDSP in your project. Always nice to hear how this software is used.
Source Code Organization and Examples of TarsosDSP
The source tree is divided in three directories:
srccontains the source files of the core DSP libraries.
testcontains unit tests for some of the DSP functionality.
buildcontains ANT build files. Either to build Java documentation or runnable JAR-files for the example applications.
examplescontains a couple of example applications with a Java Swing user interface:
- SoundDetector show how you loudness calculations can be done. When input sound is over a defined limit an event is fired.
- PitchDetector this demo application shows real-time pitch detection. When pitch is detected the hertz value is printed together with a probability.
- PercussionDetector show the percussion (onset) dectection. Clapping your hands causes an event. This demo application also shows the influence of the two parameters on the algorithm.
- UtterAsterisk a game with the goal to sing as close to a melody a possible. Technically it shows real-time pitch detection with YIN or MPM.
- Spectrogram in Java shows a spectrogram and detected pitch, either live or from an audio file. It is interesting to see which frequencies are picked as fundamentals.
- Goertzel DTMF decoding an implementation of the Goertzel Algorithm. A fancy user interface shows what goes on under the hood.
- Audio Time Stretching – Implementation in Pure Java Using WSOLA an implementation of a time stretching algorithm. WSOLA makes it possible to change the play back speed of audio without changing the pitch. The play back speed can be changed at any moment, even when there is audio playing.
Tarsos contains a couple of useful command line applications. They can be used to execute common tasks on lots of files. Dowload Tarsos and call the applications using the following format:
java -jar tarsos.jar command [argument...] [--option [value]...]
The first part
java -jar tarsos.jar tells the Java Runtime to start the correct application. The first argument for Tarsos defines the command line application to execute. Depending on the command, required arguments and options can follow.
java -jar tarsos.jar detect_pitch in.wav --detector TARSOS_YIN
To get a list of available commands, type
java -jar tarsos.jar -h. If you want more information about a command type
java -jar tarsos.jar command -h
Detects pitch for one or more input audio files using a pitch detector. If a directory is given it traverses the directory recursively. It writes CSV data to standard out with five columns. The first is the start of the analyzed window (seconds), the second the estimated pitch, the third the saillence of the pitch. The name of the algorithm follows and the last column shows the original filename.
Synopsis -------- java -jar tarsos.jar detect_pitch [option] input_file... Option Description ------ ----------- -?, -h, --help Show help --detector <PitchDetectionMode> The detector to use [VAMP_YIN | VAMP_YIN_FFT | VAMP_FAST_HARMONIC_COMB | VAMP_MAZURKA_PITCH | VAMP_SCHMITT | VAMP_SPECTRAL_COMB | VAMP_CONSTANT_Q_200 | VAMP_CONSTANT_Q_400 | IPEM_SIX | IPEM_ONE | TARSOS_YIN | TARSOS_FAST_YIN | TARSOS_MPM | TARSOS_FAST_MPM | ] (default: TARSOS_YIN)
The output of the command looks like this:
Start(s),Frequency(Hz),Probability,Source,file 0.52245,366.77039,0.92974,TARSOS_YIN,in.wav 0.54567,372.13873,0.93553,TARSOS_YIN,in.wav 0.55728,375.10638,0.95261,TARSOS_YIN,in.wav 0.56889,380.24854,0.94275,TARSOS_YIN,in.wav