diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java index 2a5446e..b1b56d4 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java @@ -44,6 +44,14 @@ public class FFmpegCommandBuilder implements Visitor { audioCommands.add(p.getValue()); } + @Override + public void visit(AudioCrystalizer p, MediaSession input) { + if (discardAudio) return; + final String value = p.getValue(); + if (value.isEmpty() || value.equals("0")) return; + audioFilters.add("crystalizer=" + value); + } + @Override public void visit(AudioEffect p, MediaSession input) { if (discardAudio) return; diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/Visitor.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/Visitor.java index 47bb6cc..1f07033 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/Visitor.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/Visitor.java @@ -5,6 +5,7 @@ import com.annimon.ffmpegbot.parameters.*; public interface Visitor { void visit(DisableAudio p, I input); void visit(AudioBitrate p, I input); + void visit(AudioCrystalizer p, I input); void visit(AudioEffect p, I input); void visit(AudioPitch p, I input); void visit(AudioVolume p, I input); diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/AudioCrystalizer.java b/src/main/java/com/annimon/ffmpegbot/parameters/AudioCrystalizer.java new file mode 100644 index 0000000..5f779a6 --- /dev/null +++ b/src/main/java/com/annimon/ffmpegbot/parameters/AudioCrystalizer.java @@ -0,0 +1,24 @@ +package com.annimon.ffmpegbot.parameters; + +import com.annimon.ffmpegbot.commands.ffmpeg.Visitor; +import java.util.List; + +public class AudioCrystalizer extends StringParameter { + private static final List VALUES = List.of( + "-8", "-4", "-2", "0", "2", "4", "8" + ); + + public AudioCrystalizer() { + super("crystalizer", "Audio crystalizer", VALUES, "0"); + } + + @Override + public int defaultColumnsCount() { + return 4; + } + + @Override + public void accept(Visitor visitor, I input) { + visitor.visit(this, input); + } +} diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/BooleanParameter.java b/src/main/java/com/annimon/ffmpegbot/parameters/BooleanParameter.java index fd960db..42b19e5 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/BooleanParameter.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/BooleanParameter.java @@ -3,13 +3,13 @@ package com.annimon.ffmpegbot.parameters; import java.util.List; public abstract class BooleanParameter extends Parameter { - public BooleanParameter(String id, String name, Boolean value) { + protected BooleanParameter(String id, String name, Boolean value) { super(id, name, List.of(false, true), value); } @Override public String describeValue(Boolean value) { - if (value) { + if (value != null && value) { return "ON"; } else { return "OFF"; diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/StringParameter.java b/src/main/java/com/annimon/ffmpegbot/parameters/StringParameter.java index a7fde23..f160dba 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/StringParameter.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/StringParameter.java @@ -3,7 +3,7 @@ package com.annimon.ffmpegbot.parameters; import java.util.List; public abstract class StringParameter extends Parameter { - public StringParameter(String id, String name, List possibleValues, String value) { + protected StringParameter(String id, String name, List possibleValues, String value) { super(id, name, possibleValues, value); } } diff --git a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java index 81eda70..88c94ae 100644 --- a/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java +++ b/src/main/java/com/annimon/ffmpegbot/parameters/resolvers/AudioResolver.java @@ -20,6 +20,7 @@ public class AudioResolver implements ParametersResolver { disableAudioParam(parameters, fileInfo.fileType()); parameters.addAll(List.of( new AudioBitrate(), + new AudioCrystalizer(), new AudioEffect(), new AudioPitch(), new AudioVolume()