0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

REAPERでノートの情報を得るPythonスクリプト

Last updated at Posted at 2020-03-22

REAPERでノートのタイミングを数値で得られたら
いろいろ音と同期したビジュアライズにはかどるかと思ったので
作ったメモ

GetNoteList.py
RPR_ClearConsole()

outlist = ""

midieditor = RPR_MIDIEditor_GetActive()
take = RPR_MIDIEditor_GetTake( midieditor )

notecntOut = 0
ccevtcntOut = 0
textsyxevtcntOut = 0

( retval, take, notecntOut, ccevtcntOut, textsyxevtcntOut ) = RPR_MIDI_CountEvts(take, notecntOut, ccevtcntOut, textsyxevtcntOut )

for noteidx in range(notecntOut):
  selectedOut = True
  mutedOut = True
  startppqposOut = 0
  endppqposOut = 0
  chanOut = 0
  pitchOut = 0
  velOut = 0

  ( retval, take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut ) = RPR_MIDI_GetNote(take, noteidx, selectedOut, mutedOut, startppqposOut, endppqposOut, chanOut, pitchOut, velOut )
  
  outlist += str(pitchOut) + "," + str(startppqposOut) + "," + str(endppqposOut) + "\n"

#RPR_ShowMessageBox("End", "status", 0 )
RPR_ShowConsoleMsg(outlist)

これを実行すると

image.png

こんな感じで ノート番号とノートオン、ノートオフのタイミング情報がテキストで得られる。

#TIPS

  • 対象となるMIDIEditor(MIDIリージョン)を選択して実行する。
  • 時間を最初から知りたい場合は、リージョンをまとめて実行する。
  • 途中テンポチェンジだとうまくいかない?

#以下いろいろ試したメモ

quarter note count (QN)

QNとは、1/4ノートカウント、一小節が4拍として、1拍を表すカウントのよう。
960で1拍っぽい。

##QNからMS(ミリ秒)に変換

  start = RPR_TimeMap_QNToTime( startppqposOut)
  end = RPR_TimeMap_QNToTime( endppqposOut)

これ、テンポチェンジには対応していないのかな・・・

追記これミリ秒だったら1000で割れば秒になりそうだけど、なぜか960でちょうど良い値になるのはなんだろう? 
※ヨクワカラン

##プロジェクトの先頭からの絶対時間で得る

  start = RPR_TimeMap_QNToTime_abs(0, startppqposOut)
  end = RPR_TimeMap_QNToTime_abs(0, endppqposOut)

とリファレンスには書いてあるけどうまくとれない・・・
※ので、先頭までエディターの範囲を伸ばす

  start = RPR_TimeMap2_QNToTime(0, startppqposOut)
  end = RPR_TimeMap2_QNToTime(0, endppqposOut)

こちらの方が新しいのか・・・違いがよくわからない。
こちらも途中のテンポチェンジには非対応っぽいです。

##Reaperのコンソールログより長い出力の場合の対処
長いデータだとコンソールのログ量をオーバーしていた。
とりあえずテキストコピーできればよかったので

import pyperclip

#略

pyperclip.copy(outlist)

まぁ、ファイルとかに出力するのが妥当な感じもする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?