From 737bef47599fd9c3355d7b04743b18c4fbd2daea Mon Sep 17 00:00:00 2001 From: Sandor Vasi Date: Tue, 1 Mar 2016 08:40:00 +0100 Subject: [PATCH] first commit --- .gitignore | 3 + LICENSE | 21 + README.md | 75 +++ pom.xml | 137 +++++ .../sox/AlreadyExecutedException.java | 8 + .../ie/corballis/sox/AudioFileFormat.java | 544 ++++++++++++++++++ src/main/java/ie/corballis/sox/SoXEffect.java | 389 +++++++++++++ .../java/ie/corballis/sox/SoXEncoding.java | 55 ++ src/main/java/ie/corballis/sox/Sox.java | 158 +++++ .../sox/WrongParametersException.java | 7 + .../java/ie/corballis/sox/ArgumentTester.java | 34 ++ 11 files changed, 1431 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/ie/corballis/sox/AlreadyExecutedException.java create mode 100644 src/main/java/ie/corballis/sox/AudioFileFormat.java create mode 100644 src/main/java/ie/corballis/sox/SoXEffect.java create mode 100644 src/main/java/ie/corballis/sox/SoXEncoding.java create mode 100644 src/main/java/ie/corballis/sox/Sox.java create mode 100644 src/main/java/ie/corballis/sox/WrongParametersException.java create mode 100644 src/test/java/ie/corballis/sox/ArgumentTester.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c935b9e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target/ +**/*.iml +.idea \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3fdb033 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Corballis Consulting Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c5410f --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# sox-wrapper-java +Java wrapper around the famous [sox](https://sourceforge.net/projects/sox/) audio processing tool. +Please note that the sox executable is not part of this project. This is a wrapper application only that points to the +executable. + +Few of the arguments are not implemented yet, but with the help of the `SoX argument(String ...args)` method +any kind of parameter can be added to the parameter list. + +Although the constructor of the SoX class requires the user to provide the full path of the sox executable, +it may not be a good idea to hard-code file system paths to java code. Use property files or environment variables instead. + +Have a nice coding :) + +## How to use + +``` + + ie.corballis + sox-wrapper-java + 1.0-SNAPSHOT + +``` + +## Code Examples + +### Simple sox usage +The code below represents the following code in the CLI: +```sox --rate 16000 input.wav --encoding signed-integer --bits 16 output.wav remix 1 ``` + +``` +Sox sox = new Sox("/usr/bin/sox"); + sox + .sampleRate(16000) + .inputFile("input.wav") + .encoding(SoXEncoding.SIGNED_INTEGER) + .bits(16) + .outputFile("output.wav") + .effect(SoXEffect.REMIX,"1") + .execute(); + } +``` + +### Pass unimplemented arguments to the sox + +If an argument, you are looking for is not implemented yet, feel free to open an issue, or simply use the + `SoX argument(String ...args)` method to pass custom arguments to the sox. +``` +Sox sox = new Sox("/usr/bin/sox"); + sox.argument("--myargumentKey", "myArgumentValue") + .inputFile("input.wav") + .outputFile("output.wav") + .execute(); + } +``` + +### Sox with Spring Framework +This is a recommendation, how to integrate the sox java wrapper with the Spring Framework + +``` +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SoXConfiguration { + + @Bean(id="sox" scope="prototype") + public Sox sox() { + Sox sox = new Sox("/usr/bin/sox"); + return sox; + } +``` + +With the above described Spring configuration class you can inject the sox wrapper anywhere in you Spring project like this: + +```@Autowired private SoX sox;``` and the framework will initialize a new wrapper for you. diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..ee8bec6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,137 @@ + + + 4.0.0 + + ie.corballis + sox-java + 1.0-SNAPSHOT + https://github.com/corballis/sox-wrapper-java + + + org.sonatype.oss + oss-parent + 7 + + + + + MIT License + http://www.opensource.org/licenses/mit-license.php + repo + + + + + + sawo + Sandor Vasi + sawo@freemail.hu + + + + + scm:git:git@github.com:corballis/sox-wrapper-java.git + scm:git:git@github.com:corballis/sox-wrapper-java.git + scm:git:git@github.com:corballis/sox-wrapper-java.git + HEAD + + + + 1.7.8 + 4.8.2 + + + + + org.slf4j + slf4j-api + ${slf4j-api.version} + + + junit + junit + ${junit.version} + test + + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.4 + + + sign-artifacts + verify + + sign + + + + + + maven-source-plugin + + + attach-sources + + jar + + + + + + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + UTF-8 + + + + org.apache.maven.plugins + maven-release-plugin + 2.4.2 + + + + + diff --git a/src/main/java/ie/corballis/sox/AlreadyExecutedException.java b/src/main/java/ie/corballis/sox/AlreadyExecutedException.java new file mode 100644 index 0000000..0246393 --- /dev/null +++ b/src/main/java/ie/corballis/sox/AlreadyExecutedException.java @@ -0,0 +1,8 @@ +package ie.corballis.sox; + +public class AlreadyExecutedException extends Exception { + + public AlreadyExecutedException(String message) { + super(message); + } +} diff --git a/src/main/java/ie/corballis/sox/AudioFileFormat.java b/src/main/java/ie/corballis/sox/AudioFileFormat.java new file mode 100644 index 0000000..e383f99 --- /dev/null +++ b/src/main/java/ie/corballis/sox/AudioFileFormat.java @@ -0,0 +1,544 @@ +package ie.corballis.sox; + +public enum AudioFileFormat { + _8SVX { + @Override + public String toString() { + return "8svx"; + } + }, + AIF { + @Override + public String toString() { + return "aif"; + } + }, + AIFC { + @Override + public String toString() { + return "aifc"; + } + }, + AIFF { + @Override + public String toString() { + return "aiff"; + } + }, + AIFFC { + @Override + public String toString() { + return "aiffc"; + } + }, + AL { + @Override + public String toString() { + return "al"; + } + }, + AMB { + @Override + public String toString() { + return "amb"; + } + }, + AU { + @Override + public String toString() { + return "au"; + } + }, + AVR { + @Override + public String toString() { + return "avr"; + } + }, + CAF { + @Override + public String toString() { + return "caf"; + } + }, + CDDA { + @Override + public String toString() { + return "cdda"; + } + }, + CDR { + @Override + public String toString() { + return "cdr"; + } + }, + CVS { + @Override + public String toString() { + return "cvs"; + } + }, + CVSD { + @Override + public String toString() { + return "cvsd"; + } + }, + CVU { + @Override + public String toString() { + return "cvu"; + } + }, + DAT { + @Override + public String toString() { + return "dat"; + } + }, + DVMS { + @Override + public String toString() { + return "dvms"; + } + }, + F32 { + @Override + public String toString() { + return "f32"; + } + }, + F4 { + @Override + public String toString() { + return "f4"; + } + }, + F64 { + @Override + public String toString() { + return "f64"; + } + }, + F8 { + @Override + public String toString() { + return "f8"; + } + }, + FAP { + @Override + public String toString() { + return "fap"; + } + }, + FLAC { + @Override + public String toString() { + return "flac"; + } + }, + FSSD { + @Override + public String toString() { + return "fssd"; + } + }, + GSM { + @Override + public String toString() { + return "gsm"; + } + }, + GSRT { + @Override + public String toString() { + return "gsrt"; + } + }, + HCOM { + @Override + public String toString() { + return "hcom"; + } + }, + HTK { + @Override + public String toString() { + return "htk"; + } + }, + IMA { + @Override + public String toString() { + return "ima"; + } + }, + IRCAM { + @Override + public String toString() { + return "ircam"; + } + }, + LA { + @Override + public String toString() { + return "la"; + } + }, + LPC { + @Override + public String toString() { + return "lpc"; + } + }, + LPC10 { + @Override + public String toString() { + return "lpc10"; + } + }, + LU { + @Override + public String toString() { + return "lu"; + } + }, + MAT { + @Override + public String toString() { + return "mat"; + } + }, + MAT4 { + @Override + public String toString() { + return "mat4"; + } + }, + MAT5 { + @Override + public String toString() { + return "mat5"; + } + }, + MAUD { + @Override + public String toString() { + return "maud"; + } + }, + NIST { + @Override + public String toString() { + return "nist"; + } + }, + OGG { + @Override + public String toString() { + return "ogg"; + } + }, + PAF { + @Override + public String toString() { + return "paf"; + } + }, + PRC { + @Override + public String toString() { + return "prc"; + } + }, + PVF { + @Override + public String toString() { + return "pvf"; + } + }, + RAW { + @Override + public String toString() { + return "raw"; + } + }, + S1 { + @Override + public String toString() { + return "s1"; + } + }, + S16 { + @Override + public String toString() { + return "s16"; + } + }, + S2 { + @Override + public String toString() { + return "s2"; + } + }, + S24 { + @Override + public String toString() { + return "s24"; + } + }, + S3 { + @Override + public String toString() { + return "s3"; + } + }, + S32 { + @Override + public String toString() { + return "s32"; + } + }, + S4 { + @Override + public String toString() { + return "s4"; + } + }, + S8 { + @Override + public String toString() { + return "s8"; + } + }, + SB { + @Override + public String toString() { + return "sb"; + } + }, + SD2 { + @Override + public String toString() { + return "sd2"; + } + }, + SDS { + @Override + public String toString() { + return "sds"; + } + }, + SF { + @Override + public String toString() { + return "sf"; + } + }, + SL { + @Override + public String toString() { + return "sl"; + } + }, + SLN { + @Override + public String toString() { + return "sln"; + } + }, + SMP { + @Override + public String toString() { + return "smp"; + } + }, + SND { + @Override + public String toString() { + return "snd"; + } + }, + SNDFILE { + @Override + public String toString() { + return "sndfile"; + } + }, + SNDR { + @Override + public String toString() { + return "sndr"; + } + }, + SNDT { + @Override + public String toString() { + return "sndt"; + } + }, + SOU { + @Override + public String toString() { + return "sou"; + } + }, + SOX { + @Override + public String toString() { + return "sox"; + } + }, + SPH { + @Override + public String toString() { + return "sph"; + } + }, + SW { + @Override + public String toString() { + return "sw"; + } + }, + TXW { + @Override + public String toString() { + return "txw"; + } + }, + U1 { + @Override + public String toString() { + return "u1"; + } + }, + U16 { + @Override + public String toString() { + return "u16"; + } + }, + U2 { + @Override + public String toString() { + return "u2"; + } + }, + U24 { + @Override + public String toString() { + return "u24"; + } + }, + U3 { + @Override + public String toString() { + return "u3"; + } + }, + U32 { + @Override + public String toString() { + return "u32"; + } + }, + U4 { + @Override + public String toString() { + return "u4"; + } + }, + U8 { + @Override + public String toString() { + return "u8"; + } + }, + UB { + @Override + public String toString() { + return "ub"; + } + }, + UL { + @Override + public String toString() { + return "ul"; + } + }, + UW { + @Override + public String toString() { + return "uw"; + } + }, + VMS { + @Override + public String toString() { + return "vms"; + } + }, + VOC { + @Override + public String toString() { + return "voc"; + } + }, + VORBIS { + @Override + public String toString() { + return "vorbis"; + } + }, + VOX { + @Override + public String toString() { + return "vox"; + } + }, + W64 { + @Override + public String toString() { + return "w64"; + } + }, + WAV { + @Override + public String toString() { + return "wav"; + } + }, + WAVPCM { + @Override + public String toString() { + return "wavpcm"; + } + }, + WV { + @Override + public String toString() { + return "wv"; + } + }, + WVE { + @Override + public String toString() { + return "wve"; + } + }, + XA { + @Override + public String toString() { + return "xa"; + } + }, + XI { + @Override + public String toString() { + return "xi"; + } + } +} diff --git a/src/main/java/ie/corballis/sox/SoXEffect.java b/src/main/java/ie/corballis/sox/SoXEffect.java new file mode 100644 index 0000000..0b1c2c2 --- /dev/null +++ b/src/main/java/ie/corballis/sox/SoXEffect.java @@ -0,0 +1,389 @@ +package ie.corballis.sox; + +public enum SoXEffect { + ALLPASS { + @Override + public String toString() { + return "allpass"; + } + }, + BAND { + @Override + public String toString() { + return "band"; + } + }, + BANDPASS { + @Override + public String toString() { + return "bandpass"; + } + }, + BANDREJECT { + @Override + public String toString() { + return "bandreject"; + } + }, + BASS { + @Override + public String toString() { + return "bass"; + } + }, + BEND { + @Override + public String toString() { + return "bend"; + } + }, + BIQUAD { + @Override + public String toString() { + return "biquad"; + } + }, + CHORUS { + @Override + public String toString() { + return "chorus"; + } + }, + CHANNELS { + @Override + public String toString() { + return "channels"; + } + }, + COMPAND { + @Override + public String toString() { + return "compand"; + } + }, + CONTRAST { + @Override + public String toString() { + return "contrast"; + } + }, + DCSHIFT { + @Override + public String toString() { + return "dcshift"; + } + }, + DEEMPH { + @Override + public String toString() { + return "deemph"; + } + }, + DELAY { + @Override + public String toString() { + return "delay"; + } + }, + DITHER { + @Override + public String toString() { + return "dither"; + } + }, + DIVIDE_PLUS { + @Override + public String toString() { + return "divide+"; + } + }, + DOWNSAMPLE { + @Override + public String toString() { + return "downsample"; + } + }, + EARWAX { + @Override + public String toString() { + return "earwax"; + } + }, + ECHO { + @Override + public String toString() { + return "echo"; + } + }, + ECHOS { + @Override + public String toString() { + return "echos"; + } + }, + EQUALIZER { + @Override + public String toString() { + return "equalizer"; + } + }, + FADE { + @Override + public String toString() { + return "fade"; + } + }, + FIR { + @Override + public String toString() { + return "fir"; + } + }, + FIRFIT_PLUS { + @Override + public String toString() { + return "firfit+"; + } + }, + FLANGER { + @Override + public String toString() { + return "flanger"; + } + }, + GAIN { + @Override + public String toString() { + return "gain"; + } + }, + HIGHPASS { + @Override + public String toString() { + return "highpass"; + } + }, + HILBERT { + @Override + public String toString() { + return "hilbert"; + } + }, + INPUT_HASH { + @Override + public String toString() { + return "input#"; + } + }, + LOUDNESS { + @Override + public String toString() { + return "loudness"; + } + }, + LOWPASS { + @Override + public String toString() { + return "lowpass"; + } + }, + MCOMPAND { + @Override + public String toString() { + return "mcompand"; + } + }, + NOISEPROF { + @Override + public String toString() { + return "noiseprof"; + } + }, + NOISERED { + @Override + public String toString() { + return "noisered"; + } + }, + NORM { + @Override + public String toString() { + return "norm"; + } + }, + OOPS { + @Override + public String toString() { + return "oops"; + } + }, + OUTPUT_HASH { + @Override + public String toString() { + return "output#"; + } + }, + OVERDRIVE { + @Override + public String toString() { + return "overdrive"; + } + }, + PAD { + @Override + public String toString() { + return "pad"; + } + }, + PHASER { + @Override + public String toString() { + return "phaser"; + } + }, + PITCH { + @Override + public String toString() { + return "pitch"; + } + }, + RATE { + @Override + public String toString() { + return "rate"; + } + }, + REMIX { + @Override + public String toString() { + return "remix"; + } + }, + REPEAT { + @Override + public String toString() { + return "repeat"; + } + }, + REVERB { + @Override + public String toString() { + return "reverb"; + } + }, + REVERSE { + @Override + public String toString() { + return "reverse"; + } + }, + RIAA { + @Override + public String toString() { + return "riaa"; + } + }, + SILENCE { + @Override + public String toString() { + return "silence"; + } + }, + SINC { + @Override + public String toString() { + return "sinc"; + } + }, + SPECTROGRAM { + @Override + public String toString() { + return "spectrogram"; + } + }, + SPEED { + @Override + public String toString() { + return "speed"; + } + }, + SPLICE { + @Override + public String toString() { + return "splice"; + } + }, + STAT { + @Override + public String toString() { + return "stat"; + } + }, + STATS { + @Override + public String toString() { + return "stats"; + } + }, + STRETCH { + @Override + public String toString() { + return "stretch"; + } + }, + SWAP { + @Override + public String toString() { + return "swap"; + } + }, + SYNTH { + @Override + public String toString() { + return "synth"; + } + }, + TEMPO { + @Override + public String toString() { + return "tempo"; + } + }, + TREBLE { + @Override + public String toString() { + return "treble"; + } + }, + TREMOLO { + @Override + public String toString() { + return "tremolo"; + } + }, + TRIM { + @Override + public String toString() { + return "trim"; + } + }, + UPSAMPLE { + @Override + public String toString() { + return "upsample"; + } + }, + VAD { + @Override + public String toString() { + return "vad"; + } + }, + VOL { + @Override + public String toString() { + return "vol"; + } + } + +} diff --git a/src/main/java/ie/corballis/sox/SoXEncoding.java b/src/main/java/ie/corballis/sox/SoXEncoding.java new file mode 100644 index 0000000..1357970 --- /dev/null +++ b/src/main/java/ie/corballis/sox/SoXEncoding.java @@ -0,0 +1,55 @@ +package ie.corballis.sox; + +public enum SoXEncoding { + SIGNED_INTEGER { + @Override + public String toString() { + return "signed-integer"; + } + }, + UNSIGNED_INTEGER { + + @Override + public String toString() { + return "unsigned-integer"; + } + }, + + + FLOATING_POINT { + @Override + public String toString() { + return "floating-point"; + } + }, + MU_LAW { + @Override + public String toString() { + return "mu-law"; + } + }, + A_LAW { + @Override + public String toString() { + return "a-law"; + } + }, + IMA_ADPCM { + @Override + public String toString() { + return "ima-adpcm"; + } + }, + MS_ADPCM { + @Override + public String toString() { + return "ms-adpcm"; + } + }, + GSM_FULL_RATE { + @Override + public String toString() { + return "gsm-full-rate"; + } + } +} diff --git a/src/main/java/ie/corballis/sox/Sox.java b/src/main/java/ie/corballis/sox/Sox.java new file mode 100644 index 0000000..ad0f426 --- /dev/null +++ b/src/main/java/ie/corballis/sox/Sox.java @@ -0,0 +1,158 @@ +package ie.corballis.sox; + +import java.io.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class Sox { + + private static Logger logger = LoggerFactory.getLogger(Sox.class); + + private final String soXBinaryPath; + + private List arguments = new ArrayList(); + + private boolean globalOptionSet = false; + + private boolean formatOptionSet = false; + + private boolean inputFileSet = false; + + private boolean outputFileSet = false; + + private boolean hasBeenExecuted = false; + + public Sox(String soxPath) { + this.soXBinaryPath = soxPath; + } + + public Sox ignoreLength() { + arguments.add("--ignore-length"); + formatOptionSet = true; + return this; + } + + // format options + public Sox fileType(AudioFileFormat format) { + arguments.add("--type"); + arguments.add(format.toString()); + return this; + } + + public Sox encoding(SoXEncoding encoding) { + arguments.add("--encoding"); + arguments.add(encoding.toString()); + return this; + } + + public Sox bits(Integer bits) { + arguments.add("--bits"); + arguments.add(bits.toString()); + return this; + } + + public Sox reverseNibbles() { + arguments.add("--reverse-nibbles"); + return this; + } + + public Sox reverseBits() { + arguments.add("--reverse-bits"); + return this; + } + + public Sox sampleRate(Integer sample) { + arguments.add("--rate"); + arguments.add(sample.toString()); + formatOptionSet = true; + return this; + } + +// global options + public Sox verbose(Integer level) { + arguments.add("-V" + level.toString()); + globalOptionSet = true; + return this; + } + + public Sox effect(SoXEffect effect, String ... effectArguments) { + arguments.add(effect.toString()); + for (String effectArgument : effectArguments) { + arguments.add(effectArgument); + } + return this; + } + + public Sox argument(String ... arguments) { + Collections.addAll(this.arguments, arguments); + return this; + } + + public Sox inputFile(String inputFile) { + arguments.add(inputFile); + return this; + } + + public Sox outputFile(String outputFile) throws WrongParametersException { + if (inputFileSet) { + throw new WrongParametersException("The output file has to be later then an input file"); + } + arguments.add(outputFile); + outputFileSet = true; + return this; + } + + public void execute() throws IOException, WrongParametersException, AlreadyExecutedException { + if (hasBeenExecuted) { + throw new AlreadyExecutedException("The execute() method cannot be called twice"); + } + File soxBinary = new File(soXBinaryPath); + if (!soxBinary.exists()) { + throw new FileNotFoundException("Sox binary is not available under the following path: " + soXBinaryPath); + } + + if (!outputFileSet) { + throw new WrongParametersException("The output file argument is missing"); + } + arguments.add(0, soXBinaryPath); + logger.debug("Sox arguments: {}", arguments); + ProcessBuilder processBuilder = new ProcessBuilder(arguments); + processBuilder.redirectErrorStream(true); + Process process = null; + IOException errorDuringExecution = null; + try { + process = processBuilder.start(); + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = reader.readLine()) != null) { + logger.debug(line); + } + } catch (IOException e) { + errorDuringExecution = e; + logger.error("Error while running Sox. {}", e.getMessage()); + } finally { + if (process != null) { + process.destroy(); + } + if (errorDuringExecution != null) { + throw errorDuringExecution; + } + } + } + + public String getSoXBinaryPath() { + return soXBinaryPath; + } + + public List getArguments() { + return arguments; + } + + public void setArguments(List arguments) { + this.arguments = arguments; + } +} diff --git a/src/main/java/ie/corballis/sox/WrongParametersException.java b/src/main/java/ie/corballis/sox/WrongParametersException.java new file mode 100644 index 0000000..7ff5cc1 --- /dev/null +++ b/src/main/java/ie/corballis/sox/WrongParametersException.java @@ -0,0 +1,7 @@ +package ie.corballis.sox; + +public class WrongParametersException extends Throwable { + public WrongParametersException(String s) { + super(s); + } +} diff --git a/src/test/java/ie/corballis/sox/ArgumentTester.java b/src/test/java/ie/corballis/sox/ArgumentTester.java new file mode 100644 index 0000000..f295d4a --- /dev/null +++ b/src/test/java/ie/corballis/sox/ArgumentTester.java @@ -0,0 +1,34 @@ +package ie.corballis.sox; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class ArgumentTester { + + @Test + public void testArguments() throws WrongParametersException { + Sox sox = new Sox("/usr/local/bin/sox"); + List arguments = sox + .sampleRate(16000) + .inputFile("input.wav") + .outputFile("output.wav") + .bits(16) + .encoding(SoXEncoding.SIGNED_INTEGER) + .effect(SoXEffect.REMIX).argument("1") + .getArguments(); + List expectedArguments = Arrays.asList( + "input.wav", + "output.wav", + "--bits", + "16", + "--encoding", + "signed-integer", + "remix", + "1"); + assertEquals(expectedArguments, arguments); + } +}