• Stars
    star
    1,953
  • Rank 23,737 (Top 0.5 %)
  • Language
    Java
  • License
    GNU General Publi...
  • Created over 13 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Real-Time Audio Processing Framework in Java

TarsosDSP build status

TarsosDSP

TarsosDSP is a Java library for audio processing. Its aim is to provide an easy-to-use interface to practical music processing algorithms implemented, as simply as possible, in pure Java and without any other external dependencies. The library tries to hit the sweet spot between being capable enough to get real tasks done but compact and simple enough to serve as a demonstration on how DSP algorithms works.

TarsosDSP features an implementation of a percussion onset detector and a number of pitch detection algorithms: YIN, the Mcleod Pitch method and a “Dynamic Wavelet Algorithm Pitch Tracking” algorithm. Also included is a Goertzel DTMF(Dual tone multi frequency) decoding algorithm, a time stretch algorithm (WSOLA), resampling, filters, simple synthesis, some audio effects, and a pitch shifting algorithm.

To show the capabilities of the library, TarsosDSP example applications are available. Head over to the TarsosDSP release directory for freshly baked binaries and code smell free (that is the goal anyway), oven-fresh sources.

Quickly Getting Started with TarsosDSP

The source code of TarsosDSP is compatible with Java 11.

Add this to your build.gradle file:

repositories {
    maven {
        name = "TarsosDSP repository"
        url = "https://mvn.0110.be/releases"
    }
}
dependencies {
    implementation 'be.tarsos.dsp:core:2.5'
    implementation 'be.tarsos.dsp:jvm:2.5'
}

Add this to your pom.xml file:

<repository>
  <id>be.0110.repo-releases</id>
  <name>0110.be repository</name>
  <url>https://mvn.0110.be/releases</url>
</repository>
<dependency>
  <groupId>be.tarsos.dsp</groupId>
  <artifactId>core</artifactId>
  <version>2.5</version>
</dependency>
<dependency>
  <groupId>be.tarsos.dsp</groupId>
  <artifactId>jvm</artifactId>
  <version>2.5</version>
</dependency>

Citing TarsosDSP

Some information about TarsosDSP can be found in the paper TarsosDSP, a Real-Time Audio Processing Framework in Java, by Joren Six, Olmo Cornelis, and Marc Leman, in Proceedings of the 53rd AES Conference (AES 53rd), 2014. If you use TarsosDSP in academic research, please cite this paper.

@inproceedings{six2014tarsosdsp,
  author      = {Joren Six and Olmo Cornelis and Marc Leman},
  title       = {{TarsosDSP, a Real-Time Audio Processing Framework in Java}},
  booktitle   = {{Proceedings of the 53rd AES Conference (AES 53rd)}}, 
  year        =  2014
}

Building TarsosDSP with Gradle

To build TarsosDSP from source the gradlew script should get you started. The following commands fetch the source and builds the library:

git clone --depth 1 https://[email protected]/JorenSix/TarsosDSP.git
cd TarsosDSP
./gradlew build

Source Code Organization & Developing

The library is separated into three module folders: 1) the main core functionality is found in core/src/main/java, TarsosDSP example applications are found in examples/src/main/java, JVM audio I/O in jvm/examples/src/main.

TarsosDSP Examples

To see TarsosDSP in action thre are a number of examples. These examples have either a graphical user interface or a command line interface. To see a window in which you can start all GUI examples the jar file needs to be started without arguments:

gradle shadowJar
java -jar examples/build/libs/examples-all.jar

To use the command line examples, execute the jar with the example name as first argument. For example java -jar examples/build/libs/examples-all.jar feature_extractor pitch audio.mp3 starts the feature_extractor application to extract pitch from an audio file.

To get a list of all command line examples: java -jar examples/build/libs/examples-all.jar list

Credits

TarsosDSP was developed at University College Ghent, School of Arts between 2009 and 2013, from late 2013 the project is supported by University Ghent, IPEM.

The TarsosDSP borrows algorithms from various other libraries or research paper. Below a complete list of credits can be found.

Changelog

Version 1.0
2012-04-24

First release which includes several pitch trackers and a time stretching algorithm, amongst other things. Downloads and javadoc API can be found at the TarsosDSP release directory

Version 1.1
2012-06-4

Changed how the audio dispatcher stops. Added StopAudioProcessor.
Added FastYin implementation by Matthias Mauch
Added AMDF pitch estimator by Eder Souza

Version 1.2
2012-08-21

Modified the interface of PitchDetector to return a more elaborate result structure with pitch, probability and a boolean “is pitched”.
Added an implementation of an envelope follower or envelope detector.

Version 1.3
2012-09-19

TarsosDSP can do audio synthesis now. The first simple unit generators are included in the library.
It has a new audio feature extraction feature, implemented in the FeatureExtractor example.
Added ASCII-art to the source code (this is the main TarsosDSP 1.3 feature).

Version 1.4
2012-10-31

Included a resample feature, implemented by libresample4j. Together with the WSOLA implementation, it can be used for pitch shifting (similar to Phase Vocoding). A pitch shifting example (both with a CLI and a UI) is added in the 1.4 version of the TarsosDSP library as well.

