LoginSignup
3
3

More than 5 years have passed since last update.

JavaFXのMediaPlayerでイコライザ

Posted at

JavaFXを使ってミュージックプレイヤーを作った際にイコライザを試したのでメモ

開発環境

  • Java (1.8.0_40)
  • JavaFX

音楽ファイルの読み込み

まずは音楽ファイルを読み込む。
サポートされているのはWAV, MP3, MP4

File file = new File("FilePath");
Media media = new Media(file.toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(media);

イコライザの設定

JavaFXのMediaPlayerではデフォルトでイコライザが実装されている。
MediaPlayer#getAudioEqualizerでMediaPlayerに関連付けられているAudioEqualizerを取得できる。
AudioEqualizer#getBandsで設定されているイコライザのリストを取得できる。

AudioEqualizer aq = mediaPlayer.getAudioEqualizer();
ObservableList<EqualizerBand> bands = aq.getBands();

このObervableListにはデフォルトで10のバンドセットが用意されている。
公式のAPIドキュメントより以下がデフォルトの設定。
それぞれのバンドセットに対するゲインはデフォルトで0dB。

バンド・インデックス 中心周波数(Hz) 帯域幅(Hz)
0 32 19
1 64 39
2 125 78
3 250 156
4 500 312
5 1000 625
6 2000 1250
7 4000 2500
8 8000 5000
9 16000 10000

例えば500Hz帯のゲインを10dBに設定したい場合は

bands.get(4).setGain(10);

このバンドセットはデフォルトなので、これに従う必要はない。
独自のバンドセットを定義することも可能。
例えば、3kHzを中心に1kHzの帯域幅で10dBのゲインを持つバンドセットのみを設定する場合

bands.removeAll(bands);
bands.add(new EqualizerBand(3000, 1000, 10));

一度ObservableListの中身を削除した後、新しいEqualizerBandを追加することで可能。

GUIとの連携

変更した値はリアルタイムに適応されるので、
FXMLでスライダーを設置して曲を再生しながらスライダーによる変更などもできる。

main.fxml
<Slider fx:id="slider32" max="12.0" min="-24.0" orientation="VERTICAL" />

設定できるゲインの値が-24dBから12dBまでなので、上記のようにスライダーを設置して

Main.java
@FXML
private Slider slider32;

@Override
public void initialize(URL location, ResourceBundle resources) {
  slider32.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent event) {
      if (event.getEventType() == MouseEvent.MOUSE_RELEASED || event.getEventType() == MouseEvent.MOUSE_DRAGGED) {
        AudioEqualizer aq = mediaPlayer.getAudioEqualizer();
        ObservableList<EqualizerBand> bands = aq.getBands();
        bands.get(0).setGain(slider32.getValue());
      }
    }
  });
}

スライダーでマウスイベントが発生したらスライダーの値をゲインに設定することで、
音楽プレイヤーのようにイコライザーの設定ができるようになる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3