问题标签 [javax.sound.midi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
472 浏览

java - 发送多条 MIDI 信息

我希望能够独立发送多个 MIDI 消息。但问题是我必须等到上一个笔记结束。我必须为我所有的声音创建一个线程吗?假设我希望能够同时演奏 10 个音符。那么我必须创建10个线程?

我通过javax.sound.midi

0 投票
2 回答
1309 浏览

java - 使用 Java 发送 sysex 消息

我想向 MIDI 端口发送一条 Sysex 消息。不幸的是,当我发送它时根本没有任何回应。发送常规MIDIShortMessage消息(ShortMessageSysexMessage

为什么端口没有收到消息或为什么没有发送?

0 投票
1 回答
177 浏览

java - 在创建 JFrame 之前打开 MIDI Synth 会导致 JVM 挂起

在使用 Swing 接口向 MIDI 编写程序时,我遇到了挂起,这kill -9是必需的。通过运行以下程序,它是 100% 可重现的java MidiSwingProblem hang0

我假设 中存在死锁hang0(),这是我的错,而不是 J2SE 中的错误。(我已经在 OS X 上验证了 Java 1.7 和 1.8 的行为。)

我有三个问题:

  1. 提示一下,我也尝试将其写为hang1(),但这没有用。为什么SwingUtilities.invokeLater()不足?
  2. 如果我重新排列线路(参见solution0())以synth.open() 在 之后 new JFrame()调用,那么它可以工作!为什么?是solution0()正确的,还是我只是走运?对我来说,这似乎是一个脆弱的解决方案。
  3. 为了更好地衡量,我还写了solution1()and solution2(),两者似乎都没有挂起。这些版本是比 更正确solution0(),还是矫枉过正?将synth对象放在单独的线程中会使程序的其余部分难以使用它。
0 投票
1 回答
92 浏览

java - 在 Java 中将 InputStream 传递给 MidiSystem 的 Soundbank 时出现 NullPointerException

我正在尝试通过从文件中读取并将其传递给getSoundbank函数来创建音库。MidiSystem.为此,我必须读取文件,InputStream因为我尝试了以下技术但失败了。

第一种技术——使用读取文件FileInputStream并将其传递给上述函数,如下所示:

它失败了mark/reset exception

然后,我尝试了这个线程中提到的技术: java.io.IOException: mark/reset not supported Java Audio Input Stream / Buffered Input Stream

我面临着技术java.io.IOException: Resetting to invalid mark异常和url 技术异常。是否有任何其他技术可以克服上述异常?BufferedInputStreamjava.lang.NullPointerException

0 投票
2 回答
155 浏览

java - 在 midi 序列中达到某个刻度时如何通知我?

我正在使用 javax.sound.midi.Sequencer 播放序列,当达到某个刻度时,我需要跳转到序列的另一部分。想象一个循环,当我们到达刻度数“y”时,我们跳回到刻度数“x”。但我没有做一个循环,所以内置的循环方法对我不起作用。

目前我正在使用一个摆动计时器,它每毫秒触发一次 getTickPosition() 直到我达到我想要的滴答声,但这给了我稍微不一致的结果,我感觉它正在使用大量 CPU 来完成一个相当简单的任务。

我希望有一个事件侦听器可以在音序器处理某个刻度但没有 AFAIK 时通知我。任何建议将不胜感激。

0 投票
1 回答
270 浏览

java - 如何接收 MIDI 批量调音转储请求的响应?

我正在使用MIDI 调音标准将调音从音乐会音高 A4 = 440 Hz 更改为任意调音频率。它在我的装有 Windows 7 和 JDK 1.8.0 的机器上运行良好。但我想先检查一下,如果调整标准可用。

打印出来Gervill,如Gervills 主页所述,它支持调优标准。

Gervill 合成器是所有平台(Windows、Linux、Mac)上当前 JRE 的一部分吗?如果是的话,它会长期存在吗?

如果 Gervill 将被另一个不支持 MIDI 调音标准的合成器取代,我想测试它是否可用。

如果 MIDI 调音标准可用,如何测试?

我的想法是发送一个BULK TUNING DUMP REQUEST,如果我收到回复,我确信它可用,否则不可用。

所以规范说:

接收仪器应通过发送下一节中针对所寻址的调谐号描述的批量调谐转储消息来响应。

但我的问题是,我怎样才能收到这个回复?

为了演奏音符和发送重新调音,我以这种方式使用 MIDI:

0 投票
1 回答
690 浏览

java - 在 Java 中同时播放创建的 midi 声音

我有一个问题,我希望在这里得到答案。我想创建许多 midi 声音而不将它们保存在客户端 PC 上,因为这应该在 Applet 中工作。创建声音部分不是问题,问题是同时播放这些声音。我现在搜索了超过 3 天的答案,但找不到对我有帮助的答案。

这是我目前拥有的:

我的声音(在一个开源项目中找到它的一部分):

这是我创建声音的地方:

这是我的临时主课:public class test {

我考虑过线程,但我不认为如果我有 20-30++ 线程,那不会同时发生,性能也不会那么好。我看到的例子是他们同时播放声音,但随后他们从一个文件中加载了声音,当我用 midi 尝试它时它不起作用。

0 投票
2 回答
2295 浏览

java - Java Midi - 如何在播放时从 midi 获取音符

我已经搜索了一段时间,但找不到我想做的事情的答案。

我想播放一个 MIDI 文件,并在播放时在屏幕上显示音符。当一个音符停止播放时,它应该会从屏幕上消失。

我可以用音序器演奏 MIDI,但不知道如何让音符播放,或者何时停止播放音符。

我已经研究了 ControllerEventListeners 和 MetaEventListeners,但仍然不知道该怎么做。

任何帮助,将不胜感激。

0 投票
1 回答
687 浏览

java - 如何从音量级别创建 MIDI Sysex Master Volume 消息?

如果音量级别表示为 0 和 1 之间的浮点值,如何创建 Universal SysEx Master Volume消息的数据字节?

这是 Sysex 消息构造函数,具有给定的 Sysex 消息状态字节 (0xF0) 和数据字节:

根据 MIDI 规范,Master Volume 消息中有 2 个状态字节和 6 个数据字节(没有状态字节),最后两个数据字节指定音量级别:

0xF0 SysEx(状态)
0x7F 通用实时
0x7F 忽略通道
0x04 Sub-ID -- 设备控制
0x01 Sub-ID2 -- 主卷
0xLL 14 位卷的位 0 到 6 0xMM 14 位卷
的位 7 到 13
0xF7 SysEx 结束(状态)

所以,如果我没记错的话,数据字节应该是这样的:

我的问题是如何从 0 到 1 之间的浮动音量级别获取 LL 和 MM字节?

0 投票
2 回答
5886 浏览

java - Java 结果 1 错误

我想创建一个包含这些注释的 midi 文件。我从互联网上获取了这段代码。如果我能找出问题所在,我可以走得更远。当我运行这个应用程序时,我只得到一个错误调用“java result 1”错误。我需要的是在我运行它之后应该有一个生成的 midi 文件,其中包含我通过的注释。完整的代码可用。

这是输出