2015-06-28 43 views
0

我一直在使用Matlab一段時間,但剛剛開始使用Octave。我想用我的Windows機器上下面的代碼讀取MIDI文件:如何在Octave中使用「javax.sound.midi.MidiSystem.getSequence」

javaaddpath('C:/Program Files/Java/jdk1.8.0_45/jre/lib/rt.jar'); 
midiFile = javaObject('java.io.File', file_name); 
if ~midiFile.exists 
    error('Unable to find file %s',file_name); 
end 

seq = javaObject('javax.sound.midi.MidiSystem.getSequence', midiFile); 

但我收到以下錯誤:

error: [java] java.lang.ClassNotFoundException: javax.sound.midi.MidiSystem.getSequence 

我在做什麼錯?

謝謝!

回答

0

函數javaObject()用於調用類構造函數。然而,getSequence()javax.sound.midi.MidiSystem類的「正常」方法。

octave> help javaObject 

-- Built-in Function: JOBJ = javaObject (CLASSNAME) 
-- Built-in Function: JOBJ = javaObject (CLASSNAME, ARG1, ...) 
    Create a Java object of class CLASSSNAME, by calling the class 
    constructor with the arguments ARG1, ... 

octave> man javaMethod 
-- Built-in Function: RET = javaMethod (METHODNAME, OBJ) 
-- Built-in Function: RET = javaMethod (METHODNAME, OBJ, ARG1, ...) 
    Invoke the method METHODNAME on the Java object OBJ with the 
    arguments ARG1, .... 

    For static methods, OBJ can be a string representing the fully 
    qualified name of the corresponding class. 

注意,典型地,第二個參數javaMethod是一個對象,但也可以是與類名的字符串。因此,您需要:

octave> midiFile = javaObject ("java.io.File", "Downloads/MIDI_sample.mid"); 
octave> seq = javaMethod ("getSequence", "javax.sound.midi.MidiSystem", midiFile) 
seq = 

<Java object: javax.sound.midi.Sequence>