Skip to content

Commit c3428b7

Browse files
committed
Dropped Mac release and added Java 8 release
- To address issues with Macs, the Mac release was dropped entirely, as the Java 8 release will be easier for Mac users to set up.
1 parent 1033146 commit c3428b7

7 files changed

Lines changed: 55 additions & 33 deletions

File tree

Build.cmd

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ cd ..\..
3434

3535
if %DEV% == 1 goto Exit
3636

37+
echo Build Java %JV% package...
38+
set PLATFORM=Java_%JV%
39+
md "Release\%JV%\%PROJECT%_%PLATFORM%"
40+
md "Release\%JV%\%PROJECT%_%PLATFORM%\legal"
41+
(
42+
copy "Release\%JV%\%PROJECT%.jar" "Release\%JV%\%PROJECT%_%PLATFORM%"
43+
copy README.md "Release\%JV%\%PROJECT%_%PLATFORM%"
44+
copy LICENSE "Release\%JV%\%PROJECT%_%PLATFORM%"
45+
copy bin\std.rnnn "Release\%JV%\%PROJECT%_%PLATFORM%"
46+
xcopy docs\rnnoise /s "Release\%JV%\%PROJECT%_%PLATFORM%\legal\rennoise\"
47+
) > nul
48+
3749
echo Set Java version to build...
3850
set JV=21
3951

@@ -81,20 +93,6 @@ echo Build launcher for Linux...
8193
set GOOS=linux
8294
go build -ldflags="-s -w" -o "Release\%JV%\%PROJECT%_%PLATFORM%\%CNAME%" src\%PACKAGE%.go src\include_other.go
8395

84-
echo Build app image for Mac...
85-
set PLATFORM=Mac_amd64
86-
jlink.exe -p "Release\%JV%\%PROJECT%.jar;%JAVA_HOME%\jmods\mac" --add-modules %DEPS%,%PACKAGE% --compress=zip-9 --no-header-files --no-man-pages --strip-debug --output "Release\%JV%\%PROJECT%_%PLATFORM%"
87-
(
88-
copy README.md "Release\%JV%\%PROJECT%_%PLATFORM%"
89-
copy LICENSE "Release\%JV%\%PROJECT%_%PLATFORM%"
90-
copy bin\std.rnnn "Release\%JV%\%PROJECT%_%PLATFORM%\bin"
91-
xcopy docs\rnnoise /s "Release\%JV%\%PROJECT%_%PLATFORM%\legal\rennoise\"
92-
) > nul
93-
94-
echo Build launcher for Mac...
95-
set GOOS=darwin
96-
go build -ldflags="-s -w" -o "Release\%JV%\%PROJECT%_%PLATFORM%\%CNAME%.app" src\%PACKAGE%.go src\include_other.go
97-
9896
:Exit
9997

10098
echo Build complete

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ Features:
1919
**Download the precompiled executables for your target operating system to get started (only 64-bit platforms currently supported):**
2020
https://github.com/ScriptTiger/ACXMaster/releases
2121

