diff --git a/README.md b/README.md
index 76b2cec..8655b26 100644
--- a/README.md
+++ b/README.md
@@ -36,13 +36,13 @@ Artifacts are available on maven central:
org.sheinbergon
jna-aac-encoder
- 2.0.0
+ 2.1.0
```
**_Gradle_**
```groovy
-compile 'org.sheinbergon:jna-aac-encoder:2.0.0'
+compile 'org.sheinbergon:jna-aac-encoder:2.1.0'
```
#### Additional information
@@ -51,7 +51,8 @@ compile 'org.sheinbergon:jna-aac-encoder:2.0.0'
* Windows (64-bit)
* OSX (Intel 64-bit / Apple Silicon, compiled with Xcode 13.3 SDK)
* Tested with FDK-AAC version is 2.0.2
- * Lower `2.0.x` versions of FDK-AAC might work, but haven't been tested.
+ * Earlier `2.0.x` versions of FDK-AAC might work, but haven't been tested.
+ * For JDK 8 compatibility, please use version `2.0.0` of this library
* For `0.1.6`/`0.1.5` FDK-AAC support and Windows 32 bit support, please use version `0.1.9` of this library
### Encoding using the JVM AudioSystem
@@ -92,7 +93,7 @@ the encoding process to fail.
Additional restrictions:
* A maximum of 6 audio input/output channels
- * Only the AAC-LC/HE-AAC/HE-AACv2 encoding profiles are supported
+ * Only the AAC-LC/HE-AAC/HE-AACv2 encoding profiles are supported
## Roadmap
* Improved lower-level interface (with examples).
diff --git a/build.gradle b/build.gradle
index 3294d0e..f785b11 100644
--- a/build.gradle
+++ b/build.gradle
@@ -16,7 +16,7 @@ plugins {
ext {
depVersions = [
lombok : '1.18.30',
- jna : '5.12.1',
+ jna : '5.13.0',
commonsLang3: '3.14.0',
jsr305 : '3.0.2'
]
@@ -40,7 +40,7 @@ ext {
}
group 'org.sheinbergon'
-version '2.0.0'
+version '2.1.0'
repositories {
mavenCentral()
@@ -74,7 +74,7 @@ dependencies {
benchmarkImplementation "commons-io:commons-io:${benchmarkDepVersions.commonsIO}"
}
-sourceCompatibility = JavaVersion.VERSION_1_8
+sourceCompatibility = JavaVersion.VERSION_11
test {
@@ -105,7 +105,7 @@ jacoco {
}
checkstyle {
- toolVersion '9.3'
+ toolVersion '10.12.5'
configFile file("$rootDir/checkstyle.xml")
}
diff --git a/src/benchmark/java/org/sheinbergon/aac/AACEncodingBenchmark.java b/src/benchmark/java/org/sheinbergon/aac/AACEncodingBenchmark.java
index 2226a2e..8622e2a 100644
--- a/src/benchmark/java/org/sheinbergon/aac/AACEncodingBenchmark.java
+++ b/src/benchmark/java/org/sheinbergon/aac/AACEncodingBenchmark.java
@@ -25,7 +25,6 @@
import java.io.File;
import java.io.IOException;
import java.net.URL;
-import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -41,12 +40,10 @@ public class AACEncodingBenchmark {
private static final String AAC_ENC_COMMAND_TEMPLATE = AAC_ENC_BIN + " -r %d -t %d -a 1 %s %s";
@SuppressWarnings("MagicNumber")
- private static final Map AAC_ENCODING_PROFILE_BITRATE_FACTOR = new HashMap() {
- {
- put(AACEncodingProfile.AAC_LC, 1.5f);
- put(AACEncodingProfile.HE_AAC, 0.625f);
- }
- };
+ private static final Map AAC_ENCODING_PROFILE_BITRATE_FACTOR = Map.of(
+ AACEncodingProfile.AAC_LC, 1.5f,
+ AACEncodingProfile.HE_AAC, 0.625f
+ );
private static final AudioFileFormat.Type WAV = AudioFileFormat.Type.WAVE;
private static final String WAV_EXT = "." + WAV.getExtension();
@@ -60,14 +57,11 @@ public class AACEncodingBenchmark {
private static final String INPUT_RESOURCE_NAME = "africa-toto.wav";
- private static final Map ENCODING_PROFILES_TO_FILE_TYPES =
- new HashMap() {
- {
- put(AACEncodingProfile.AAC_LC, AACFileTypes.AAC_LC);
- put(AACEncodingProfile.HE_AAC, AACFileTypes.AAC_HE);
- put(AACEncodingProfile.HE_AAC_V2, AACFileTypes.AAC_HE_V2);
- }
- };
+ private static final Map ENCODING_PROFILES_TO_FILE_TYPES = Map.of(
+ AACEncodingProfile.AAC_LC, AACFileTypes.AAC_LC,
+ AACEncodingProfile.HE_AAC, AACFileTypes.AAC_HE,
+ AACEncodingProfile.HE_AAC_V2, AACFileTypes.AAC_HE_V2
+ );
/* This is manually set by each benchmark iteration. @Param annotations are not used
* in order to allow better visualization via JMH visualizer.
diff --git a/src/main/java/org/sheinbergon/aac/encoder/AACAudioEncoder.java b/src/main/java/org/sheinbergon/aac/encoder/AACAudioEncoder.java
index 3227d01..140a1b9 100644
--- a/src/main/java/org/sheinbergon/aac/encoder/AACAudioEncoder.java
+++ b/src/main/java/org/sheinbergon/aac/encoder/AACAudioEncoder.java
@@ -23,8 +23,6 @@
import javax.annotation.concurrent.NotThreadSafe;
import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -34,16 +32,13 @@
public final class AACAudioEncoder implements AutoCloseable {
@SuppressWarnings("MagicNumber")
- private static final Set SAMPLE_RATES = new HashSet() {
- {
- add(16000);
- add(22050);
- add(24000);
- add(32000);
- add(44100);
- add(48000);
- }
- };
+ private static final Set SAMPLE_RATES = Set.of(
+ 16000,
+ 22050,
+ 24000,
+ 32000,
+ 44100,
+ 48000);
// Some fdk-aac internal constants
private static final int PARAMETRIC_STEREO_CHANNEL_COUNT = 2;
@@ -107,13 +102,11 @@ public static class Builder {
* @see fdk-aac/libAACenc/include/aacenc_lib.h
*/
@SuppressWarnings("MagicNumber")
- private static final Map SAMPLES_TO_BIT_RATE_RATIO = new HashMap() {
- {
- put(AACEncodingProfile.AAC_LC, 1.5f);
- put(AACEncodingProfile.HE_AAC, 0.625f);
- put(AACEncodingProfile.HE_AAC_V2, 0.5f);
- }
- };
+ private static final Map SAMPLES_TO_BIT_RATE_RATIO = Map.of(
+ AACEncodingProfile.AAC_LC, 1.5f,
+ AACEncodingProfile.HE_AAC, 0.625f,
+ AACEncodingProfile.HE_AAC_V2, 0.5f
+ );
// Defaults
private boolean afterBurner = true;
diff --git a/src/main/java/org/sheinbergon/aac/sound/AACFileWriter.java b/src/main/java/org/sheinbergon/aac/sound/AACFileWriter.java
index 027ebd0..5ce5188 100644
--- a/src/main/java/org/sheinbergon/aac/sound/AACFileWriter.java
+++ b/src/main/java/org/sheinbergon/aac/sound/AACFileWriter.java
@@ -17,7 +17,6 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -29,14 +28,11 @@ public final class AACFileWriter extends AudioFileWriter {
private static final int INPUT_BUFFER_MULTIPLIER = 16;
- private static final Map FILE_TYPES_TO_ENCODING_PROFILES =
- new HashMap() {
- {
- put(AACFileTypes.AAC_LC, AACEncodingProfile.AAC_LC);
- put(AACFileTypes.AAC_HE, AACEncodingProfile.HE_AAC);
- put(AACFileTypes.AAC_HE_V2, AACEncodingProfile.HE_AAC_V2);
- }
- };
+ private static final Map FILE_TYPES_TO_ENCODING_PROFILES = Map.of(
+ AACFileTypes.AAC_LC, AACEncodingProfile.AAC_LC,
+ AACFileTypes.AAC_HE, AACEncodingProfile.HE_AAC,
+ AACFileTypes.AAC_HE_V2, AACEncodingProfile.HE_AAC_V2
+ );
@Override
public AudioFileFormat.Type[] getAudioFileTypes() {
diff --git a/src/test/java/org/sheinbergon/aac/MediaInfoSupport.java b/src/test/java/org/sheinbergon/aac/MediaInfoSupport.java
index 24f24a1..9e6ac85 100644
--- a/src/test/java/org/sheinbergon/aac/MediaInfoSupport.java
+++ b/src/test/java/org/sheinbergon/aac/MediaInfoSupport.java
@@ -6,8 +6,7 @@
import javax.sound.sampled.AudioFormat;
import java.io.File;
-import java.util.Arrays;
-import java.util.HashSet;
+import java.util.Set;
@SuppressWarnings("MissingJavadocMethod")
public final class MediaInfoSupport {
@@ -35,19 +34,19 @@ public static void assertAACOutput(
final AACEncodingProfile profile) {
boolean opened = false;
try {
- if (opened = MEDIA_INFO.open(aac)) {
+ if (!(opened = MEDIA_INFO.open(aac))) {
+ throw new IllegalStateException("Could not open AAC file " + aac + " via the mediainfo shared library");
+ } else {
Assertions
.assertEquals(EXPECTED_AUDIO_STREAMS_COUNT, MEDIA_INFO.streamCount(MediaInfoLibFacade.StreamKind.Audio));
Assertions.assertEquals(inputFormat.getSampleRate(),
Float.valueOf(getParam("SamplingRate")).floatValue());
Assertions.assertEquals(inputFormat.getChannels(), Integer.valueOf(getParam("Channel(s)")).intValue());
Assertions.assertEquals(AAC_MEDIAINFO_FORMAT, getParam("Format"));
- Assertions.assertTrue(new HashSet<>(Arrays.asList(
+ Assertions.assertTrue(Set.of(
getParam("Format_AdditionalFeatures"),
getParam("Format_Commercial")
- )).contains(profile.code()));
- } else {
- throw new IllegalStateException("Could not open AAC file " + aac + " via the mediainfo shared library");
+ ).contains(profile.code()));
}
} finally {
if (opened) {
diff --git a/src/test/java/org/sheinbergon/aac/sound/AACFileWriterTest.java b/src/test/java/org/sheinbergon/aac/sound/AACFileWriterTest.java
index f475686..d0646d0 100644
--- a/src/test/java/org/sheinbergon/aac/sound/AACFileWriterTest.java
+++ b/src/test/java/org/sheinbergon/aac/sound/AACFileWriterTest.java
@@ -48,7 +48,7 @@ public void supportedAudioInput() throws UnsupportedAudioFileException, IOExcept
@DisplayName("Unsupported audio input")
public void unsupportedAudioEncoding() throws IOException {
val aac = TestSupport.tempAACOutputFile();
- Assertions.assertThrows(UnsupportedAudioFileException.class, () -> {
+ Assertions.assertThrows(IllegalArgumentException.class, () -> {
try (val input = TestSupport.unsupported24bitWAVAudioInputStream()) {
writer.write(input, AACFileTypes.AAC_LC, aac);
} finally {