【问题标题】:MIDI beginner - need to play one noteMIDI 初学者 - 需要弹奏一个音符
【发布时间】:2020-09-04 04:18:38
【问题描述】:

我对Java的MIDI功能不是很了解。事实上,它完全让我感到困惑。然而,我想做的是只是构建一个可以播放一个音符的简单应用程序。

如何使用 Java Sound 播放单个 MIDI 音符?

网络上几乎不存在对此的支持,我完全不知所措。

【问题讨论】:

  • 到目前为止,您完成了哪些教程,但它是如何不起作用的?
  • 浏览Java Sound info. page链接的资源。还有一个短音源可以播放 MIDI 曲调。
  • Sierra 和 Bates 的“Head First Java”有这方面的示例代码。
  • 这些 cmets 都没有帮助。 (请不要通过直接回答他们的问题、说 RTFM 或拒绝思考他们真正在问什么来惩罚新手。)

标签: java midi javasound


【解决方案1】:

我知道这是一个非常古老的问题,但是,作为一个新手程序员,我很难弄清楚如何做到这一点,所以我想我会分享以下 hello-world 风格的程序,它可以让 Java播放一个 MIDI 音符以帮助其他人入门。

import javax.sound.midi.*;

public class MidiTest{

    public static void main(String[] args) { 
      try{
        /* Create a new Sythesizer and open it. Most of 
         * the methods you will want to use to expand on this 
         * example can be found in the Java documentation here: 
         * https://docs.oracle.com/javase/7/docs/api/javax/sound/midi/Synthesizer.html
         */
        Synthesizer midiSynth = MidiSystem.getSynthesizer(); 
        midiSynth.open();
    
        //get and load default instrument and channel lists
        Instrument[] instr = midiSynth.getDefaultSoundbank().getInstruments();
        MidiChannel[] mChannels = midiSynth.getChannels();
        
        midiSynth.loadInstrument(instr[0]);//load an instrument
    
    
        mChannels[0].noteOn(60, 100);//On channel 0, play note number 60 with velocity 100 
        try { Thread.sleep(1000); // wait time in milliseconds to control duration
        } catch( InterruptedException e ) {
            e.printStackTrace();
        }
        mChannels[0].noteOff(60);//turn of the note
    
    
      } catch (MidiUnavailableException e) {
         e.printStackTrace();
      }
   }

}    

上面的代码主要是通过剪切、粘贴和修改几个在线教程中的代码来创建的。以下是我发现的最有用的教程:

http://www.ibm.com/developerworks/library/it/it-0801art38/

这是一个很棒的教程,可能有你想要的一切;但是,一开始可能有点不知所措。

http://patater.com/gbaguy/javamidi.htm

包含由 15 岁的孩子编写的非工作代码。这是 - 令人惊讶的 - 我发现的最有用的东西。

【讨论】:

    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-28
    • 2010-09-15
    • 2021-04-11
    • 2015-02-05
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多