All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tests.be.tarsos.dsp.test.TestUtilities Maven / Gradle / Ivy

The newest version!
/*
*      _______                       _____   _____ _____  
*     |__   __|                     |  __ \ / ____|  __ \ 
*        | | __ _ _ __ ___  ___  ___| |  | | (___ | |__) |
*        | |/ _` | '__/ __|/ _ \/ __| |  | |\___ \|  ___/ 
*        | | (_| | |  \__ \ (_) \__ \ |__| |____) | |     
*        |_|\__,_|_|  |___/\___/|___/_____/|_____/|_|     
*                                                         
* -------------------------------------------------------------
*
* 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.
* 
*/


package be.tarsos.dsp.test;

import static org.junit.Assert.assertEquals;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;

import org.junit.Test;

import be.tarsos.dsp.io.TarsosDSPAudioFloatConverter;
import be.tarsos.dsp.io.jvm.JVMAudioInputStream;



public class TestUtilities {

	/**
	 * Constructs and returns a buffer of a two seconds long pure sine of 440Hz
	 * sampled at 44.1kHz.
	 * 
	 * @return A buffer of a two seconds long pure sine (440Hz) sampled at
	 *         44.1kHz.
	 */
	public static float[] audioBufferSine() {
		final double sampleRate = 44100.0;
		final double f0 = 440.0;
		final double amplitudeF0 = 0.5;
		final double seconds = 4.0;
		final float[] buffer = new float[(int) (seconds * sampleRate)];
		for (int sample = 0; sample < buffer.length; sample++) {
			final double time = sample / sampleRate;
			buffer[sample] = (float) (amplitudeF0 * Math.sin(2 * Math.PI * f0 * time));
		}
		return buffer;
	}
	
	public static float[] audioBufferSine(int numberOfSamples) {
		final double sampleRate = 44100.0;
		final double f0 = 440.0;
		final double amplitudeF0 = 0.5;
		final float[] buffer = new float[numberOfSamples];
		for (int sample = 0; sample < buffer.length; sample++) {
			final double time = sample / sampleRate;
			buffer[sample] = (float) (amplitudeF0 * Math.sin(2 * Math.PI * f0 * time));
		}
		return buffer;
	}
	
	/**
	 * @return a 4096 samples long 44.1kHz sampled float buffer with the sound
	 *         of a flute played double forte at A6 (theoretically 440Hz) without vibrato
	 */
	public static float[] audioBufferFlute() {
		int lengthInSamples = 4096;
		String file = "/be/tarsos/dsp/test/resources/flute.novib.ff.A4.wav";
		return audioBufferFile(file,lengthInSamples);
	}
	
	public static File fluteFile(){
		String file = "/be/tarsos/dsp/test/resources/flute.novib.ff.A4.wav";
		final URL url = TestUtilities.class.getResource(file);
		try {
			return new File(new URI(url.toString()));
		} catch (URISyntaxException e) {
			return null;
		}
	}
	
	public static File ccirFile(){
		String file = "/be/tarsos/dsp/test/resources/CCIR_04221.ogg";
		final URL url = TestUtilities.class.getResource(file);
		try {
			return new File(new URI(url.toString()));
		} catch (URISyntaxException e) {
			return null;
		}
	}
	
	public static File onsetsAudioFile(){
		String file = "/be/tarsos/dsp/test/resources/NR45.wav";
		final URL url = TestUtilities.class.getResource(file);
		try {
			return new File(new URI(url.toString()));
		} catch (URISyntaxException e) {
			return null;
		}
	}
	
	public static File sineOf4000Samples(){
		String file = "/be/tarsos/dsp/test/resources/4000_samples_of_440Hz_at_44.1kHz.wav";
		final URL url = TestUtilities.class.getResource(file);
		try {
			return new File(new URI(url.toString()));
		} catch (URISyntaxException e) {
			return null;
		}
	}
	
	/**
	 * @return a 4096 samples long 44.1kHz sampled float buffer with the sound
	 *         of a flute played double forte at B6 (theoretically 1975.53Hz) without vibrato
	 */
	public static float[] audioBufferHighFlute() {
		int lengthInSamples = 4096;
		String file = "/be/tarsos/dsp/test/resources/flute.novib.ff.B6.wav";
		return audioBufferFile(file,lengthInSamples);
	}
	
