---
title: Audio Time Stretching - Implementation in Pure Java Using WSOLA
canonical: https://0110.be/posts/Audio_Time_Stretching_-_Implementation_in_Pure_Java_Using_WSOLA
markdown_url: https://0110.be/posts/Audio_Time_Stretching_-_Implementation_in_Pure_Java_Using_WSOLA.md
id: 372
published_at: '2012-02-06T14:52:34Z'
updated_at: '2013-12-05T18:19:15Z'
author: Joren
tags:
- name: HoGent
  markdown_url: https://0110.be/tags/HoGent.md
- name: Java
  markdown_url: https://0110.be/tags/Java.md
- name: Tarsos
  markdown_url: https://0110.be/tags/Tarsos.md
- name: TarsosDSP
  markdown_url: https://0110.be/tags/TarsosDSP.md
- name: WSOLA
  markdown_url: https://0110.be/tags/WSOLA.md
---

# Audio Time Stretching - Implementation in Pure Java Using WSOLA

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](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.202.5460&rep=rep1&type=pdf).

<div align="center">
<a href="https://0110.be/files/attachments/372/TimeStretch.jar"><img src="https://0110.be/files/attachments/372/time_stretching_in_java.png" alt="Time Stretching (WSOLA) in Java"/></a>

</div>
To test the application, download and execute the "WSOLA jar":\[TimeStretch.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":\[08.\_Ladrang_Kandamanyura_10s-20s.wav\].

There is also a command line interface, the following command doubles the speed of `in.wav`:

<code>\
java -jar TimeStretch.jar in.wav out.wav 2.0\
</code>

     _______                       _____   _____ _____  
    |__   __|                     |  __ \ / ____|  __ \ 
       | | __ _ _ __ ___  ___  ___| |  | | (___ | |__) |
       | |/ _` | '__/ __|/ _ \/ __| |  | |\___ \|  ___/ 
       | | (_| | |  \__ \ (_) \__ \ |__| |____) | |     
       |_|\__,_|_|  |___/\___/|___/_____/|_____/|_|     

    ----------------------------------------------------
    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](https://github.com/JorenSix/TarsosDSP/blob/master/src/be/hogent/tarsos/dsp/filters/WaveformSimilarityBasedOverlapAdd.java).


- [time\_stretching\_in\_java.png](https://0110.be/files/attachments/372/time_stretching_in_java.png)

- [08.\_Ladrang\_Kandamanyura\_10s-20s.wav](https://0110.be/files/attachments/372/08._Ladrang_Kandamanyura_10s-20s.wav)

- [TimeStretch.jar](https://0110.be/files/attachments/372/TimeStretch.jar)
