簡體   English   中英

如何將模式更改保存到已加載的 MIDI?

[英]How can I save pattern changes to a loaded midi?

我正在從事一個學校編碼項目,該項目涉及在 Java 中使用 JFugue 庫。 但是,我很難將加載和編輯的模式保存到文件中。 到目前為止,我已經嘗試了 player.saveMidi(無法識別)和 MidiFileManager.savePatternToMidi 函數,但編輯沒有保存。

這是上述代碼的片段:

Pattern pattern = new Pattern(MidiFileManager.loadPatternFromMidi(new File(filePath.getText()))); 
  
TextField midiData = new TextField(pattern.toString());                                             
midiData.setFont(Font.font(14));                                                                    
pattern = new Pattern(midiData.getText());                                                          

Button save = new Button("Save Edits");
Pattern finalPattern = pattern;                                                             

save.setOnAction(e -> {
    try {
        MidiFileManager.savePatternToMidi(finalPattern, new File(filePath.getText()));      
        Load.playAndEdit(filePath);
    } catch (Exception ex) {                                                                
        ex.printStackTrace();
    }
});

任何幫助肯定會受到贊賞!

盡管您懷疑這是 JFugue 的問題,但潛在的問題在於代碼的 JavaFX 部分。

主要問題是代碼的編寫方式,看起來期望的是 TextField 將被顯示,用戶將進行更改,並且代碼將記住“pattern = new Pattern(midiData.getText( ))”。 這不是 JavaFX TextField 的工作方式。 UI 元素不是這樣連續的; 相反,它們使用操作(或者在 JavaFX 中,您可以將 UI 組件的值與數據元素“綁定”)。 如果您在用戶按下“保存”按鈕時觸發的操作中從 TextField 獲取文本,您將擁有來自文本字段的最新數據。 在編寫代碼時,用戶的更改永遠不會放入變量中。

另外兩個注意事項:

  1. 在您的第一行中, MidiFileManager.loadPatternFromMidi 返回一個 Pattern,因此您無需將其放入“new Pattern()”中。

  2. 沒有必要說“Pattern finalPattern = pattern”。 這只是創建了一個新變量,該變量指向與現有變量相同的數據。 您可以保存“模式”,如果它具有您期望從文本字段中獲得的信息(但同樣,這不是正確的表達方式,因此它不會包含您期望的信息)。

測試這不是 JFugue 問題的一種方法是創建一個簡單的程序,例如:

Pattern pattern = MidiFileManager.loadPatternFromMidi(new File(filePath.getText())); 
pattern.add(" C D E");
MidiFileManager.savePatternToMidi(pattern, new File(filePath.getText())); 

然后您會看到生成的模式在末尾添加了三個新音符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM