1
我正在使用實現Receiver的類實時從我的midi鍵盤讀取MIDI消息,並輸出彈奏的音符。如何將時間戳轉換爲刻度(PPQ) - 實時Midi
我按下筆記時收到的唯一信息是MidiMessage和timeStamp。
我想把筆記畫成實際的鋼琴樂譜,而且用戶現在必須事先設置bpm。
因此,如果我知道速度是120bpm(例如),如何使用timestamps來確定按下音符的長度?
我假設如果我可以將timeStamp轉換爲ticks(ppq),那麼我可以使用它來計算時間。
任何幫助,非常感謝。以下是我的Receiver類中的「send」方法。
'firstStamp'和'secondStamp'變量只是輸出音符的長度。筆記釋放時我記錄了時間戳,並在按下時扣除了時間戳。
@Override
public void send(MidiMessage message, long timeStamp) {
String strMessage = null;
if (firstStamp == 0) {
firstStamp = timeStamp;
secondStamp = timeStamp;
}
firstStamp = secondStamp;
secondStamp = timeStamp;
stampDif = (secondStamp - firstStamp);
if (message instanceof ShortMessage) {
strMessage = decodeMessage((ShortMessage) message, timeStamp);
} else if (message instanceof MetaMessage) {
strMessage = decodeMessage((MetaMessage) message);
} else if (message instanceof SysexMessage) {
strMessage = decodeMessage((SysexMessage) message);
} else {
strMessage = "other message" + message.getStatus();
}
r_out.println("Timestamp: " + timeStamp + " " + strMessage);
r_printStream.println("Timestamp: " + timeStamp + " " + strMessage);
}
感謝您的回覆。 –