001package andesite.player.filter; 002 003import com.github.natanbc.lavadsp.karaoke.KaraokePcmAudioFilter; 004import com.sedmelluq.discord.lavaplayer.filter.AudioFilter; 005import com.sedmelluq.discord.lavaplayer.filter.FloatPcmAudioFilter; 006import com.sedmelluq.discord.lavaplayer.format.AudioDataFormat; 007import io.vertx.core.json.JsonObject; 008 009import javax.annotation.Nonnull; 010import javax.annotation.Nullable; 011 012public class KaraokeConfig implements Config { 013 private float level = 1f; 014 private float monoLevel = 1f; 015 private float filterBand = 220f; 016 private float filterWidth = 100f; 017 018 public float level() { 019 return level; 020 } 021 022 public void setLevel(float level) { 023 this.level = level; 024 } 025 026 public float monoLevel() { 027 return monoLevel; 028 } 029 030 public void setMonoLevel(float monoLevel) { 031 this.monoLevel = monoLevel; 032 } 033 034 public float filterBand() { 035 return filterBand; 036 } 037 038 public void setFilterBand(float filterBand) { 039 this.filterBand = filterBand; 040 } 041 042 public float filterWidth() { 043 return filterWidth; 044 } 045 046 public void setFilterWidth(float filterWidth) { 047 this.filterWidth = filterWidth; 048 } 049 050 @Nonnull 051 @Override 052 public String name() { 053 return "karaoke"; 054 } 055 056 @Override 057 public boolean enabled() { 058 return Config.isSet(level, 1f) || Config.isSet(monoLevel, 1f) || 059 Config.isSet(filterBand, 220f) || Config.isSet(filterWidth, 100f); 060 } 061 062 @Nullable 063 @Override 064 public AudioFilter create(AudioDataFormat format, FloatPcmAudioFilter output) { 065 return new KaraokePcmAudioFilter(output, format.channelCount, format.sampleRate) 066 .setLevel(level) 067 .setMonoLevel(monoLevel) 068 .setFilterBand(filterBand) 069 .setFilterWidth(filterWidth); 070 } 071 072 @Nonnull 073 @Override 074 public JsonObject encode() { 075 return new JsonObject() 076 .put("level", level) 077 .put("monoLevel", monoLevel) 078 .put("filterBand", filterBand) 079 .put("filterWidth", filterWidth); 080 } 081}