[英]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 獲取文本,您將擁有來自文本字段的最新數據。 在編寫代碼時,用戶的更改永遠不會放入變量中。
另外兩個注意事項:
在您的第一行中, MidiFileManager.loadPatternFromMidi 返回一個 Pattern,因此您無需將其放入“new Pattern()”中。
沒有必要說“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.