首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java软合成器16路以上的MIDI输出

Java软合成器16路以上的MIDI输出
EN

Stack Overflow用户
提问于 2022-05-29 16:40:25
回答 1查看 124关注 0票数 -1

MIDI频道管理诸如声音、摇摄、音量等参数;因此,对于合奏音乐,每一个真正的乐器都应该由自己的一个频道来表示。如果涉及超过15种非打击乐器,一根MIDI线是不够的.

我编写的Java软件是为大多数将使用Java内置软件合成器的用户准备的。我想允许使用16种以上的乐器。根据我所知道的现有API,我需要几个独立工作的MidiReceiver对象。

第一次尝试:软合成器断言"getMaxReceivers() == -1",即无限的,所以我创建了我需要的数量。不幸的是,他们都使用相同的渠道-失败。

第二次尝试:为同一个Info对象创建两个MidiDevice对象,为每个对象创建一个MidiReceiver。当我试图打开第二个,我得到一个例外,说没有更多的音频线路是可用的。

第三次尝试:与第二次相同,但对于打开设备,我使用了SoftSynthesizer类的一种特殊方法,它允许我用给定的音频行打开它;我使用的是同一行。无例外抛出-但混乱的音频输出。因为这两个对象彼此不了解,所以它们不能优雅地添加它们的输出。又失败了。

问题:

我有没有漏掉什么东西?

( B)如果没有,有这种联系和声誉的人会不会向Java接口和SoftSynthesizer的作者发出警报?我的建议是最小侵入性:应该赋予(软)合成器对象一个额外的方法,比如"MidiDevice getSubdevice()",getReceiver()可以根据需要提供新的通道。

(重新编辑时:是否普通的getReceiver()方法实际上就是为了达到这个目的,就像我在上面的“第一次尝试”中所描述的那样,并且仅仅是被SoftSynthesizer的"Gervill“简化了一下?如果是这样的话,格维尔应该被告知,然而,谁是不容易找到谷歌搜索。你可能知道如何联系他/她/他们。

代码语言:javascript
复制
public boolean GetTwoIndependenttReceivers (Receiver [] inhereplease)
{
    for (MidiDevice.Info info : MidiSystem.getMidiDeviceInfo ()) try
    {
        MidiDevice device = MidiSystem.getMidiDevice (info);
        if (   device instanceof Synthesizer
            && (   device.getMaxReceivers () < 0
                || device.getMaxReceivers () >= 2)) try
        {
            device.open ();
            inhereplease [0] = device.getReceiver ();
            inhereplease [1] = device.getReceiver ();
            // will be distinct as objects, but with Gervill not independent
            return true;
        } catch (Exception ex) {}
    } catch (Exception ex) {}
    return false;
}

注意,例如,自由软件MuseScore用自己的软件合成器来管理这个问题。它输出带有"MIDI端口“MIDI消息的MIDI文件,就像MIDI标准所期望的那样,并优雅地导入它们。内置Java排序器只是忽略了这些端口消息,因此不正确地播放文件。这可能是攻击问题的额外诱因:每个端口都有一个接收对象。

EN

回答 1

Stack Overflow用户

发布于 2022-05-29 20:58:18

MIDI标准只支持16个通道。句号。

所以,任何你想要做的来控制比这更多的通道都超出了正常的MIDI规范。常规的Windows合成器支持它支持的东西,并且不会改变。如果需要额外的功能,则必须在应用程序中使用不同的合成器。

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

https://stackoverflow.com/questions/72425508

复制
相关文章

相似问题

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