Lua スクリプトの練習

既にRenoiseを使っているユーザー向けのフォーラムです。
質問・要望・Tips・バグ報告等、Renoiseに関する話題を書き込んでください。

Lua スクリプトの練習

投稿記事by uprime22 » 2010年12月24日(金) 5:20 pm

メリークリスマス・イブ!…

今日の午後は休みのクリスマスだってのに、 :wink: ここ何日か遊んでたLuaで、Tool を作る練習してました。
ほかの方で同じように、学びがてら書いてる人がいたら、そのコードを見てみたい、
というわけで、トピックを立ててみました。

バグの嵐でしたが、自分が今日作った奴、ちっちゃな xrnx Tool形式にまとめたものを、添付してみます。

main.lua の中に、使ったもの以外にも、いくつか関数を定義してます。
以前、移調の話を見かけたのを思い出して、書きました。
関数を差し替えれば、ボタンでパターンの一部だけ移調とか、特定のNoteだけ入れ替えとかも。
GUIを作るViewBuilderのとこが一番分からないです。ここらは適当にコピペしました。

適当にコピペ改変しちまって利用してもらったり、つっこんでくれたりするとうれしいです。
ではでは。

(追記:Midi_mapping追加)
添付ファイル
com.uprime.change_notes_test1.zip
(1.74 KiB) ダウンロード数: 270 回
最後に編集したユーザー uprime22 [ 2010年12月24日(金) 7:54 pm ], 累計 1 回
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2010年12月24日(金) 7:51 pm

おぉ~、Luaの世界に突入ですか。 :D

ちょっと動かしてみたんですけど、SAVE というのはどういう風に使うものなのですか?
それがちょっとわかりませんでした。移調はちゃんと動いてました。

あと、zip で圧縮する時に、コンテンツ(ここでは main.lua と manifest.xml の両方)を選択して、それを直接 zip 化するようにしてください。上の zip ファイルはコンテンツが含まれるフォルダを zip 化してあるので、拡張子を xrnx に変えても Renoise へのドラッグ&ドロップが出来ません。これは本家でもよくある事なんですけどね。 :wink:

それと、一応この掲示板でも xrnx という拡張子も認識するようにしました。
試しに添付してみますね。
com.uprime.change_notes_test1.xrnx
(1.48 KiB) ダウンロード数: 271 回
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2010年12月24日(金) 8:22 pm

Zipしないで*xrnxという名前のフォルダーのままドラッグドロップしたら、認識してくれていたんで
(後で編集しやすいし)こうしてたんですが、ほかの方に渡すときは、これはまずかったですかね?
Zipして拡張子.xrnxにして、アップという流れですか。分かりました!

ちょっと動かしてみたんですけど、SAVE というのはどういう風に使うものなのですか?


Saveを押すと、押したときのTrack-Noteの状態を配列に保存しとくようにしたんですね。(最初は内容は空のまま)
Resetを押すと、保存されたその内容に戻る。

調子に乗って移調してると、一部のNoteはRenoiseの扱うオクターブの上限下限に達し、
達してない一部だけが移調されて、全体の響きが変わってしまうので、
こんな風な、適当なところでSaveする関数をつくって配置しました。

本当は変調のようなこともしたかったんですが、プログラミングというより、音楽理論の知識が足りてないんで、
どういう風にしようかまだ考え付かないです。

ほかの方が、Tool形式じゃなくても、関数だけ書いた奴でもアップしてくれたら、勉強になるなあと思ってます。
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2010年12月24日(金) 8:43 pm

Zipしないで*xrnxという名前のフォルダーのままドラッグドロップしたら、認識してくれていたんで...

お~、これ僕、知りませんでした。確かにこれでもインストール出来ますね。

Saveを押すと、押したときのTrack-Noteの状態を配列に保存しとくようにしたんですね。(最初は内容は空のまま)
Resetを押すと、保存されたその内容に戻る。

なるほど、わかりました。 :D

しかし、よくこんなの出来ますねぇ。今、ちらっと中身見ましたけど、ちんぷんかんぷんですよ。
移調の数値を変えるくらいなら出来ますけどね。

他にもプログラミング出来る方が見てくれてたらいいですけどねぇ。
ここ人少ないですから・・・ :wink:
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2010年12月24日(金) 11:54 pm

