首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIDI仪器不适用于javax.sound.midi.MidiChannel

MIDI仪器不适用于javax.sound.midi.MidiChannel
EN

Stack Overflow用户
提问于 2019-03-01 13:45:32
回答 2查看 355关注 0票数 1

我目前正在申请使用不同的乐器演奏MIDI。我使用的javax.sound.midi.MidiChannel和它的工作与吉他(索引25)和低音(索引32)。现在,我想增加一个曼陀林频道;根据synthesizer.getDefaultSoundbank().getInstruments(),,这是指数215。但是使用下面的代码,曼陀林频道的程序设置为25 (与吉他频道相同)。根据文档,在programChange()方法中只允许0到127之间的值.有什么想法,我可以配置我的渠道与曼陀林作为工具工作吗?

代码语言:javascript
复制
        Synthesizer synthesizer = MidiSystem.getSynthesizer();
        synthesizer.open();

        final Instrument[] instruments = synthesizer.getDefaultSoundbank().getInstruments();

        MidiChannel guitarChannel = synthesizer.getChannels()[0];
        guitarChannel.programChange(instruments[25].getPatch().getProgram());

        MidiChannel bassChannel = synthesizer.getChannels()[1];
        bassChannel.programChange(instruments[32].getPatch().getProgram());

        MidiChannel mandolinChannel = synthesizer.getChannels()[2];
        mandolinChannel.programChange(instruments[215].getPatch().getProgram());

        mandolinChannel.noteOn(note, 100);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-01 14:03:56

理论上,您需要使用补丁的.getBank()方法,并向.programChange()提供银行号和程序号。

实际上,当我试图复制您的问题时,默认的com.sun.media.sound.SoftSynthesizer似乎根本不支持银行的更改。

票数 1
EN

Stack Overflow用户

发布于 2019-03-01 13:59:17

在通用MIDI中只有128个仪器程序,所以您将无法使用仪器215,这可能并不存在。

维基百科上有一张所有可用的midi工具的清单,你也许能找到一些与你在那里寻找的东西非常接近的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54945929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档