Version 1.5
2013-04-30

Converted TarsosDSP to maven. This is known as the Malaryta-release. The “Malaryta” release is provided to you by RikkiMongoose (idea, documents, git things) and Ultar (converting to maven, refactoring). Malaryta is the capital of Malaryta Raion, Brest Region in the Republic of Belarus. Both of developers spent their childhood in Brest, and think that title Malaryta is as strange as Ubuntu or Whistler. The 1.5 release also includes various FFT window functions from the cool Minim project by Damien Di Fede.

Version 1.6
2013-06-12

This release features practical onset and beat detection algorithms. A complex domain onset detection and a spectral flux onset detection algorithm are added. This release also includes a way to guess a beat from onsets. Parts of the BeatRoot system, by Simon Dixon, are included to this end. Also included in this release is an implementation of the Constant-Q transform.

Version 1.7
2013-10-08

This release adds the ability to extract the MFCC from an audio signal. Also an example of the Constant-Q transform is added, together with a reusable visualization class library. The build system is reverted back to pure ANT

Version 1.8
2014-04-10

With this release it is possible to extract spectral peaks from an FFT and get precise frequency estimates using phase info. An example application called SpectralPeaks is added as well.

Version 1.9
2014-08-10

This release includes a Haar Wavelet Transform and an example of an audio compression algorithm based on Haar Wavelets. It also includes a significant change in package naming.

Version 2.0
2014-08-13

The 2.0 version is worth the major version update since it offers out-of-the-box support for Android. The release has no more dependencies on the parts of the java runtime that are not included in Android. To offer this support some packages have been shifted around. The code that does I/O is dependent on the runtime (JVM or Dalvik) and is abstracted using the be.tarsos.dsp.io package.

Version 2.1
2015-03-03

The 2.1 version restructures some of the source files. All source can now be found in src. The ant build file is adapted to reflect this change. This version also includes an STFT pitch shifter. There was already a time domain pitch shifter included and now a frequency domain implementation is present as well.

Version 2.2
2015-03-03

The 2.2 version includes a new AudioDispatcher. It has been reviewed toroughly and now behaves predictably for the first and last buffers as well. To prevent compatibility issues the version has been changed.

Version 2.3
2015-09-01

The 2.3 version includes improved Android support: audio decoding on Android can be done using a provided, statically compiled ffmpeg binary. The ffmpeg decoding functionality for JVM has been improved as well. If no ffmpeg executable is found it is downloaded automatically from here.

Version 2.4
2016-12-01

Some small changes to the pipe decoder. Now it is possible to set a start and duration for the incoming decoded audio from ffmpeg.

Version 2.5
2023-01-09

Changes to the build system: moved from ant to gradle. Better documentation, testing and CI with github actions. Release of maven packages.

More Repositories

1

Olaf

Olaf: Overly Lightweight Acoustic Fingerprinting is a portable acoustic fingerprinting system.
C
323
star
2

TarsosLSH

A Java library implementing practical nearest neighbour search algorithm for multidimensional vectors that operates in sublinear time. It implements Locality-sensitive Hashing (LSH) and multi index hashing for hamming space.
Java
201
star
3

Panako

The Panako acoustic fingerprinting system.
Java
180
star
4

TarsosTranscoder

A java wrapper for ffmpeg to transcode audio.
Java
48
star
5

ffmpeg.audio.wasm

An audio focused ffmpeg build for the web.
Shell
38
star
6

pffft.wasm

WebAssembly build of a small, pretty fast FFT library (PFFFT).
C
36
star
7

trix

Low latency audio transmitter/recieiver over IP
C++
32
star
8

Tarsos

Culture independent processing of MIR data
Java
24
star
9

RubberBandJNI

Example application that shows how to control the real-time audio time-stretching library Rubber Band from Java
Java
23
star
10

SyncSink

Synchronization tool to sync different audio captures of the same event
Java
19
star
11

Pidato

The Pidato Experiment: Vibrato on a Digital Piano Using an Arduino
Processing
15
star
12

JGaborator

Fast Gabor spectral transforms in Java. Using a JNI bridge with the gaborator C++ library.
C
10
star
13

PiPePoPo

Pitch perfect pointer positioning - a flute based mouse cursor controller
C
8
star
14

SyncSink.wasm

A browser based media sync tool via audio-to-audio alignment
JavaScript
6
star
15

stft_freq

Frequency estimation in audio files using STFT and parabolic interpolation.
5
star
16

TeensyDAQ

A Java application to visualize and process analog input signals from a Teensy microcontroller
Java
5
star
17

Gabber

Visualizing a Constant-Q transform in the browser
C++
4
star
18

pector

Trigger events by clapping - A percussive onset detector in C for the web, embedded and traditional computers
C
4
star
19

mot

mot - MIDI and OSC Tools
Rust
4
star
20

LTC.wasm

Browser based SMTE timecode decoder for LTC encoded audio
JavaScript
3
star
21

DiscStitch

A system for audio-to-audio alignment
2
star
22

Emotopa

Emotopa - Patterns in Pitch Organization
JavaScript
2
star
23

TgForceSensor

Android code to interface with TgForce running impact sensor.
Java
1
star