我正在尝试在 Scala SBT 管理的项目中使用 Java Sound API。
这是一个播放音符的玩具应用程序。
import javax.sound.midi._
object MyMain extends App {
val infos = MidiSystem.getMidiDeviceInfo()
println( "[DEBUG] midi devices found: " + infos.length )
val myMsg = new ShortMessage;
// Start playing the note Middle C (60),
// moderately loud (velocity = 93).
myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
val timeStamp = -1;
val rcvr : Receiver = MidiSystem.getReceiver();
rcvr.send(myMsg, timeStamp);
readChar() // give time to play note
}
当我run
在 SBT 中执行时,我得到了javax.sound.midi.MidiUnavailableException
因为 infos.length
返回 0。也就是说,当我在 IntelliJ 中运行应用程序时,找到了两个设备并且音符播放得很好。
SBT 需要知道什么才能使其运行?有什么需要添加到类路径中的吗?我注意到 IntelliJ 将一大堆 jar 附加到执行命令(但是,删除来自 jdk/jre/lib/ 的 jar 没有任何效果,而其他的是 scala 相关或 IntelliJ 相关)。