forked from JorenSix/TarsosDSP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
64 lines (64 loc) · 10.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<h1>TarsosDSP</h1>
<p>TarsosDSP is a collection of classes to do simple audio processing. It features an implementation of a percussion onset detector and three pitch detection algorithms: <span class="caps">YIN</span>, the Mcleod Pitch method and a “Dynamic Wavelet Algorithm Pitch Tracking” algorithm. Also included is a Goertzel <acronym title="Dual tone multi frequency"><span class="caps">DTMF</span></acronym> decoding algorithm and a time stretch algorithm (<span class="caps">WSOLA</span>).</p>
<p>Its aim is to provide a simple interface to some audio (signal) processing algorithms implemented in pure <span class="caps">JAVA</span>, without any external dependencies. Some <a href="http://tarsos.0110.be/tag/TarsosDSP">TarsosDSP example applications</a> are available. Head over to the <a href="http://tarsos.0110.be/releases/TarsosDSP/">TarosDSP release directory</a> for freshly baked binaries.</p>
<p>The following example filters a band of frequencies of an input file <code>testFile</code>. It keeps the frequencies form <code>startFrequency</code> to <code>stopFrequency</code>.</p>
<pre><code>AudioInputStream inputStream = AudioSystem.getAudioInputStream(testFile);
AudioDispatcher dispatcher = new AudioDispatcher(inputStream,stepSize,overlap);
dispatcher.addAudioProcessor(new LowPassFS(stopFrequency, 44100));
dispatcher.addAudioProcessor(new HighPass(startFrequency, 44100));
dispatcher.addAudioProcessor(new WaveformWriter(format, "filtered.wav"));
dispatcher.run();
</code></pre>
<h2>Quickly Getting Started with TarsosDSP</h2>
<p>Head over to the <a href="http://tarsos.0110.be/releases/TarsosDSP/">TarsosDSP release repository</a> and download the latest <a href="http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-latest/TarsosDSP-latest.jar">TarsosDSP library</a>. To get up to speed quickly, check the <a href="http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-latest/TarsosDSP-latest-Examples/">TarsosDSP Example applications</a> for inspiration and consult the <a href="http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-latest/TarsosDSP-latest-Documentation/"><span class="caps">API</span> documentation</a>. If you, for some reason, want to build from source, you need <a href="http://ant.apache.org/">Apache Ant</a> and <a href="http://git-scm.com/">git</a> installed on your system. The following commands fetch the source and build the library and example jars: <br />
<pre><code>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
</code></pre><br />
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 <span class="caps">API</span> 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.</p>
<h2>Source Code Organization</h2>
<p>The source tree is divided in three directories:</p>
<ul>
<li><code>src</code> contains the source files of the core <span class="caps">DSP</span> libraries.</li>
<li><code>test</code> contains unit tests for some of the <span class="caps">DSP</span> functionality.</li>
<li><code>build</code> contains <span class="caps">ANT</span> build files. Either to build Java documentation or runnable <span class="caps">JAR</span>-files for the example applications.</li>
<li><code>examples</code> contains a couple of example applications with a Java Swing user interface.</li>
</ul>
<h3>TarsosDSP Example Applications</h3>
<p>TarsosDSP contains some ready made example applications. Most have a Java Swing user interface. They show which functionality is present in the library and how to use it.</p>
<ul>
<li><a href="http://tarsos.0110.be/artikels/lees/TarsosDSP%253A_a_small_JAVA_audio_processing_library">SoundDetector</a> show how you loudness calculations can be done. When input sound is over a defined limit an event is fired.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/TarsosDSP%253A_a_small_JAVA_audio_processing_library">PitchDetector</a> this demo application shows real-time pitch detection. When pitch is detected the hertz value is printed together with a probability.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/TarsosDSP%253A_a_small_JAVA_audio_processing_library">PercussionDetector</a> 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.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/TarsosDSP_sample_application%253A_Utter_Asterisk">UtterAsterisk</a> a game with the goal to sing as close to a melody a possible. Technically it shows real-time pitch detection with <span class="caps">YIN</span> or <span class="caps">MPM</span>.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/Spectrogram_in_Java_with_TarsosDSP">Spectrogram in Java</a> shows a spectrogram and detected pitch, either live or from an audio file. It is interesting to see which frequencies are picked as fundamentals.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/Dual-Tone_Multi-Frequency_%2528DTMF%2529_Decoding_with_the_Goertzel_Algorithm_in_Java">Goertzel <acronym title="Dual tone multi frequency"><span class="caps">DTMF</span></acronym> decoding</a> an implementation of the Goertzel Algorithm. A fancy user interface shows what goes on under the hood.</li>
<li><a href="http://tarsos.0110.be/artikels/lees/Audio_Time_Stretching_-_Implementation_in_Pure_Java_Using_WSOLA">Audio Time Stretching – Implementation in Pure Java Using <span class="caps">WSOLA</span></a> an implementation of a time stretching algorithm. <acronym title="Waveform Similarity Overlap Add"><span class="caps">WSOLA</span></acronym> 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.</li>
<li><a href="http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-1.3/TarsosDSP-1.3-Examples/FeatureExtractor-1.3.jar">Audio Feature Extraction</a> a command line application to do simple feature extraction.</li>
<li><a href="http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-1.3/TarsosDSP-1.3-Examples/Synthesis-1.3.jar">Audio Synthesis</a> a command line application to do simple audio synthesis.</li>
</ul>
<h2>Credits</h2>
<p><a href="http://tarsos.0110.be">Tarsos</a> and <a href="http://tarsos.0110.be/tag/TarsosDSP">TarsosDSP</a> are developed at University College Ghent, Faculty of Music<br />
<a href="http://cons.hogent.be">http://cons.hogent.be</a></p>
<p>The onset detector implementation is based on a <a href="http://vamp-plugins.org/code-doc/PercussionOnsetDetector_8cpp-source.html"><span class="caps">VAMP</span> plugin example</a> by <i>Chris Cannam</i> at Queen Mary University, London. The method is described in <a href="http://eprints.nuim.ie/699/1/ELE-Bob9.pdf">Drum Source Separation using Percussive Feature Detection and Spectral Modulation</a> by Dan Barry, Derry Fitzgerald, Eugene Coyle and Bob Lawlor, <span class="caps">ISSC</span> 2005.</p>
<p>For the implementation of the <span class="caps">YIN</span> pitch tracking algorithm. Both the <a href="http://recherche.ircam.fr/equipes/pcm/cheveign/ps/2002_JASA_YIN_proof.pdf">the <span class="caps">YIN</span> paper</a> and the <a href="http://aubio.org">aubio implementation</a> were used as a reference. <i>Matthias Mauch</i> (of Queen Mary University, London) kindly provided the FastYin implementation which uses an <span class="caps">FFT</span> to calculate the difference function, it makes the algorithm up to 3 times faster.</p>
<p>The Average Magnitude Difference (<span class="caps">AMDF</span>) pitch estimation algorithm is implemented by <i>Eder Souza</i> and adapted for TarsosDSP by myself.</p>
<p>For the <span class="caps">MPM</span> pitch tracking algorithm, the paper titled <a href="http://miracle.otago.ac.nz/tartini/papers/A_Smarter_Way_to_Find_Pitch.pdf">A Smarter Way To Find Pitch</a> by <i>Philip McLeod</i> and <i>Geoff Wyvill</i> was used.</p>
<p>The Dynamic Wavlet pitch estimation algorithm is described in <a href="http://online.physics.uiuc.edu/courses/phys193/NSF_REU_Reports/2005_reu/Real-Time_Time-Domain_Pitch_Tracking_Using_Wavelets.pdf">Real-Time Time-Domain Pitch Tracking Using Wavelets</a> by Eric Larson and Ross Maddox. The implementation within TarsosDSP is based on the implementation in the <a href="http://www.schmittmachine.com/dywapitchtrack.html">Dynamic Wavelet Algorithm Pitch Tracking library</a> by <i>Antoine Schmitt</i>, which is released under the <span class="caps">MIT</span> open source licence.</p>
<p>The audio time stretching algorithm is described in <a href="http://mir.cs.nthu.edu.tw/users/litbee/RelatedPaper/[WSOLA]An%20overlap-add%20technique%20based%20on%20waveform%20similarity%20(WSOLA)%20for%20high-quality%20time-scale%20modifications%20of%20speech.pdf">An Overlap-Add Technique Based on Waveform Similarity (<span class="caps">WSOLA</span>) For Hight Quality Time-Scale Modifications of speech</a> by Werner Verhelst and Marc Roelands. As a reference implementation the <span class="caps">WSOLA</span> implementation by <i>Olli Parviainen</i> in the <a href="http://www.surina.net/soundtouch/">SoundTouch – an open-source audio processing library</a> was used.</p>
<p>The <span class="caps">FFT</span> implementation used within TarsosDSP is by <i>Piotr Wendykier</i> and is included in his <a href="https://sites.google.com/site/piotrwendykier/software/jtransforms">JTransforms library</a>. JTransforms is the first, open source, multithreaded <span class="caps">FFT</span> library written in pure Java.</p>
<h2>Changelog</h2>
<dt>Version 1.0</dt><dd>2012-04-24</dd> <p>First release which includes several pitch trackers and a time stretching algorithm, amongst other things. Downloads and javadoc <span class="caps">API</span> can be found at the <a href="http://tarsos.0110.be/releases/TarsosDSP/">TarsosDSP release directory</a></p>
<dt>Version 1.1</dt><dd>2012-06-4</dd>
<p>Changed how the audio dispatcher stops. Added StopAudioProcessor.<br />
Added FastYin implementation by Matthias Mauch<br />
Added <span class="caps">AMDF</span> pitch estimator by Eder Souza</p>
<dt>Version 1.2</dt><dd>2012-08-21</dd>
<p>Modified the interface of PitchDetector to return a more elaborate result structure with pitch, probability and a boolean “is pitched”.<br />
Added an implementation of an envelope follower or envelope detector.</p>
<dt>Version 1.3</dt><dd>2012-09-19</dd>
<p>TarsosDSP can do audio synthesis now. The first simple unit generators are included in the library.<br />
It has a new audio feature extraction feature, implemented in the FeatureExtractor example. <br />
Added <span class="caps">ASCII</span>-art to the source code (this is the main TarsosDSP 1.3 feature).</p>