Skip to content

Commit

Permalink
Moved AudioPlayer to be.tarsos.dsp.io.jvm. Some refactoring. Also imp…
Browse files Browse the repository at this point in the history
…roved comments.
  • Loading branch information
JorenSix committed Aug 14, 2014
1 parent 4a1bc38 commit a58d401
Show file tree
Hide file tree
Showing 40 changed files with 480 additions and 28 deletions.
20 changes: 20 additions & 0 deletions android/be/tarsos/dsp/io/android/AudioDispatcherFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,28 @@
import be.tarsos.dsp.io.TarsosDSPAudioFormat;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;

/**
* The Factory creates {@link AudioDispatcher} objects from the
* configured default microphone of an Android device.
* It depends on the android runtime and does not work on the standard Java runtime.
*
* @author Joren Six
* @see AudioDispatcher
*/
public class AudioDispatcherFactory {

/**
* Create a new AudioDispatcher connected to the default microphone.
*
* @param sampleRate
* The requested sample rate.
* @param audioBufferSize
* The size of the audio buffer (in samples).
*
* @param bufferOverlap
* The size of the overlap (in samples).
* @return A new AudioDispatcher
*/
public static AudioDispatcher fromDefaultMicrophone(final int sampleRate,
final int audioBufferSize, final int bufferOverlap) {
int minAudioBufferSize = AudioRecord.getMinBufferSize(sampleRate,
Expand Down
28 changes: 28 additions & 0 deletions android/be/tarsos/dsp/io/android/package-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* _______ _____ _____ _____
* |__ __| | __ \ / ____| __ \
* | | __ _ _ __ ___ ___ ___| | | | (___ | |__) |
* | |/ _` | '__/ __|/ _ \/ __| | | |\___ \| ___/
* | | (_| | | \__ \ (_) \__ \ |__| |____) | |
* |_|\__,_|_| |___/\___/|___/_____/|_____/|_|
*
* -------------------------------------------------------------
*
* TarsosDSP is developed by Joren Six at IPEM, University Ghent
*
* -------------------------------------------------------------
*
* Info: http://0110.be/tag/TarsosDSP
* Github: https://github.com/JorenSix/TarsosDSP
* Releases: http://0110.be/releases/TarsosDSP/
*
* TarsosDSP includes modified source code by various authors,
* for credits and info, see README.
*
*/


/**
* Concrete implementations of the abstract audio IO for Dalvik/Android.
*/
package be.tarsos.dsp.io.jvm;
4 changes: 2 additions & 2 deletions build/deploy.bash
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ ssh [email protected] rm -R $deploy_dir/TarsosDSP-latest
ssh [email protected] mkdir $deploy_dir/TarsosDSP-latest
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-$version.jar $deploy_dir/TarsosDSP-latest/TarsosDSP-latest.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-$version-bin.jar $deploy_dir/TarsosDSP-latest/TarsosDSP-latest-bin.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-Android-$version.jar $deploy_location/TarsosDSP-Android-latest.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-Android-$version-bin.jar $deploy_location/TarsosDSP-Android-latest-bin.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-Android-$version.jar $deploy_dir/TarsosDSP-latest/TarsosDSP-Android-latest.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-Android-$version-bin.jar $deploy_dir/TarsosDSP-latest/TarsosDSP-Android-latest-bin.jar
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-$version-Manual.pdf $deploy_dir/TarsosDSP-latest/TarsosDSP-latest-Manual.pdf
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-$version-Documentation $deploy_dir/TarsosDSP-latest/TarsosDSP-latest-Documentation
ssh [email protected] ln -s -f $deploy_location/TarsosDSP-$version-Readme.html $deploy_dir/TarsosDSP-latest/TarsosDSP-latest-Readme.html
Expand Down
2 changes: 1 addition & 1 deletion build/deploy_nightly.bash
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ deploy_location=$deploy_dir"TarsosDSP-nightly/"
textile2html ../README.textile TarsosDSP-$version-Readme.html

#Copy the manual
wget "http://tarsos.0110.be/releases/TarsosDSP/TarsosDSP-latest/TarsosDSP-latest-Manual.pdf"
wget "http://0110.be/releases/TarsosDSP/TarsosDSP-latest/TarsosDSP-latest-Manual.pdf"
mv $manual_location TarsosDSP-$version-Manual.pdf


Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/Delay.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.effects.DelayEffect;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;

public class Delay extends JFrame {
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/Flanger.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,12 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.MultichannelToMono;
import be.tarsos.dsp.effects.FlangerEffect;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.io.jvm.WaveformWriter;

Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/GoertzelDTMF.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@
import javax.swing.border.TitledBorder;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.pitch.DTMF;
import be.tarsos.dsp.pitch.Goertzel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.BitDepthProcessor;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.wavelet.HaarWaveletCoder;
import be.tarsos.dsp.wavelet.HaarWaveletDecoder;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/PitchShiftingExample.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.MultichannelToMono;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd.Parameters;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.io.jvm.WaveformWriter;
import be.tarsos.dsp.resample.RateTransposer;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd.Parameters;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;

public class Player implements AudioProcessor {

Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/Resynthesizer.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.WaveformWriter;
import be.tarsos.dsp.pitch.PitchProcessor;
import be.tarsos.dsp.pitch.PitchProcessor.PitchEstimationAlgorithm;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/SampleExtractor.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.StopAudioProcessor;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd.Parameters;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.io.jvm.WaveformWriter;
import be.tarsos.dsp.resample.RateTransposer;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/Spectrogram.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.pitch.PitchDetectionHandler;
import be.tarsos.dsp.pitch.PitchDetectionResult;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/SynthesisExample.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@
import javax.sound.sampled.LineUnavailableException;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.effects.DelayEffect;
import be.tarsos.dsp.filters.LowPassFS;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.synthesis.AmplitudeLFO;
import be.tarsos.dsp.synthesis.NoiseGenerator;
import be.tarsos.dsp.synthesis.SineGenerator;
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/TimeStretch.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@
import javax.swing.event.ChangeListener;

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd;
import be.tarsos.dsp.WaveformSimilarityBasedOverlapAdd.Parameters;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.WaveformWriter;

public class TimeStretch extends JFrame{
Expand Down
2 changes: 1 addition & 1 deletion examples/be/tarsos/dsp/example/constantq/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.GainProcessor;
import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
import be.tarsos.dsp.io.jvm.AudioPlayer;

public class Player implements AudioProcessor {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,14 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.SpectralPeakProcessor;
import be.tarsos.dsp.SpectralPeakProcessor.SpectralPeak;
import be.tarsos.dsp.example.spectrum.SpectralInfo;
import be.tarsos.dsp.io.PipeDecoder;
import be.tarsos.dsp.io.PipedAudioStream;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.ui.Axis;
import be.tarsos.dsp.ui.AxisUnit;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@

import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioPlayer;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.SpectralPeakProcessor;
import be.tarsos.dsp.SpectralPeakProcessor.SpectralPeak;
import be.tarsos.dsp.io.PipeDecoder;
import be.tarsos.dsp.io.PipedAudioStream;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.AudioPlayer;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.ui.Axis;
import be.tarsos.dsp.ui.AxisUnit;
Expand Down
21 changes: 17 additions & 4 deletions jvm/be/tarsos/dsp/io/jvm/AudioDispatcherFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@
import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;

/**
* The Factory creates {@link AudioDispatcher} objects from various sources: the
* configured default microphone, PCM wav files or PCM samples piped from a
* sub-process. It depends on the javax.sound.* packages and does not work on Android.
*
* @author Joren Six
* @see AudioDispatcher
*/
public class AudioDispatcherFactory {

/**
Expand Down Expand Up @@ -115,14 +123,19 @@ public static AudioDispatcher fromURL(final URL audioURL, final int audioBufferS
}

/**
* Create a stream from a piped sub process and use that to create a new AudioDispatcher
* Create a stream from a piped sub process and use that to create a new
* {@link AudioDispatcher} The sub-process writes a WAV-header and
* PCM-samples to standard out. The header is ignored and the PCM samples
* are are captured and interpreted. Examples of executables that can
* convert audio in any format and write to stdout are ffmpeg and avconv.
*
* @param source
* The file.
* @param targetSampleRate The target sample rate.
* The file or stream to capture.
* @param targetSampleRate
* The target sample rate.
* @param audioBufferSize
* The number of samples used in the buffer.
* @param bufferOverlap
* @param bufferOverlap
* @return A new audioprocessor.
*/
public static AudioDispatcher fromPipe(final String source,final int targetSampleRate, final int audioBufferSize,final int bufferOverlap){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,17 @@
*/


package be.tarsos.dsp;
package be.tarsos.dsp.io.jvm;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;

import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioProcessor;

/**
* This AudioProcessor can be used to sync events with sound. It uses a pattern
* described in JavaFX Special Effects Taking Java RIA to the Extreme with
Expand Down
20 changes: 20 additions & 0 deletions jvm/be/tarsos/dsp/io/jvm/JVMAudioInputStream.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@
import be.tarsos.dsp.io.TarsosDSPAudioFormat;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;

/**
* Encapsulates an {@link AudioInputStream} to make it work with the core TarsosDSP library.
*
* @author Joren Six
*
*/
public class JVMAudioInputStream implements TarsosDSPAudioInputStream {

private final AudioInputStream underlyingStream;
Expand Down Expand Up @@ -66,12 +72,26 @@ public TarsosDSPAudioFormat getFormat() {
return tarsosDSPAudioFormat;
}

/**
* Converts a {@link AudioFormat} to a {@link TarsosDSPAudioFormat}.
*
* @param format
* The {@link AudioFormat}
* @return A {@link TarsosDSPAudioFormat}
*/
public static TarsosDSPAudioFormat toTarsosDSPFormat(AudioFormat format) {
boolean isSigned = format.getEncoding() == Encoding.PCM_SIGNED;
TarsosDSPAudioFormat tarsosDSPFormat = new TarsosDSPAudioFormat(format.getSampleRate(), format.getSampleSizeInBits(), format.getChannels(), isSigned, format.isBigEndian());
return tarsosDSPFormat;
}

/**
* Converts a {@link TarsosDSPAudioFormat} to a {@link AudioFormat}.
*
* @param format
* The {@link TarsosDSPAudioFormat}
* @return A {@link AudioFormat}
*/
public static AudioFormat toAudioFormat(TarsosDSPAudioFormat format) {
boolean isSigned = format.getEncoding() == TarsosDSPAudioFormat.Encoding.PCM_SIGNED;
AudioFormat audioFormat = new AudioFormat(format.getSampleRate(), format.getSampleSizeInBits(), format.getChannels(), isSigned, format.isBigEndian());
Expand Down
5 changes: 5 additions & 0 deletions jvm/be/tarsos/dsp/io/jvm/WaveformWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.TarsosDSPAudioFormat;

/**
* <p>
Expand Down Expand Up @@ -96,6 +97,10 @@ public WaveformWriter(final AudioFormat format,final String fileName){
}
}

public WaveformWriter(final TarsosDSPAudioFormat format,final String fileName){
this(JVMAudioInputStream.toAudioFormat(format),fileName);
}

@Override
public boolean process(AudioEvent audioEvent) {
this.byteOverlap = audioEvent.getOverlap() * format.getFrameSize();
Expand Down
Loading

0 comments on commit a58d401

Please sign in to comment.