[問題] 只能發出同一種樂器的同一個音

看板java作者 (軟綿綿)時間11年前 (2013/05/25 16:44), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
大家好 我在練習"深入淺出"書中的範例 "MiniMusicCmdLine" 但是照著書本打完並輸入不同參數(包含樂器種類和音符)後 卻只有跑出同一種樂器(應該是鋼琴?)的同一個音 並且有出現WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5' 不確定跟這個Warning是否有關 好像要更動regedit的東西才能改善這個Warning,但聽說有風險,所以還沒嘗試 謝謝大家 程式碼如下: import javax.sound.midi.*; public class MiniMusicCmdLine { public static void main(String[] args) { MiniMusicCmdLine mini = new MiniMusicCmdLine(); if(args.length < 2){ System.out.println("Balabalabala"); }else{ int instrument = Integer.parseInt(args[0]); int note = Integer.parseInt(args[1]); mini.play(instrument, note); } } public void play(int instrument, int note){ try{ Sequencer player = MidiSystem.getSequencer(); player.open(); Sequence seq = new Sequence(Sequence.PPQ, 4); Track track = seq.createTrack(); MidiEvent event = null; ShortMessage first = new ShortMessage(); first.setMessage(192, 1, instrument, 0); MidiEvent changeInstrument = new MidiEvent(first,1); track.add(changeInstrument); ShortMessage a = new ShortMessage(); a.setMessage(144, 1, note, 100); MidiEvent noteOn = new MidiEvent(a,1); track.add(noteOn); ShortMessage b = new ShortMessage(); a.setMessage(128, 1, note, 100); MidiEvent noteOff = new MidiEvent(b,16); track.add(noteOff); player.setSequence(seq); player.start(); Thread.sleep(5000); player.close(); System.exit(0); }catch (Exception ex){ ex.printStackTrace(); } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.244.122

05/31 09:37, , 1F
b的部分要改成b.setMessage
05/31 09:37, 1F
文章代碼(AID): #1He7d_SN (java)