Tag: midi

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

我已经搜索了一段时间,但找不到我想做的答案。 我想播放midi文件,并在播放时在屏幕上显示音符。 当音符停止播放时,它应该从屏幕上消失。 我可以用音序器播放midi,但不知道如何播放音符,或者当它停止播放音符时。 我查看了ControllerEventListeners和MetaEventListeners,但仍然不知道如何做到这一点。 任何帮助,将不胜感激。

使用javax.sound.midi包设置仪器通道

我在javax.sound.midi包中设置仪器时遇到问题。 Synthesizer synthesizer = MidiSystem.getSynthesizer(); MidiChannel[] channels = synthesizer.getChannels(); channels[0].programChange(5); System.out.println(channels[0].getProgram()); 从MidiChannel上的文档中,对通道[0] .programChange(int)的调用应该改变MidiChannel设置的仪器并立即反映在通道[0] .getProgram()中。 但是我的程序打印“0”,表示没有任何改变。 稍后在代码中,我使用MidiChannel.getSequencer()成功播放midi声音(尽管只使用默认乐器。) 我是否打算尝试以错误的方式设置仪器?

MIDI初学者 – 需要播放一个音符

我不太了解Java的MIDIfunction。 事实上,它完全让我感到困惑。 然而,我想要做的只是构建一个简单的应用程序,它将播放一个音符。 如何使用Java Sound播放单个MIDI音符? 网上对此的支持几乎不存在,我完全不知所措。

如何从MIDI序列获取音符开/关信息?

我希望在播放MIDI序列中收到音符开/关事件的通知,以在基于屏幕的(钢琴)键盘上显示音符。 下面的代码在播放MIDI文件时添加MetaEventListener和ControllerEventListener ,但仅在轨道的开头和结尾显示一些消息。 我们怎样才能听取关于MIDI事件的注释和注释? import java.io.File; import javax.sound.midi.*; import javax.swing.JOptionPane; class PlayMidi { public static void main(String[] args) throws Exception { /* This MIDI file can be found at.. https://drive.google.com/open?id=0B5B9wDXIGw9lR2dGX005anJsT2M&authuser=0 */ File path = new File(“I:\\projects\\EverLove.mid”); Sequence sequence = MidiSystem.getSequence(path); Sequencer sequencer = MidiSystem.getSequencer(); sequencer.open(); MetaEventListener mel = new MetaEventListener() { @Override public void meta(MetaMessage […]

Java sound api – 扫描midi设备

我正在开发一个java项目,它使用javax.sound.midi库从midi硬件接收midi事件。 在文档中,它说MidiSystem.getMidiDeviceInfo()返回所有连接的midi硬件的列表。 它适用于我,但问题是,它只能工作一次。 第一次实际扫描设备需要花费一些时间,但每次之后,即使已连接新设备,它也会立即返回相同的列表。 有没有办法强迫它重新扫描? 如果重新启动应用程序,它将重新扫描,但我不希望我的用户在连接新的midi设备时必须重新启动。 顺便说一下,我正在使用Mac OS X ……有人指出,不同操作系统的行为可能会有所不同。

终止Java Midi输出

我写了这个简短的程序来学习javax.sound.midi系统。 这是使用Java 6.输出是预期的(由Sequencer事件触发的一系列System.out.println()字符串)但问题是,在最后一个声音效果之后,程序保持循环并且没有按预期终止。 有谁能说出如何解决这个问题? 谢谢你的帮助: import javax.sound.midi.MidiEvent; import javax.sound.midi.ShortMessage; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.ControllerEventListener; import javax.sound.midi.Sequencer; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequence; import javax.sound.midi.Track; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MidiUnavailableException; class MySound { public static MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) { MidiEvent event = null; try { ShortMessage a = new ShortMessage(); a.setMessage(comd, chan, […]

Java停止MIDI播放

嗨我有java应用程序播放来自序列的midi消息。 我是用jfugue库做的。 问题是,当我试图用停止按钮停止播放时(调用sequencer.stop()和sequencer.close()),最后播放的音符都是rest时间,我无法阻止它。 所以我要问关于停止所有音频和MIDI的解决方案! 从java应用程序声音播放。 注意:如果你想提出静音音量,你需要知道我希望最终用途能够再次按下播放按钮并再次听到声音,所以静音volumr将不是解决方案,或者请解释。 谢谢!

在MIDI音序器中控制音量的方法是什么?

有人能告诉我如何在不使用音库或合成器的情况下控制MIDI音序器的音量吗? 我希望在按顺序继续播放下一个MIDI之前使MIDI淡出 if(midiplay) { midi = s + savereq; try { //System.out.println(“Play MIDI ” + midi); if (musicSr != null) { /* This is where I want it to fade out*/ musicSr.stop(); //stop sequencer musicSr.close(); //close sequencer } musicSr = null; musicS = null; File music = new File(midi); if(music.exists()) { musicS = MidiSystem.getSequence(music); } […]

Mac OSX中的Java Midi破碎了?

我正在尝试在浏览器中播放midi,并且一直在使用在PC上运行良好的Java Applet。 它在OSX上非常不可靠,所以我写了一个简单的测试用例,它表现出同样的问题: import javax.sound.midi.*; import java.io.InputStream; import java.io.IOException; import java.io.FileInputStream; import java.io.FileNotFoundException; public class MidiPlayer { public static void main(String[] args) { try { Sequencer sequencer = MidiSystem.getSequencer(); if (sequencer == null) throw new MidiUnavailableException(); sequencer.open(); FileInputStream is = new FileInputStream(“sample.mid”); Sequence mySeq = MidiSystem.getSequence(is); sequencer.setSequence(mySeq); sequencer.start(); } catch (Exception e) { e.printStackTrace(); } […]

读MIDI文件

使用多个轨道读取MIDI文件(按时间顺序)的最佳方法是什么? (JAVA) 注意:我不想播放MIDI文件,只需阅读信息即可。 夫妻想法: 假设没有短于1/64音符的音符事件是否安全? 或者我应该访问每个轨道并且只在所有其他刻度轨道之后移动到下一个刻度线 假设没有midi事件短于1/64注释,并将当前位置滴答计数移动该固定增量。 访问每个轨道并进入下一个最早的刻度线