Java 8 と Java 10 での MixerInfo の並び順の違い

macOSJDKのインストールにsdkmanを使っての話ですが、Java 8では声を出してくれていたコードが、Java 10で実行すると喋らないなと悩んでいたのですが、 単純にAudioSystem.getMixerInfo()が返す順序が変わっていただけということだった。

確認するためのコードは、こんな感じ

package jp.pigumer.javasound

import javax.sound.sampled.AudioSystem

object MixerInfoList extends App {

  val info = AudioSystem.getMixerInfo()
  info.zipWithIndex.foreach {
    case (mi, index) ⇒
      println(s"$index: ${mi.getName}")
  }
}

Java 8(Oracle JDK)

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
0: Default Audio Device
1: Built-in Microphone
2: Built-in Output
3: Port Built-in Microphone
4: Port Built-in Output

Java 10(Oracle JDK)

java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
0: Port Built-in Microphone
1: Port Built-in Output
2: Default Audio Device
3: Built-in Microphone
4: Built-in Output

Java 10(OpenJDK)

openjdk version "10" 2018-03-20
OpenJDK Runtime Environment 18.3 (build 10+46)
OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)
0: Port Built-in Microphone
1: Port Built-in Output
2: Default Audio Device
3: Built-in Microphone
4: Built-in Output