» By Joren on Thursday 23 February 2012
The DSP library for Taros, aptly named TarsosDSP, now includes an implementation of an audio echo effect. An echo effect is very simple to implement digitally and can serve as a good example of a DSP operation.
The implementation of the effect can be seen below. As can be seen, to achieve an echo one simply needs to mix the current sample i
with a delayed sample present in echoBuffer
with a certain decay factor. The length of the buffer and the decay are the defining parameters for the sound of the echo. To fill the echo buffer the current sample is stored (line 4). Looping through the echo buffer is done by incrementing the position pointer and resetting it at the correct time (lines 6-9).
1
2
3
4
5
6
7
8
9
|
audioFloatBuffer[i] = audioFloatBuffer[i] + echoBuffer[position] * decay;
echoBuffer[position] = audioFloatBuffer[i];
position++;
if(position == echoBuffer.length)
position = 0; |
To test the application, download and execute the Delay.jar file and start singing in a microphone.
The source code of the Java implementation can be found on the TarsosDSP github page.
TarsosDSP, HoGent, Java, and Code
echo_or_delay_effect.png and Delay.jar
» By Joren on Tuesday 14 February 2012
This is post presents a better version of the spectrogram implementation. Now it is included as an example in TarsosDSP, a small java audio processing library. The application show a live spectrogram, calculated using an FFT and the detected fundamental frequency (in red).
To test the application, download and execute the Spectrogram.jar file and start singing in a microphone.
There is also a command line interface, the following command shows the spectrum for in.wav
:
java -jar Spectrogram.jar in.wav
The source code of the Java implementation can be found on the TarsosDSP github page.
TarsosDSP, Code, Java, Computational musicology, and HoGent
Spectrogram.jar and spectrogram.png
» By Joren on Monday 06 February 2012
The DSP library for Taros, aptly named TarsosDSP, now includes an implementation of a time stretching algorithm. The goal of time stretching is to change the duration of a piece of audio without affecting the pitch. The algorithm implemented is described in An Overlap-add Technique Based On Waveform Similarity (WSOLA) for High Quality Time-Scale Modification of Speech.
To test the application, download and execute the WSOLA jar file and load an audio file. For the moment only 44.1kHz mono wav is allowed. To get started you can try this piece of audio.
There is also a command line interface, the following command doubles the speed of in.wav
:
java -jar TimeStretch.jar in.wav out.wav 2.0
_______ _____ _____ _____
|__ __| | __ \ / ____| __ \
| | __ _ _ __ ___ ___ ___| | | | (___ | |__) |
| |/ _` | '__/ __|/ _ \/ __| | | |\___ \| ___/
| | (_| | | \__ \ (_) \__ \ |__| |____) | |
|_|\__,_|_| |___/\___/|___/_____/|_____/|_|
----------------------------------------------------
Name:
TarsosDSP Time stretch utility.
----------------------------------------------------
Synopsis:
java -jar TimeStretch.jar source.wav target.wav factor
----------------------------------------------------
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 time stretched file.
factor Time stretching factor: 2.0 means double the length, 0.5 half. 1.0 is no change.
The source code of the Java implementation of WSOLA can be found on the TarsosDSP github page.
Tarsos, TarsosDSP, Java, WSOLA, and HoGent
TimeStretch.jar, time_stretching_in_java.png, and 08._Ladrang_Kandamanyura_10s-20s.wav
» By Joren on Friday 03 February 2012
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
Detect Pitch
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
Tarsos, Command Line Application, Music Information Retrieval, Code, Java, and HoGent