22+
NOTE: It should be preferable to use the package compiled for your specific operating system, as it will be more optimized for your particular operating system and also be packaged with the latest LTS version of Java (OpenJDK), Java 21 as of writing this. However, if you do decide to use the Java 8 release, such as if you are a Mac user and don't have a package specifically for your operating system, you will need to make sure you have installed both [Java 8](https://www.java.com/download/) and FFmpeg. For Mac users, please refer to [FFmpeg's official documentation on how to install FFmpeg on Mac](https://trac.ffmpeg.org/wiki/CompilationGuide/macOS).
23+
2224
# More About ScriptTiger
2325

2426
For more ScriptTiger scripts and goodies, check out ScriptTiger's GitHub Pages website:

src/acxmaster/MainDialog.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,16 @@ public MainDialog() {
3232
final int H = 270;
3333
final int PAD = 5;
3434

35-
// Store current look and feel
35+
// Store look and feels
3636
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
37+
String systemLookAndFeel = UIManager.getSystemLookAndFeelClassName();
3738

3839
// JPanel properties
3940
setPreferredSize(new Dimension(W, H));
4041
setLayout(null);
4142

4243
// Read and load settings from acxmaster.conf file if it exists
43-
new Settings(false, mode, graphicEQ, options, targets, export);
44+
new Settings(false, mode, master, graphicEQ, options, targets, export);
4445

4546
// Set up menu bar
4647
JMenuBar jMenuBar = new JMenuBar();
@@ -60,6 +61,20 @@ public MainDialog() {
6061
});
6162
settings.add(modeItem);
6263

64+
// Set up FFmpeg menu item
65+
JMenuItem ffmpegItem = new JMenuItem("FFmpeg");
66+
ffmpegItem.addActionListener(e -> {
67+
JFileChooser ffmpegChooser = null;
68+
try {
69+
UIManager.setLookAndFeel(systemLookAndFeel);
70+
ffmpegChooser = new JFileChooser();
71+
UIManager.setLookAndFeel(lookAndFeel);
72+
} catch (Exception err) {};
73+
ffmpegChooser.showDialog(jFrame, "Choose FFmpeg executable...");
74+
master.setFFmpegPath(ffmpegChooser.getSelectedFile().getPath());
75+
});
76+
settings.add(ffmpegItem);
77+
6378
// Set up Targets menu item
6479
JMenuItem targetsItem = new JMenuItem("Targets");
6580
targetsItem.addActionListener(e -> new TargetsDialog(jFrame, targets));
@@ -81,7 +96,7 @@ public MainDialog() {
8196

8297
// Set up Save Settings menu item
8398
JMenuItem saveSettingsItem = new JMenuItem("Save Settings");
84-
saveSettingsItem.addActionListener(e -> new Settings(true, mode, graphicEQ, options, targets, export));
99+
saveSettingsItem.addActionListener(e -> new Settings(true, mode, master, graphicEQ, options, targets, export));
85100
settings.add(saveSettingsItem);
86101

87102
// Initialize buttons and text fields
@@ -119,7 +134,7 @@ public MainDialog() {
119134
chooseButton.addActionListener(e -> {
120135
JFileChooser fileChooser = null;
121136
try {
122-
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
137+
UIManager.setLookAndFeel(systemLookAndFeel);
123138
fileChooser = new JFileChooser();
124139
UIManager.setLookAndFeel(lookAndFeel);
125140
} catch (Exception err) {};
@@ -159,7 +174,7 @@ public MainDialog() {
159174
saveButton.addActionListener(e -> {
160175
JFileChooser saveChooser = null;
161176
try {
162-
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
177+
UIManager.setLookAndFeel(systemLookAndFeel);
163178
saveChooser = new JFileChooser();
164179
UIManager.setLookAndFeel(lookAndFeel);
165180
} catch (Exception err) {};
@@ -195,6 +210,7 @@ public MainDialog() {
195210
chooseButton.setEnabled(false);
196211
saveButton.setEnabled(false);
197212
modeItem.setEnabled(false);
213+
ffmpegItem.setEnabled(false);
198214
targetsItem.setEnabled(false);
199215
eqItem.setEnabled(false);
200216
exportItem.setEnabled(false);
@@ -238,12 +254,13 @@ public void run() {
238254
}
239255
if (mode.getMode()) {masterButton.setText("Mastering complete!");
240256
} else {masterButton.setText("Checking complete!");}
241-
} else {masterButton.setText("Ensure FFmpeg is installed in your path!");}
257+
} else {masterButton.setText("Ensure the path to FFmpeg is set correctly!");}
242258
fileChooserTextField.setText("");
243259
saveChooserTextField.setText("");
244260
saveButton.setText("Save...");
245261
chooseButton.setEnabled(true);
246262
modeItem.setEnabled(true);
263+
ffmpegItem.setEnabled(true);
247264
if (mode.getMode()) {
248265
targetsItem.setEnabled(true);
249266
eqItem.setEnabled(true);

src/acxmaster/Master.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Master {
1717
private final Options options = new Options();
1818

1919
// Files
20+
private static String ffmpegPath = "ffmpeg";
2021
private static File[] files;
2122
private static Boolean isSingle;
2223
private static File saveFile;
@@ -40,6 +41,7 @@ class Master {
4041
public Options getOptions() {return options;}
4142

4243
// Files
44+
public String getFFmpegPath() {return ffmpegPath;}
4345
public File[] getFiles() {return files;}
4446
public int getFileCount() {return files.length;}
4547
public Boolean isSingle() {return isSingle;}
@@ -59,6 +61,7 @@ private String getChain() {
5961
//////////
6062

6163
// Files
64+
public void setFFmpegPath(String ffmpegPath) {this.ffmpegPath = ffmpegPath;}
6265
public void setFiles(File[] files) {
6366
this.files = files;
6467
chain = "";
@@ -75,8 +78,7 @@ public void setFiles(File[] files) {
7578
// Function to wrap FFmpeg
7679
private void ffmpeg(Boolean post, String[] ffmpeg) {
7780
try {
78-
Runtime runtime = Runtime.getRuntime();
79-
Process process = runtime.exec(ffmpeg);
81+
Process process = new ProcessBuilder(ffmpeg).start();
8082
InputStream stderr = process.getErrorStream();
8183
InputStreamReader stderrReader = new InputStreamReader(stderr);
8284
BufferedReader stderrBufferedReader = new BufferedReader(stderrReader);
@@ -175,9 +177,8 @@ private void ffmpeg(Boolean post, String[] ffmpeg) {
175177
public Boolean ffCheck() {
176178
Boolean err = true;
177179
try {
178-
Runtime runtime = Runtime.getRuntime();
179-
String[] ffmpeg = {"ffmpeg", "-version"};
180-
Process process = runtime.exec(ffmpeg);
180+
String[] ffmpeg = {ffmpegPath, "-version"};
181+
Process process = new ProcessBuilder(ffmpeg).start();
181182
process.waitFor();
182183
} catch (Exception exception) {
183184
new ErrorDialog(exception.getMessage());
@@ -189,24 +190,24 @@ public Boolean ffCheck() {
189190
// Function to analyze files
190191
public void analyze(File file) {
191192
audioInfo = new AudioInfo(file, saveFile, isSingle, export.getExtension());
192-
String[] analyze = {"ffmpeg", "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"asplit[loudnorm],astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level;[loudnorm]loudnorm=print_format=summary", "-f", "null", ""};
193+
String[] analyze = {ffmpegPath, "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"asplit[loudnorm],astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level;[loudnorm]loudnorm=print_format=summary", "-f", "null", ""};
193194
ffmpeg(false, analyze);
194195
}
195196

196197
// Function check files
197198
public void check(File file) {
198199
audioInfo = new AudioInfo(file);
199-
String[] preCheck = {"ffmpeg", "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-frames:a", "0", "-f", "null", ""};
200+
String[] preCheck = {ffmpegPath, "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-frames:a", "0", "-f", "null", ""};
200201
ffmpeg(false, preCheck);
201202
String end = String.valueOf(audioInfo.getRoughDuration()-1);
202-
String[] check = {"ffmpeg", "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]asplit=3[end][astats],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level;[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level", "-f", "null", ""};
203+
String[] check = {ffmpegPath, "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]asplit=3[end][astats],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level;[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level", "-f", "null", ""};
203204
ffmpeg(true, check);
204205
}
205206

206207
// Function to predict problems
207208
public void predict(File file) {
208209
String end = String.valueOf(audioInfo.getRoughDuration()-1);
209-
String[] predict = {"ffmpeg", "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"loudnorm=i="+String.valueOf(targets.getI())+":lra="+String.valueOf(targets.getLRA())+":tp="+String.valueOf(targets.getTP())+":measured_I="+String.valueOf(audioInfo.getII())+":measured_LRA="+String.valueOf(audioInfo.getILRA())+":measured_tp="+String.valueOf(audioInfo.getITP())+":measured_thresh="+String.valueOf(audioInfo.getIT())+":offset="+String.valueOf(audioInfo.getTO())+":print_format=summary"+options.getStereoChain()+",asplit=3[end][astats],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level;[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level", "-f", "null", ""};
210+
String[] predict = {ffmpegPath, "-hide_banner", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"loudnorm=i="+String.valueOf(targets.getI())+":lra="+String.valueOf(targets.getLRA())+":tp="+String.valueOf(targets.getTP())+":measured_I="+String.valueOf(audioInfo.getII())+":measured_LRA="+String.valueOf(audioInfo.getILRA())+":measured_tp="+String.valueOf(audioInfo.getITP())+":measured_thresh="+String.valueOf(audioInfo.getIT())+":offset="+String.valueOf(audioInfo.getTO())+":print_format=summary"+options.getStereoChain()+",asplit=3[end][astats],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level;[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level", "-f", "null", ""};
210211
ffmpeg(true, predict);
211212
}
212213

@@ -216,7 +217,7 @@ public void master(File file) {
216217
int sampleRate;
217218
if (export.getSampleRate() == 0) {sampleRate = audioInfo.getSampleRate();
218219
} else {sampleRate = export.getSampleRate();}
219-
String[] master = {"ffmpeg", "-hide_banner", "-y", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"loudnorm=i="+String.valueOf(targets.getI())+":lra="+String.valueOf(targets.getLRA())+":tp="+String.valueOf(targets.getTP())+":measured_I="+String.valueOf(audioInfo.getII())+":measured_LRA="+String.valueOf(audioInfo.getILRA())+":measured_tp="+String.valueOf(audioInfo.getITP())+":measured_thresh="+String.valueOf(audioInfo.getIT())+":offset="+String.valueOf(audioInfo.getTO())+":print_format=summary"+options.getStereoChain()+",asplit=4[end][astats][master],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level[null0];[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level[null1]", "-map", "[master]", "-ar", String.valueOf(sampleRate), "-ab", String.valueOf(export.getBitRate()), "-c:a", export.getCodec(), "-sample_fmt", export.getBitDepth(), "-compression_level", String.valueOf(export.getCompressionLevel()), audioInfo.getSaveFileString(), "-map", "[null0]", "-map", "[null1]", "-f", "null", ""};
220+
String[] master = {ffmpegPath, "-hide_banner", "-y", "-i", file.getPath(), "-vn", "-sn", "-dn", "-filter_complex", "[0:a]aformat=cl=mono,"+getChain()+"loudnorm=i="+String.valueOf(targets.getI())+":lra="+String.valueOf(targets.getLRA())+":tp="+String.valueOf(targets.getTP())+":measured_I="+String.valueOf(audioInfo.getII())+":measured_LRA="+String.valueOf(audioInfo.getILRA())+":measured_tp="+String.valueOf(audioInfo.getITP())+":measured_thresh="+String.valueOf(audioInfo.getIT())+":offset="+String.valueOf(audioInfo.getTO())+":print_format=summary"+options.getStereoChain()+",asplit=4[end][astats][master],atrim=end=1[start];[end]atrim=start="+end+",[start]concat=2:0:1,astats=measure_perchannel=none:measure_overall=RMS_level[null0];[astats]astats=measure_perchannel=none:measure_overall=Noise_floor+Number_of_samples+Peak_level+RMS_level[null1]", "-map", "[master]", "-ar", String.valueOf(sampleRate), "-ab", String.valueOf(export.getBitRate()), "-c:a", export.getCodec(), "-sample_fmt", export.getBitDepth(), "-compression_level", String.valueOf(export.getCompressionLevel()), audioInfo.getSaveFileString(), "-map", "[null0]", "-map", "[null1]", "-f", "null", ""};
220221
ffmpeg(true, master);
221222
}
222223
}

src/acxmaster/Settings.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55

66
// Settings class
77
class Settings {
8-
public Settings(Boolean save, Mode mode, GraphicEQ graphicEQ, Options options, Targets targets, Export export) {
8+
public Settings(Boolean save, Mode mode, Master master, GraphicEQ graphicEQ, Options options, Targets targets, Export export) {
99
try {
1010
if (save) {
1111
FileWriter writer = new FileWriter("acxmaster.conf");
1212
writer.write(
1313
"mode="+String.valueOf(mode.getMode())+"\n"+
14+
"ffmpeg="+master.getFFmpegPath()+"\n"+
1415
"1b="+graphicEQ.getOneBand()+"\n"+
1516
"2b="+graphicEQ.getTwoBand()+"\n"+
1617
"3b="+graphicEQ.getThreeBand()+"\n"+
@@ -56,6 +57,9 @@ public Settings(Boolean save, Mode mode, GraphicEQ graphicEQ, Options options, T
5657
case "mode":
5758
try {mode.setMode(Boolean.parseBoolean(tokens[1]));} catch (Exception exception) {}
5859
break;
60+
case "ffmpeg":
61+
master.setFFmpegPath(tokens[1]);
62+
break;
5963
case "1b":
6064
graphicEQ.setOneBand(tokens[1]);
6165
break;

src/acxmaster/Targets.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class Targets {
99

1010
private static float i = -20;
1111
private static float lra = 7;
12-
private static float tp = -3;
12+
private static float tp = (float)-3.1;
1313

1414
//////////
1515
// Getters

src/acxmaster/TargetsDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public TargetsDialog(JFrame jFrame, Targets targets) {
5656
defaults.addActionListener(e -> {
5757
iTextField.setText("-20.0");
5858
lraTextField.setText("7.0");
59-
tpTextField.setText("-3.0");
59+
tpTextField.setText("-3.1");
6060
});
6161
jDialog.add(defaults);
6262

0 commit comments

Comments
 (0)