Forums: おーぷんMIDIぷろじぇくとフォーラム (Thread #44717)

二等分・三等分 (2021-10-10 15:59 by メヒbro #88131)

選択した2つのノートオンイベント間を二等分や三等分する小節:拍:ティックに
新たなノートオン~オフのイベントを追加する、ということをしたいと思っているのですが、
何かよい方法はありますか。

テンポや拍がおかしいMIDIファイルを修正するためにビート検出用のトラックを作っているのですが、
検出用に使えるノートが無い場合に、今は電卓や表計算ソフトで拍と合うティック等を計算して
手動でビート検出のためのノートイベントを挿入しているのですが、それをツールだけでできたら
便利だなと思ってます。

Reply to #88131×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 二等分・三等分 (2021-10-10 21:20 by kuzu #88132)

このたびは世界樹をご利用いただきまして誠にありがとうございます。

他トラックから複写可能な音符がない部分は手動で入力することを想定しているので、
ピアノロールなどで必要な数だけ音符を手動で入力してください。
位置合わせですが、スナップを解除して、目分量でよいと思います(その部分に音符がなければ問題ない)。

ただ、どうしても均等割りする必要がある場合は、面倒なのは確かです。
SALを使用すれば、そのようなオリジナルの機能を追加することもできます。
SALは64bit版(7.0以降)のはまだ仮リリース状態でうまく動くか微妙ですが、
32bit版(6.1以前)のはテスト済みなのでうまく動くでしょう。

次のSALスクリプトは、選択された2つのノート間に、ダイアログで指定された分割数に応じて
ノートイベントを均等に挿入するものとなります。

insert_notes_between_two_notes.sal

(do
(int nOldNoteOnTime 0)
(int nNewNoteOnTime 0)
(int nIntervalTime 0)
(int nNumDivide 2)
(int nCh 4)
(int nKey 60)
(int nVel 100)
(int nDur 15)
(getInt nNumDivide "Input nNumDivide between two notes." 2 7)
(forEachEvent
(if (== Event.Kind NOTE)
(do
(= nNewNoteOnTime Event.Time)
(= nIntervalTime (- nNewNoteOnTime nOldNoteOnTime))
(if (> nOldNoteOnTime 0)
(do
(int i 1)
(while (< i nNumDivide)
(do
(int nInsertTime (+ nOldNoteOnTime (/ (* nIntervalTime i) nNumDivide)))
(insert nInsertTime nCh NOTE nKey nVel nDur)
(= i (++ i))
)
)
)
)
(= nOldNoteOnTime nNewNoteOnTime)
)
)
)
)



上記スクリプトをメモ帳などにコピペして*.salとして保存して、ぜひお試しくださいませ。
Reply to #88131

Reply to #88132×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 二等分・三等分 (2021-10-12 22:28 by メヒbro #88142)

回答ありがとうございました。

SALはあまり知りませんでしたが、これを使うとできそうですね。
スクリプトを見たところ、自分が表計算ソフトでやっていることと同じ計算をしているようです。
これならnNumDivide次第で3等分も4等分もできそうですね。

どうもありがとうございました。
Reply to #88132

Reply to #88142×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login