改めてファイル見ると、コメントは無いし、インデントも無茶苦茶。
わかりづらい、って方がきっと正しいです。
自分用で書いてると、その辺鈍感になってます。
分かり易いって、技術要りますね。

あんまり難しくない小スクリプト用の、お題も募集です。(その中途半端さが難しいだろう… :wink:
ではでは。
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

upbeat付Selection あるいは、SampleのOffset

投稿記事by uprime22 » 2011年1月13日(木) 1:11 am

新しいスクリプトを作ったので、投稿します。
GUIは作ってないので、とりあえず関数だけですが。

以下宣伝のような文句です。

Renoiseの中で、Vocalなど、長めの連続音のサンプルを扱う時、こんな経験、ないですか。
「この発音のここのところを小節の頭にもっていきたい。」
「バックビートのこの部分をこの拍子にぴったりあわせたい」

Autoseekができて大分便利になりましたが、
RenoiseのSampleエディターって、サンプル自体のoffsetってできないですよね(←確かだろーか…)

この関数は、Sampleエディタにて、選択範囲の位置情報をつかって、自由なOffsetを可能にします。

具体的な仕様としては…

sample editer で、まずは適当な選択範囲を指定します。
選択のスタート地点が狙ったポイントに来るように調整してください。
エンド地点は、サンプルの最後など、好きなように。
そして、狙ったポイント(スタート地点)が、新しいサンプルの始まりから何ビート目に来て欲しいかを、決めます。
その結果新しいサンプルが元のサンプルより長くなっても構いません。この関数は、適当な無音部を挿入し、
狙ったポイントが決めたビートに来る様な新たなサンプルを生成します。

テスト方法:
スクリプトを UserScripts/ 下などに置いて、Executeし、
サンプルエディタ上で適切な選択をした後、
Terminalで
関数、replace_with_upbeat (beat)を評価してみて下さい。
beat、という変数が何ビート目に来て欲しいかを決めるところです。

例えば、
2ビート目なら、
replace_with_upbeat (2)

1/16ビート目なら、
replace_with_upbeat (1/16)

などのように入力してください。

バグとか無さそうなら、後ほどTool化しようかと思ってます。

追記:
バグ修正のため、差し替えます。
修正が落ち着くまでしばらく、差し替え続けるでしょう。
添付ファイル
selection_with_upbeat0.2.8.zip
(1.12 KiB) ダウンロード数: 249 回
最後に編集したユーザー uprime22 [ 2011年1月16日(日) 10:43 pm ], 累計 7 回
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2011年1月13日(木) 3:50 pm

う~ん、すみません、ちょっとテストの仕方が理解できてないです。(^ ^;)
コード: 全て選択
*** selection_with_upbeat.lua:134: <name> or '...' expected near '2'


何かこんなエラーが出て何も起こらないです。

この134行目の (beat) ってなってる所に (2) とか入れればいいんですよね??
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2011年1月14日(金) 8:22 am

あ、コードの中味自体には、手を付けないでいいです。(というか手をつけるのは、むしろダメですね。)
そこは関数の定義なので。
私の書き方変でした。
関数を実行する場所は、Terminalで、
(ショートカットは、control-T)
一番下の細長い空欄です。
そこに、関数名と、かっこでくくった変数を渡して、
Enter、って流れです。

今出先なので、後で、もっと詳しい解説書きますね。
そういや、自分もここらへん色々とまどったんだった。
最後に編集したユーザー uprime22 [ 2011年1月14日(金) 7:03 pm ], 累計 3 回
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2011年1月14日(金) 10:15 am

あぁ、なるほど。テストの方法はわかりました。

それで、1~2回動作したんですけど、その後にRenoiseが落ちちゃって、それ以降、違うエラーが出るようになっちゃいました。

コード: 全て選択
>>> replace_with_upbeat (1/16)
*** [string "replace_with_upbeat (1/16)"]:1: variable 'replace_with_upbeat' is not declared
*** stack traceback:
***   [C]: in function '_error'
***   [string "local mt = getmetatable(_G)..."]:29: in function <[string "local mt = getmetatable(_G)..."]:24>
***   [string "replace_with_upbeat (1/16)"]:1: in main chunk


それと動作してた時も、確かにサンプルの前に無音部分が出来たりするんですけど、何か狙った場所じゃないような気もして、
正直どういう目的の物なのかが理解できなかったです。
Tool化してGUIがあると、もうちょっとわかりやすいかもしれませんねぇ。
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by satobox » 2011年1月14日(金) 5:32 pm

追記:今はエラー出なくなりましたが、Undoを使ってるとおかしくなりますね。Renoiseが落ちます。(Undoしちゃ駄目なのかな?)
ただ、いまだに動作の内容が僕の頭では理解しづらいです・・・(^ ^;)
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2011年1月14日(金) 6:54 pm

むむむ、落ちてしまいましたか。申し訳ないです。
Undoは大丈夫なように気をつけたつもりだったんですが…
自分の所であまり長いサンプルでテストしてなかったからかなあ。

上で吐かれたエラーの内容は、関数の定義自体が登録されてないという事なので、スクリプト自体が評価されてないっぽいですね。
スクリプトの内容は、関数を定義してるだけ、なので、
実行は別に、例えばTerminal上とか、PureData→OSC経由とかでしなければならないです。

あと自分の所でRenoiseが落ちるのは、Script-Terminal-Editerがらみの事が多いです。
Terminal入力にコピペしたら、落ちたり。
そこら辺切り分けるためにも、一旦Tool化した方がいいんだろうな。
ちとやってみます。

後これで何が目指されてるのか、は、やっぱ分かりにくいっすか。うーー。
基本、SampleEditer上の編集の補助、ヘルパーのつもりです。 タイミング合わせに関して、AutoSeek+Delayコマンドで、聴覚的にパタン上でやるような事を、
SampleEditer上で視覚的により精確にできたり。
個人的には、これとRubberband Toolがあれば、 Abeleton Live、特に要らないな、という感じなんすが。
えーと。図描きます。
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2011年1月14日(金) 10:03 pm

先にアップした、Tool化されてない、関数定義のLuaファイル、差し替えておきます。
ここじゃないか、という場所を修正しました。
バグつぶれていればいいですけど。
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2011年1月15日(土) 10:06 am

上で吐かれたエラーの内容は、関数の定義自体が登録されてないという事なので、スクリプト自体が評価されてないっぽいですね。

これは納得しました。あんまりこういう事した事がないので、"execute" 押すのよく忘れます(^^;)

あと自分の所でRenoiseが落ちるのは、Script-Terminal-Editerがらみの事が多いです。
Terminal入力にコピペしたら、落ちたり。

たしかにコピペしてるのがマズイのかもしれないですね。
新しいファイルでもやっぱりUndoすると結構な確率でクラッシュするんですが、時々Renoiseのエラーメッセージじゃなく、OSのエラーメッセージっぽいのが出ます。「Runtime error」とか何とか。
ちなみにRenoise InstrumentのDrumloopsに入ってる "Break Amen.xrni" と "Break Apache.xrni" でテストしてます。OSはVista 32bitです。

で、ようやく何をやってるかを理解できました。確かに狙ったスタート地点がビートの頭位置にきてますね。
動作の面では大丈夫だと思います。
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

Re: Lua スクリプトの練習

投稿記事by uprime22 » 2011年1月15日(土) 1:57 pm

テスト、ありがとうございます。 :)
Undo時のRenoise落ち、こっちでも再現できましたよ。
サンプルデーターを書き換えた時、Undoのための準備・確定をするAPIがあるんですが、
その扱いや仕様を、ちょっと分かってなかったみたいです。
こういう、Renoise上のLuaならではの細かい注意点がたまって来ますね。
上の添付ファイルまた差し替えた所ですが、しばらくばたばた差し替え続けるでしょう。
手空きのときにでも、拾ってテストしてくれるとうれしいです。
ではでは。
uprime22
 
記事: 208
登録日時: 2009年11月04日(水) 9:32 pm

Re: Lua スクリプトの練習

投稿記事by satobox » 2011年1月15日(土) 8:56 pm

これで大丈夫じゃないですかね? クラッシュしなくなりましたよ。 :D
アバター
satobox
Site Admin
 
記事: 691
登録日時: 2008年5月12日(月) 10:33 am
お住まい: 京都

次へ

Return to Renoise ユーザーズ・フォーラム

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[55人]