tests.be.tarsos.dsp.test.AudioDispatcherTest Maven / Gradle / Ivy
The newest version!
package be.tarsos.dsp.test;
import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import org.junit.Test;
import be.tarsos.dsp.AudioDispatcher;
import be.tarsos.dsp.AudioEvent;
import be.tarsos.dsp.AudioProcessor;
import be.tarsos.dsp.io.PipedAudioStream;
import be.tarsos.dsp.io.TarsosDSPAudioInputStream;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;
import be.tarsos.dsp.test.TestUtilities;
public class AudioDispatcherTest {
public TarsosDSPAudioInputStream getAudioInputStream() {
File audioFile = TestUtilities.sineOf4000Samples();
AudioInputStream stream = null;
try {
stream = AudioSystem.getAudioInputStream(audioFile);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
TarsosDSPAudioInputStream audioStream = new JVMAudioInputStream(stream);
return audioStream;
}
public TarsosDSPAudioInputStream getAudioInputStreamPiped(){
File audioFile = TestUtilities.sineOf4000Samples();
return new PipedAudioStream(audioFile.getAbsolutePath()).getMonoStream(44100,0);
}
@Test
public void testZeroPaddingFirstBuffer(){
testZeroPaddingFirstBufferForStream(getAudioInputStream());
testZeroPaddingFirstBufferForStream(getAudioInputStreamPiped());
}
public void testZeroPaddingFirstBufferForStream(TarsosDSPAudioInputStream audioStream) {
final int bufferSize = 4096;
final int stepSize = 2048;
final int totalSamples = 4000;
AudioDispatcher adp = new AudioDispatcher(audioStream, bufferSize, stepSize);
adp.setZeroPadFirstBuffer(true);
adp.setZeroPadLastBuffer(true);
adp.addAudioProcessor(new AudioProcessor() {
int bufferCounter = 0;
@Override
public boolean process(AudioEvent audioEvent) {
//Check if the first samples are zero
if(audioEvent.getSamplesProcessed()==0){
for(int i = 0 ; i < (bufferSize - stepSize); i++){
assertEquals("First buffer should be zero padded", 0 , audioEvent.getFloatBuffer()[i],0.00000001);
}
assertEquals("Buffer size should always equal 4096",bufferSize,audioEvent.getBufferSize());
}
//Check if the last samples are zero
//first buffer contains [0-2048] second buffer[2048-4000]
if(audioEvent.getSamplesProcessed()==stepSize){
for(int i = totalSamples; i < bufferSize; i++){
assertEquals("Last buffer should be zero padded", 0 , audioEvent.getFloatBuffer()[i],0.00000001);
}
assertEquals("Buffer size should always equal 4096",bufferSize,audioEvent.getBufferSize());
}
bufferCounter++;
return true;
}
@Override
public void processingFinished() {
assertEquals("Should have processed 2 buffers.",2,bufferCounter);
}
});
adp.run();
}
/**
* Tests the case when the first buffer is immediately the last.
*/
@Test
public void testFirstAndLastBuffer(){
testFirstAndLastBufferForStream(getAudioInputStream());
testFirstAndLastBufferForStream(getAudioInputStreamPiped());
}
public void testFirstAndLastBufferForStream(TarsosDSPAudioInputStream audioStream) {
final int bufferSize = 4096;
final int stepSize = 0;
final int totalSamples = 4000;
AudioDispatcher adp = new AudioDispatcher(getAudioInputStream(), bufferSize, stepSize);
adp.setZeroPadFirstBuffer(false);
adp.setZeroPadLastBuffer(false);
adp.addAudioProcessor(new AudioProcessor() {
int bufferCounter = 0;
@Override
public boolean process(AudioEvent audioEvent) {
//Check if the first samples are zero
if(audioEvent.getSamplesProcessed()==0){
assertEquals("Buffer size should always equal 4000",totalSamples,audioEvent.getBufferSize());
}
bufferCounter++;
return true;
}
@Override
public void processingFinished() {
assertEquals("Should have processed 1 buffer.",1,bufferCounter);
}
});
adp.run();
}
}