【发布时间】:2019-04-13 04:04:57
【问题描述】:
我使用下面的代码来播放一个midi文件,但是我找不到使用的乐器列表:
try
{
Sequence sequence=MidiSystem.getSequence(file); // From file
int trackNumber=0;
for (Track track : sequence.getTracks())
{
trackNumber++;
System.out.println("Track "+trackNumber+": size = "+track.size());
System.out.println();
for (int i=0;i<track.size();i++)
{
MidiEvent event=track.get(i);
System.out.print("@"+event.getTick()+" ");
if (message instanceof ShortMessage)
{
ShortMessage sm=(ShortMessage)message;
System.out.print("Channel: "+sm.getChannel()+" "+new String(sm.getMessage())+" | ");
}
else Out("Other message: "+message.getClass());
}
System.out.println();
}
Sequencer sequencer=MidiSystem.getSequencer();
sequencer.open();
sequencer.setSequence(sequence);
sequencer.start();
}
catch (Exception e) { e.printStackTrace(); }
我做了一些搜索,有类似的问题,但没有一个有直接的答案,我只想列出文件中使用的乐器,例如钢琴,鼓......我知道信息隐藏在消息中[也许被称为“程序”?! ],但我就是找不到。
【问题讨论】:
-
试试
getCommand()。 -
你检查过
getSoundbank()返回的Soundbank对象吗?它有一个Instrument对象列表。 -
对于缓存通道,getCommand() 将返回 192,144,128,144,128 ...
-
我知道 Soundbank 有一个可用乐器列表,但我怎么知道在我的特定声音文件中使用了哪些乐器?
标签: java instruments midi