代码之家  ›  专栏  ›  技术社区  ›  Zarkonnen

重新实现“ToneMatrix”音频玩具[关闭]

  •  0
  • Zarkonnen  · 技术社区  · 15 年前

    有一个很酷的音频“玩具”叫 ToneMatrix . 我想把它重新实现为Java小程序。我试过用 JFugue player.play 有声音和 Thread.sleep 但结果很糟糕。

    jfugue在第17次(是的,真的,我数过)调用后停止响应 玩游戏 线程睡眠 太不规则,无法发出良好的节奏。

    你会推荐什么?基本上,我正在寻找一种简单的方法来在飞行中生成单一的声音音符。所以在声音播放前一秒钟,我需要能够查看数据并告诉音频库要播放什么音符。(可能有多个和声。)

    1 回复  |  直到 5 年前
        1
  •  1
  •   Sam Barnum    15 年前

    我猜你忘了在jfugue里关掉音符,或者有一个bug,一旦开始就忘了停止播放音符。

    使用MIDI是一种非常简单的方法来完成您所说的工作。在MIDI包中,有一些有用的方法可以帮助您开始:

    Synthesizer synth = MidiSystem.getSynthesizer();
    synth.open();
    MidiChannel midiChannel = synth.getChannels()[0];
    midiChannel.allNotesOff();
    currentInstrument = synth.getAvailableInstruments()[index];
    System.out.println("Switching instrument to #" + index + ": " + currentInstrument.getName());
    synth.loadInstrument(currentInstrument);
    midiChannel.programChange(currentInstrument.getPatch().getBank(), currentInstrument.getPatch().getProgram());
    midiChannel.noteOn(noteNumber, velocity);
    midiChannel.noteOff(noteNumber);