	/**
	 * Reads the contents of a file.
	 * 
	 * @param name
	 *            the name of the file to read
	 * @return the contents of the file if successful, an empty string
	 *         otherwise.
	 */
	public static String readFile(final String name) {
		FileReader fileReader = null;
		final StringBuilder contents = new StringBuilder();
		try {
			final File file = new File(name);
			if (!file.exists()) {
				throw new IllegalArgumentException("File " + name + " does not exist");
			}
			fileReader = new FileReader(file);
			final BufferedReader reader = new BufferedReader(fileReader);
			String inputLine = reader.readLine();
			while (inputLine != null) {
				contents.append(inputLine).append("\n");
				inputLine = reader.readLine();
			}
			reader.close();
		} catch (final IOException i1) {
			throw new RuntimeException(i1);
		}
		return contents.toString();
	}
	
	/**
	 * Reads the contents of a file in a jar.
	 * 
	 * @param path
	 *            the path to read e.g. /package/name/here/help.html
	 * @return the contents of the file when successful, an empty string
	 *         otherwise.
	 */
	public static String readFileFromJar(final String path) {
		final StringBuilder contents = new StringBuilder();
		final URL url = TestUtilities.class.getResource(path);
		URLConnection connection;
		try {
			connection = url.openConnection();
			final InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
			final BufferedReader reader = new BufferedReader(inputStreamReader);
			String inputLine;
			inputLine = reader.readLine();
			while (inputLine != null) {
				contents.append(new String(inputLine.getBytes(), "UTF-8")).append("\n");
				inputLine = reader.readLine();
			}
			reader.close();
		} catch (final IOException e) {
			throw new RuntimeException(e);
		} catch (final NullPointerException e) {
			throw new RuntimeException(e);
		}
		return contents.toString();
	}
	
	/**
	 * @return a 4096 samples long 44.1kHz sampled float buffer with the sound
	 *         of a piano played double forte at A4 (theoretically 440Hz)
	 */
	public static float[] audioBufferPiano() {
		int lengthInSamples = 4096;
		String file = "/be/tarsos/dsp/test/resources/piano.ff.A4.wav";
		return audioBufferFile(file,lengthInSamples);
	}
	
	/**
	 	 * @return a 4096 samples long 44.1kHz sampled float buffer with the sound
	 *         of a piano played double forte at C3 (theoretically 130.81Hz)
	 */
	public static float[] audioBufferLowPiano() {
		int lengthInSamples = 4096;
		String file = "/be/tarsos/dsp/test/resources/piano.ff.C3.wav";
		return audioBufferFile(file,lengthInSamples);
	}
	
	private static float[] audioBufferFile(String file,int lengthInSamples){
		float[] buffer = new float[lengthInSamples];
		try {
			final URL url = TestUtilities.class.getResource(file);
			AudioInputStream audioStream = AudioSystem.getAudioInputStream(url);
			AudioFormat format = audioStream.getFormat();
			TarsosDSPAudioFloatConverter converter = TarsosDSPAudioFloatConverter.getConverter(JVMAudioInputStream.toTarsosDSPFormat(format));
			byte[] bytes = new byte[lengthInSamples * format.getSampleSizeInBits()];
			audioStream.read(bytes);		
			converter.toFloatArray(bytes, buffer);
		} catch (IOException e) {
			throw new Error("Test audio file should be present.");
		} catch (UnsupportedAudioFileException e) {
			throw new Error("Test audio file format should be supported.");
		}		
		return buffer;
	}

	/**
	 * 
	 * @return a half a second long silent buffer (all zeros), at 44.1kHz.
	 */
	public static float[] audioBufferSilence() {
		final double sampleRate = 44100.0;
		final double seconds = 0.5;
		final float[] buffer = new float[(int) (seconds * sampleRate)];
		return buffer;
	}

	@Test
	public void testNothing(){
		//a test to please maven
		assertEquals(true,true);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy