You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何获取所有MIDI设备列表?现有代码无法运行求解决方案

Java获取所有MIDI设备的实现方案

原代码核心问题

  • 类型误用:错误将静态工具类MidiSystem的实例强转为MidiDevice、List<MidiDevice>类型,二者没有继承关系,运行时必然抛出类型转换异常
  • 多余实现:不需要自定义实现MidiDeviceProvider、MidiDeviceReceiver接口,javax.sound.midi包已经封装了设备枚举的原生能力
  • 逻辑错误:获取设备列表不需要实例化接收者,直接调用MidiSystem的静态方法即可

正确实现代码

package com.example.cmmp.midi;

import javax.sound.midi.MidiDevice;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequencer;
import java.util.ArrayList;
import java.util.List;

public class MidiDeviceReceiver {

    public static Sequencer getSequencer() throws MidiUnavailableException {
        return MidiSystem.getSequencer();
    }

    public static List<MidiDevice> getMidiDevices() {
        List<MidiDevice> deviceList = new ArrayList<>();
        // 直接获取所有已识别的MIDI设备信息
        MidiDevice.Info[] allDeviceInfo = MidiSystem.getMidiDeviceInfo();
        
        for (MidiDevice.Info info : allDeviceInfo) {
            try {
                MidiDevice device = MidiSystem.getMidiDevice(info);
                deviceList.add(device);
                // 如果需要使用设备可以在这里调用device.open(),用完记得调用close()释放资源
            } catch (MidiUnavailableException e) {
                // 设备被占用时按需处理,这里仅打印日志
                e.printStackTrace();
            }
        }
        return deviceList;
    }
}

遍历设备示例

拿到返回的List<MidiDevice>后即可遍历读取设备详情:

public static void main(String[] args) {
    List<MidiDevice> devices = getMidiDevices();
    for (MidiDevice device : devices) {
        MidiDevice.Info info = device.getDeviceInfo();
        System.out.println("设备名称:" + info.getName());
        System.out.println("设备厂商:" + info.getVendor());
        System.out.println("设备描述:" + info.getDescription());
        System.out.println("---------------");
    }
}

内容的提问来源于stack exchange,提问作者ColurMine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:54:04