问题标签 [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 回答
204 浏览

java - 导出到 .jar 文件时,MIDI 乐器听起来不同

我制作了一个使用 java 声音 API 中的 MIDI 包合成声音的 java 程序,但是,当我将它导出到 .jar 文件时,播放的声音与我在 eclipse 中运行它时的声音完全不同。有谁知道它为什么这样做或如何解决这个问题?

可以在此处找到乐器列表:http ://www.hittrax.com.au/images/artists/gmgs.pdf

下面是我的一段代码

下图显示了我录制时的音频,第一个是 eclipse 上的声音,第二个是导出到 .jar 时的声音

声波

0 投票
0 回答
220 浏览

java - Android:如何在正确的时间检索 MIDI 事件?

我正在尝试在Android应用程序中从 MIDI 文件中的正确时间检索所有 MIDI 事件。

以下代码使用javax.sound.midiAPI 在标准 JVM(在我的计算机上)上工作。

不幸的是,javax.sound.*包在 Android 上不可用。Github ( https://github.com/kshoji/javax.sound.midi-for-Android )上提供了适用于 Android 的移植,但我上面的代码示例不起作用(sequencer.getTransmitter()返回 null)。

有谁知道这是怎么做到的吗?对于我想做的事情,我没有找到任何有趣的库(http://www.midi.org/aboutmidi/android.php )。

谢谢你。

0 投票
1 回答
974 浏览

java - java midi测试代码中没有播放简单的声音

我正在尝试建立javax.sound.midi代码生成简单声音的能力,以便我可以开始处理更复杂的 MIDI 代码。但是下面的代码没有发出声音。代码示例只有大约 50 行,来自一个应该可以开箱即用的 Web 示例。但是,当我运行程序时,它会在控制台中产生以下错误消息:

此外,不会产生任何声音。 操作系统是 Windows 8.1,如果这很重要的话。

是什么导致了这个错误?如何更改下面的小代码部分以使其播放简单的声音?

这是抛出上述输出的完整约 50 行代码:

0 投票
0 回答
524 浏览

java - 如何在java中减少线程的start()方法执行时间

我试图实现一个实时执行的应用程序,其中一个线程是启动器,它将调用播放一些音乐(即在重写方法中java midi实现的执行语句)。run()Runnable interface

但是线程启动(thread.start()方法)本身花费了超过 2 毫秒,这在应用程序的执行中造成了显着的延迟。我使用线程是因为有时必须在两者之间重新启动播放器应用程序。

有什么方法可以减少方法的执行时间start()。我也尝试过赋予线程优先级,但它仍然没有用。我希望延迟只有几微秒。任何帮助将不胜感激。我正在使用一个java fxml application按钮单击事件正在处理所有这些。

这是我的代码:

输出:

0 投票
2 回答
654 浏览

java - Java MIDI 音序器同步模式

嗨:我正在尝试将 MIDI 音序器同步到外部时钟的实例。我做了:

返回

这意味着这将毫无用处。

我究竟做错了什么 ?当然,我已经确认消息从 D2 出来并进入另一个定制的接收器,以通知 system.out,并且音序器正常播放,只是似乎它不支持 SyncModes 文档说它应该。具体来说,这句话让我感到困惑(来自MIDI_SYNC:“这种模式仅适用于同时也是 MIDI 接收器的音序器的主同步模式。”

定序器作为接收器是什么意思。我认为我的 getReceiver() 方法应该足够了

问候和感谢!

0 投票
1 回答
885 浏览

java - Java Sound Midi 输出到硬件键盘

我正在尝试创建一个可以向 MIDI 键盘播放音符的程序。我无法让整个程序正常工作,但现在我正在尝试创建一个较小的概念验证程序来尝试解决它。

为此,我尝试在键盘上播放 .mid 文件(卡西欧 CTK-3000),MidiPlay可以在键盘上播放。问题是当我尝试在我的程序中弹奏键盘时,它什么也没弹。我的代码如下:

0 投票
1 回答
328 浏览

java - MIDI 音序器停止而不刷新

对于我正在做的一个项目,我需要暂停midi 音序器,我希望所有发声的音符都能持续,从而使这些音符无穷无尽。我面临的问题是,sequencer.stop()显然不仅停止播放,而且还向所有发声音符发送 MIDI 音符关闭消息,终止所有发声音符(在某些文献中称为冲洗)。

我已经尝试使用sequencer.setTempoInBPM(0)并且可以完成工作,但是对于我的项目还有其他不需要的副作用。

最明显的解决方案似乎是压倒一切Sequencer.stop()的,但我该怎么做呢?那个被覆盖的方法究竟会是什么样子?

编辑: 我想编辑问题以回应gpasch的评论。

不仅停止播放,还会向所有发声音符发送 MIDI 音符关闭消息:你在说什么?这不是一回事吗??

这对于音频是正确的,但对于 MIDI 则不是这样。MIDI 协议本身不指定任何音频数据。它仅向乐器提供有关演奏内容的说明乐器解释 MIDI 信息并发出最终声音。

为了让乐器播放一秒钟的声音,这些是动作:

  1. [音序器] MIDI 信息输出:注意
  2. [乐器] MIDI Message In: note on
  3. [Instrument]开始解释音符 on : 开始产生声音
  4. [Sequencer]等待一秒钟
  5. [音序器] MIDI Message Out:音符关闭
  6. [Instrument] MIDI Message In: note off
  7. [Instrument]开始解释音符关闭:停止产生声音

因此,如果此过程在第 4 步被中断,它将创建一个“无尽的音符”。因为 MIDI 乐器得到了开始演奏某个音符的指令,但从来没有得到停止演奏那个音符的指令。[*]

回头看看我的问题。当我sequencer.stop()在一个音符的中间呼叫时(第 4 步),而不是有一个“无尽的音符”,在那个时刻正在播放的所有尚未收到音符关闭消息的音符都停止发声。对此的合乎逻辑的解释是在引擎盖下sequencer.stop()发送MIDI All Note Off消息。我们可以为此感到非常感激,因为否则sequencer.stop()将是一团糟。在我的特殊情况下,虽然我真的需要音序器不发送音符关闭消息。所以问题是:我可以为此做一个解决方法吗?

* 如果是音色自然衰减的钢琴音色,音色最终会死掉。但是对于合成器声音,声音会一直持续到

0 投票
1 回答
417 浏览

java - 暂停 Java Sequencer 会重置速度

我正在编写一些代码,这些代码在运行时会自动开始播放 midi 序列,并且用户可以随时通过按键暂停。他们的关键事件处理工作得很好,但是,我遇到了一个非常奇怪的错误,其中暂停音序器:

重置音序器的速度。歌曲/音序器以 120000 MPQ(从我的输入加载)开始播放并重置为 500000 MPQ。有谁知道为什么会发生这种情况?谢谢。

0 投票
2 回答
1370 浏览

java - try-catch 无法正常工作

我正在从HeadFirst阅读 Java 。我开始阅读有关异常处理的章节。书中有我在计算机上执行的代码。

当我删除 try-catch 块时,编译器会引发 MidiUnavailableException 错误。我使用 try-catch 来捕获该异常,但System.out.println("Bummer");没有被执行。而是执行 try 块。

这里发生了什么?

0 投票
0 回答
74 浏览

java-8 - 将 Sequencer 和 MIDI 代码转换为 Java 8 lambda 和流

我正在将用 java 6 编写的代码转换为 java 8。该代码在我的游戏中充当事件通知器,其中每个事件都会播放声音。我的代码如下:

我没有办法将其转换为 Java 8。有人可以帮忙吗?