【Aviutl】ごちゃまぜドロップスの自作Luaスクリプト(ファイルドロップを極める)

PC
スポンサーリンク

こんばんわ 魔界塔士です

前回ごちゃまぜドロップスの自作Luaを作る簡単な環境ができました。

今回はファイルドロップの流れを見てみます。

まずは以下のようにtest.luaを変更し何かファイルをドロップしてみましょう。

function P.ondragenter(files, state)
  debug_print("↓filesの中身:" )
  debug_print( files)
  return true
end

結果空白行が出力されました。これはfilesと言う器を参照しているので本来は器の中身を指定しないといけません。

中身を指定するのはファイルの番号と、ファイルパスを見たい。と言う風に指定します。

files[1].filepathと言った風です。複数のファイルをドロップした時は2番目のファイルの情報はfiles[2]に格納されています。

function P.ondragenter(files, state)
  debug_print("↓files.filepath:" )
  debug_print(files[1].filepath)
  return true
end

結果ドロップしたファイルのファイルパスがデバッグ画面に表示されました。

今回はEドライブ直下のtest.wavファイルをドロップしました。

スポンサーリンク

実践

これだけ分かれば後は自分のやりたい処理を作ることが出来ます。

それでは実践してみましょう。

ファイル名や拡張子で処理を続けるか判定する

function P.ondragenter(files, state)
    if string.find(files[1].filepath,"ssxvoice") ~= nil then
    	debug_print("ssx OK")
        return true
    end
    debug_print("ssx スキップ")
  return false
end

上が私がSSX3の編集用で作ったLuaで、ファイル名で処理を続けるか止めるか作成したコードです。

string.findと言う関数に、検索元文字列(files[1].filepath)と検索したい文字(ssxvoice)を渡すと結果として、文字列が見つかった場合は文字の位置を、見つからなかったらnilと言う値を返します。

結果上の場合は、ファイル名に”ssxvoice”の文字列が含まれていたら処理を継続し、そうでない場合は以降の処理をスキップする事になります。

シチュエーションによって自作Luaを使いたくない場合もあると思いますので、そういう例えばこの例ではファイルに含まれる文字でスキップ出来るようになりました。

ドロップするファイルを差し替える

次はドロップするファイルを差し替えてみます

function P.ondragenter(files, state)
  files[1].filepath = "E:\henkan.wav"
  return true
end

差し替わらないですね・・

それはドロップするファイル構成を変更したい場合はfunction P.ondrop(files, state)で行う必要があるからです。

以下のようP.ondropを変更してみましょう。(Eドライブ又はPCの環境に合わせてファイルを用意してください。)

function P.ondrop(files, state)
  files[1].filepath = "E:\henkan.wav"
  return files, state
end

ではドロップ

henkan.wavがドロップされました。

ドロップするファイルを追加する

こんな感じにしてください

function P.ondrop(files, state)

  files[#files+1] = {}
  files[#files].filepath =  "E:\henkan.wav"
  return files, state
end

return P

何でも良いのでテストファイルをドロップしてみてください。画像ではtest.wavをドロップしました。

test.wavとhenkan.wavがドロップされましたか?

files[#files+1] = {} で新しいファイルを格納する器を作ります。

#filesで現在の器にファイルが何個入っているか確認できます。ファイルを3つドロップしたのであれば、#filesには数字の3が入っています。

つまりそれに+1をすれば、常にファイルの器を一つ拡張できます。={}が器を拡張する命令です。

そして新しくできた器 files[#files].filepathに追加したいファイルのパスを入れればよいと言う事になります。

なお、ここは #files+1にしてはいけません。 #filesは現在のファイルの数になるので、拡張前は #files =3でしたが、拡張後は #files =4です。新しいファイルは4番目なので #files で良いのです。

スポンサーリンク

おわりに

ここまで何となく分かれば、それなりにやりたいことが出来るようになるかと思います。

それでは良いAviutlライフを

コメント

タイトルとURLをコピーしました