1 package camidion.chordhelper.mididevice;
3 import javax.sound.midi.MidiDevice;
4 import javax.sound.midi.MidiSystem;
5 import javax.sound.midi.MidiUnavailableException;
6 import javax.sound.midi.Receiver;
7 import javax.sound.midi.Transmitter;
8 import javax.swing.tree.TreePath;
11 * 1個の{@link MidiDevice}を表すモデル
13 public class MidiDeviceModel {
15 * {@link javax.swing.JTree}で使用するツリー表示のパスを返します。
18 public TreePath getTreePath() { return treePath; }
19 private TreePath treePath;
21 * このリストのMIDIデバイスの入出力タイプを返します。
22 * @return このリストのMIDIデバイスの入出力タイプ
24 public MidiDeviceInOutType getInOutType() { return ioType; }
25 private MidiDeviceInOutType ioType;
30 public MidiDevice getMidiDevice() { return device; }
31 protected MidiDevice device;
36 public String toString() { return device.getDeviceInfo().toString(); }
38 * {@link Transmitter} のリストモデルを返します。サポートしていない場合はnullを返します。
39 * @return リストモデルまたはnull
41 public TransmitterListModel getTransmitterListModel() { return txListModel; }
42 private TransmitterListModel txListModel;
44 * {@link Receiver} のリストモデルを返します。サポートしていない場合はnullを返します。
45 * @return リストモデルまたはnull
47 public ReceiverListModel getReceiverListModel() { return rxListModel; }
48 private ReceiverListModel rxListModel;
50 * このMIDIデバイスモデルを収容しているツリーモデルを返します。
52 public MidiDeviceTreeModel getDeviceTreeModel() { return deviceTreeModel; }
53 protected MidiDeviceTreeModel deviceTreeModel;
55 * MIDIデバイス情報からMIDIデバイスモデルを構築します。
57 * @param deviceInfo 対象MIDIデバイス情報
58 * @param deviceTreeModel 収容先のMIDIデバイスツリーモデル
59 * @throws MidiUnavailableException {@link MidiSystem#getMidiDevice(MidiDevice.Info)}からの例外
61 public MidiDeviceModel(MidiDevice.Info deviceInfo, MidiDeviceTreeModel deviceTreeModel) throws MidiUnavailableException {
62 this(MidiSystem.getMidiDevice(deviceInfo), deviceTreeModel);
65 * MIDIデバイスからモデルを構築します。
67 * @param device 対象MIDIデバイス
68 * @param deviceTreeModel このモデルの親ツリー
70 public MidiDeviceModel(MidiDevice device, MidiDeviceTreeModel deviceTreeModel) {
71 this.deviceTreeModel = deviceTreeModel;
73 if( device.getMaxTransmitters() != 0 ) txListModel = new TransmitterListModel(this);
74 if( device.getMaxReceivers() != 0 ) rxListModel = new ReceiverListModel(this);
75 ioType = MidiDeviceInOutType.getValueFor(device);
76 treePath = new TreePath(new Object[] {deviceTreeModel, ioType ,this});
80 * MIDIデバイスを {@link MidiDevice#open()} で開き、
81 * レシーバをサポートしている場合は {@link MidiDevice#getReceiver()} でレシーバを1個開きます。
83 * @throws MidiUnavailableException リソースの制約のためにデバイス開けない、
84 * またはレシーバを使用できない場合にスローされる。
86 public void open() throws MidiUnavailableException {
88 if( rxListModel != null ) rxListModel.openSingleReceiver();
91 * このMIDIデバイスを {@link MidiDevice#close()} で閉じます。
92 * このMIDIデバイスの{@link Receiver}に接続している他デバイスの{@link Transmitter}があれば、
96 if( rxListModel != null ) rxListModel.closeTransmitters();