エクスプレッションで
Random
Wiggle
などランダムな数を使用するとき
レイヤーの順番変えたら動き変わって困るときは
seedRandom()をつかってseed固定します。
まぁ、エクスプレッションの先頭に1行入れるだけですが
今回挿入するプロパティが多かったので自動化Script作りました。
使い方は
プロパティ選択して、Script実行するだけ。
自動でエクスプレッションの先頭に、1文が挿入されます。
参考サイト!!
https://www.cg-method.com/entry/expression-to-script/
http://aejsx.hiroshisaito.net/layer-object/attributes/index
Menu
▼
2019年4月17日水曜日
2019年4月12日金曜日
Arduinoと超音波センサーとProcessingで簡易モニター 検証
検証備忘録
仕事でAftereffecstのモーショングラフィック作業してるとき
ふと「キーで気持ち良いボヨヨンとかの動きをさっと作りたいので、PysicalUI作りたい。USB繋げてすぐセンシングして、テキストファイル書き出しして、AEにコピペして」みたいな完全オリジナルPUI作りたいと思って
帰ってから検証して見たのメモ。
実験
Arduino UNO + 超音波センサー
Processing + 可視化グラフ(まずは)
で
手を自由に動かしてインタラクティブにグラフ確認と、テキスト出力までしたい
結果
全然ダメ
超音波センサーは手のひらでセンシングすると20〜30cmくらいでもうノイズ目立ってくる。
まぁノイズなら調整で正せるかもだけど、反応性が悪い気がする。ついてこない。
(スケッチの問題だと思われる。時間かかるのでまた今度)
次のチャレンジ
MIDIコントローラのスライダーと
Processingを繋げてインタラクティブなUIとテキスト出力
したい!
➡️ここを参考にしてやりたい
とりあえず、今回試したスケッチはこちら。
Arduino
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
#define echoPin 3 // Echo Pin
#define trigPin 5 // Trigger Pin
double Duration = 0; //受信した間隔
double Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite( trigPin, HIGH ); //超音波を出力
delayMicroseconds( 10 ); //
digitalWrite( trigPin, LOW );
Duration = pulseIn( echoPin, HIGH ); //センサからの入力
if (Duration > 0) {
Duration = Duration/2; //往復距離を半分にする
Distance = Duration*340*100/1000000; // 音速を340m/sに設定
Serial.print(Distance);
Serial.write("\n");
}
delay(1); //シリアルモニタで確認するときは100
}
Processing
/*
* Arduino - Processingシリアル通信
* センサーの値をグラフにプロット
* Processing側サンプル
*/
import processing.serial.*;
int NUM = 1; //センサー個数。今回は1個。「ショックセンサーの例」では2個
Serial myPort; // シリアルポート
float sensors = 2; //センサーの値を格納する配列
int cnt; //カウンター
// グラフの線の色を格納
color[] col = new color[6];
int pSize = 2; //異なる2つのプロットサイズで
void setup() {
//画面設定
size(1600, 400);
frameRate(240);
// シリアルポートのリスト取得
//println(Serial.list());
// ポート番号とスピードを指定してシリアルポートをオープン
String portName = Serial.list()[1];
// myPort = new Serial(this, portName, 9600); //Win
myPort = new Serial(this,"/dev/cu.usbmodem1421",9600); //Mac
// 改行コード(\n)が受信されるまで、シリアルメッセージを受けつづける
myPort.bufferUntil('\n');
//グラフ初期化
initGraph();
}
void draw() {
// センサーの数だけ、グラフをプロット 。今回は1個。複数個のときは「ショックセンサーのプログラム参照」
fill(col[1]);
float tx = map(cnt, 0, width, 10, width); //左に余白10
float ty = map(sensors, 0, 100,height-10,10); //上端がy=0のため、下端をベースに描画するにはこのリマップ← ※上下余白 100
ellipse(tx, ty, pSize, pSize);
if (cnt > width) {
initGraph();
}
//カウンタアップ
cnt++;
}
//グラフの初期化
void initGraph() {
background(47);
noStroke();
cnt = 0;
// グラフ描画の線の色を定義
col[0] = color(255, 127, 31);
col[1] = color(31, 255, 127);
col[2] = color(127, 31, 255);
col[3] = color(31, 127, 255);
col[4] = color(127, 255, 31);
col[5] = color(127);
}
void serialEvent(Serial myPort) {
// シリアルバッファーを読込み
String myString = myPort.readStringUntil('\n');
// 読み込んだ文字列を 小数(数字)に変換して、関数に代入
sensors = float(myString);
}
-----------
参考サイト
今後「Arduinoからのシリアル通信結果をProcessingでテキスト出力」はこれまんま
https://kenyu-life.com/2018/11/24/pulsesensortxtdata/
仕事でAftereffecstのモーショングラフィック作業してるとき
ふと「キーで気持ち良いボヨヨンとかの動きをさっと作りたいので、PysicalUI作りたい。USB繋げてすぐセンシングして、テキストファイル書き出しして、AEにコピペして」みたいな完全オリジナルPUI作りたいと思って
帰ってから検証して見たのメモ。
実験
Arduino UNO + 超音波センサー
Processing + 可視化グラフ(まずは)
で
手を自由に動かしてインタラクティブにグラフ確認と、テキスト出力までしたい
結果
全然ダメ
超音波センサーは手のひらでセンシングすると20〜30cmくらいでもうノイズ目立ってくる。
まぁノイズなら調整で正せるかもだけど、反応性が悪い気がする。ついてこない。
(スケッチの問題だと思われる。時間かかるのでまた今度)
次のチャレンジ
MIDIコントローラのスライダーと
Processingを繋げてインタラクティブなUIとテキスト出力
したい!
➡️ここを参考にしてやりたい
とりあえず、今回試したスケッチはこちら。
Arduino
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
#define echoPin 3 // Echo Pin
#define trigPin 5 // Trigger Pin
double Duration = 0; //受信した間隔
double Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite( trigPin, HIGH ); //超音波を出力
delayMicroseconds( 10 ); //
digitalWrite( trigPin, LOW );
Duration = pulseIn( echoPin, HIGH ); //センサからの入力
if (Duration > 0) {
Duration = Duration/2; //往復距離を半分にする
Distance = Duration*340*100/1000000; // 音速を340m/sに設定
Serial.print(Distance);
Serial.write("\n");
}
delay(1); //シリアルモニタで確認するときは100
}
Processing
/*
* Arduino - Processingシリアル通信
* センサーの値をグラフにプロット
* Processing側サンプル
*/
import processing.serial.*;
int NUM = 1; //センサー個数。今回は1個。「ショックセンサーの例」では2個
Serial myPort; // シリアルポート
float sensors = 2; //センサーの値を格納する配列
int cnt; //カウンター
// グラフの線の色を格納
color[] col = new color[6];
int pSize = 2; //異なる2つのプロットサイズで
void setup() {
//画面設定
size(1600, 400);
frameRate(240);
// シリアルポートのリスト取得
//println(Serial.list());
// ポート番号とスピードを指定してシリアルポートをオープン
String portName = Serial.list()[1];
// myPort = new Serial(this, portName, 9600); //Win
myPort = new Serial(this,"/dev/cu.usbmodem1421",9600); //Mac
// 改行コード(\n)が受信されるまで、シリアルメッセージを受けつづける
myPort.bufferUntil('\n');
//グラフ初期化
initGraph();
}
void draw() {
// センサーの数だけ、グラフをプロット 。今回は1個。複数個のときは「ショックセンサーのプログラム参照」
fill(col[1]);
float tx = map(cnt, 0, width, 10, width); //左に余白10
float ty = map(sensors, 0, 100,height-10,10); //上端がy=0のため、下端をベースに描画するにはこのリマップ← ※上下余白 100
ellipse(tx, ty, pSize, pSize);
if (cnt > width) {
initGraph();
}
//カウンタアップ
cnt++;
}
//グラフの初期化
void initGraph() {
background(47);
noStroke();
cnt = 0;
// グラフ描画の線の色を定義
col[0] = color(255, 127, 31);
col[1] = color(31, 255, 127);
col[2] = color(127, 31, 255);
col[3] = color(31, 127, 255);
col[4] = color(127, 255, 31);
col[5] = color(127);
}
void serialEvent(Serial myPort) {
// シリアルバッファーを読込み
String myString = myPort.readStringUntil('\n');
// 読み込んだ文字列を 小数(数字)に変換して、関数に代入
sensors = float(myString);
}
-----------
参考サイト
今後「Arduinoからのシリアル通信結果をProcessingでテキスト出力」はこれまんま
https://kenyu-life.com/2018/11/24/pulsesensortxtdata/
2019年4月9日火曜日
batチャレンジ! フォルダ内のファイル名から、文字列変換テキスト作成
ファイルをドラッグ&ドロップしたらリスト取得、のbatはよくあるんですが・・・
--------------------------------------------
ちなみに、かなり特殊だけどカスタマイズしたのがこちら。
【テキスト1】ファイル名(拡張子なし)取得して、前後に文字列挿入&連番
【テキスト1】ファイルのフルパス名取得して、前後に文字列挿入&連番
「フォルダ(ディレクトリ)」をドラッグ&ドロップして、求める結果が得られなかったので、今回自分が調べた内容を記録に残します。
<目的>
フォルダをドラッグ&ドロップ(以降D&D)して、そのフォルダ内のファイルをリストにしてテキストファイルに書き出す。
調べてすぐ出てくるのは、D&Dしたフォルダ・ファイルのカレントディレクトリのリストが取得されるっていうこと。
中身(下位層)のリストが取得できない!
↓
シンプルなこういうの
・・・
で作ったのがこれ。
使い方は、
以下コマンドをbatにして保存。
フォルダをD&Dすると、batと同じフォルダにtxtファイルが保存されます。
使い方は、
以下コマンドをbatにして保存。
フォルダをD&Dすると、batと同じフォルダにtxtファイルが保存されます。
@echo off
rem フォルダをbatにD&Dしてフォルダ内のリスト取得
rem コマンドプロンプトに表示
rem forfiles /p %~p1 /c "cmd /c echo @fname @ext"
rem テキストファイルに書き出し(batのある場所にtmp.txt一時作成)
forfiles /p %1 /c "cmd /c echo @fname@ext>> %~p0\tmp0.txt"
setlocal enabledelayedexpansion
for /f "delims=" %%a in (%~p0\tmp0.txt) do (
set line0=%%a
set line1=!line0:""=.!
set line1=!line1:"=!
echo !line1!>>%~p0\tmp1.txt
)
rem type %~p0\tmp0.txt > %~p0\rawlist_%~n1.txt
type %~p0\tmp1.txt > %~p0\FILELIST01_%~n1.txt
del %~p0\tmp0.txt
del %~p0\tmp1.txt
endlocal
---------------
以上。
D&Dするフォルダと同じドライブにbatを保存して使用してください!
<参考サイト>
↑
↓
--------------------------------------------
ちなみに、かなり特殊だけどカスタマイズしたのがこちら。
【テキスト1】ファイル名(拡張子なし)取得して、前後に文字列挿入&連番
【テキスト1】ファイルのフルパス名取得して、前後に文字列挿入&連番
2019年4月8日月曜日
コマンドプロンプトでテキストファイルの先頭・末尾に文字列挿入
備忘録
簡単かと思ったら時間かかったのでメモ。
Batにして時短に活用。
rem test1.txtの各行の先頭と末尾に文字列挿入してtest1_edit.txtとしてファイル作成
rem ドラッグ&ドロップしたテキストファイルの中身に対して、各行の先頭と末尾に文字列挿入してaddText.txtとしてファイル作成
rem ドラッグしたファイルは %1、ちなみにこのバッチファイル自体は%0、で取得できる
@echo off
SETLOCAL enabledelayedexpansion
set PRE=pre_
set SUF=_suf
set LINE =
for /f "delims=" %%a in (%1) do (
set LINE=!PRE!%%a!SUF!
echo !LINE! >> tmp.txt
)
type tmp.txt > test1_edit.txt
del tmp.txt
endlocal
簡単かと思ったら時間かかったのでメモ。
Batにして時短に活用。
rem test1.txtの各行の先頭と末尾に文字列挿入してtest1_edit.txtとしてファイル作成
rem ドラッグ&ドロップしたテキストファイルの中身に対して、各行の先頭と末尾に文字列挿入してaddText.txtとしてファイル作成
rem ドラッグしたファイルは %1、ちなみにこのバッチファイル自体は%0、で取得できる
@echo off
SETLOCAL enabledelayedexpansion
set PRE=pre_
set SUF=_suf
set LINE =
for /f "delims=" %%a in (%1) do (
set LINE=!PRE!%%a!SUF!
echo !LINE! >> tmp.txt
)
type tmp.txt > test1_edit.txt
del tmp.txt
endlocal
2019年4月3日水曜日
末端のフォルダ名だけ抽出取得 AE Script メモ
Aftereffects Script Javascript
フォルダ選択ダイアログで、末端のフォルダ名だけ抽出して取得する
//フォルダ選択ダイアログ
var prjPath = "S:/19001MB_CaptainTusbasa/06_afx/footage/zz_CH_Material/sp011"
var defaltDir = new Folder(prjPath);
dirObj = defaltDir.selectDlg("フォルダを選択してください");
dirPath = dirObj.fsName; // フォルダのパス名取得
fileList = dirObj.getFiles(); // フォルダ内のファイルリスト化
alert (dirPath);
dirName = dirPath.split("\\").slice(-1)[0]; //末尾のフォルダ名だけ取得
alert (dirName);
------------------
参考
http://nakatoji.lolipop.jp/index.php/extendscript/fileaccess/fileaccess-list/374-2014-06-04-20-42-9
http://aejsx.hiroshisaito.net/propertygroup-object/methods/property
https://sites.google.com/site/annamillersclub/script-menu/gyakubikiscript/%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%82%92%E5%88%A4%E5%88%A5%E3%81%99%E3%82%8B
http://xirasaya.com/?m=detail&hid=176
文字列入力ボックス
http://www.openspc2.org/book/AfterEffectsCS6/easy/dialog/003/index.html
バックスラッシュを文字列に使うときは2回連続で(\\とか)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
配列の末尾を抽出する方法 .slice(-1)[0]
https://qiita.com/kerupani129/items/64ce1e80eb8efb4c2b21
フォルダ選択ダイアログで、末端のフォルダ名だけ抽出して取得する
//フォルダ選択ダイアログ
var prjPath = "S:/19001MB_CaptainTusbasa/06_afx/footage/zz_CH_Material/sp011"
var defaltDir = new Folder(prjPath);
dirObj = defaltDir.selectDlg("フォルダを選択してください");
dirPath = dirObj.fsName; // フォルダのパス名取得
fileList = dirObj.getFiles(); // フォルダ内のファイルリスト化
alert (dirPath);
dirName = dirPath.split("\\").slice(-1)[0]; //末尾のフォルダ名だけ取得
alert (dirName);
------------------
参考
http://nakatoji.lolipop.jp/index.php/extendscript/fileaccess/fileaccess-list/374-2014-06-04-20-42-9
http://aejsx.hiroshisaito.net/propertygroup-object/methods/property
https://sites.google.com/site/annamillersclub/script-menu/gyakubikiscript/%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%82%92%E5%88%A4%E5%88%A5%E3%81%99%E3%82%8B
http://xirasaya.com/?m=detail&hid=176
文字列入力ボックス
http://www.openspc2.org/book/AfterEffectsCS6/easy/dialog/003/index.html
バックスラッシュを文字列に使うときは2回連続で(\\とか)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
配列の末尾を抽出する方法 .slice(-1)[0]
https://qiita.com/kerupani129/items/64ce1e80eb8efb4c2b21
2019年4月1日月曜日
AEで時短Scriptいろいろ検証
■複数のフッテージ名をクリップボードにコピー
//★フッテージ名をリストで取得したいとき★
//Projectパネルで複数選択してScript実行
//あとはエクセルに貼り付け、データ/テキストから列へ/カンマONでOK/コピーして形式を選択して貼り付け/列と行の入れ替え。
var myItems = app.project.selection;
var myItemName = new Array(app.project.selection.length);
for (var i=0; i <myItems.length; i++){
myItemName[i] = myItems[i].name;
}
//alert(myItemName);
prompt("test",myItemName);
----
参考
http://www.openspc2.org/reibun/AfterEffects6.0/JavaScript/ref/Global/prompt/index.html
https://aruo.net/arbk/blog/article/change_comma_separated_data_into_cells_on_spreadsheets
■コンポジションの複製
■レイヤーの置き換え
■ その他 雑メモ
//選択したアイテムをリスト化(名前取得) ★
var selItem = app.project.selection; //選択しているコンポジションをリスト化
var selName = [] ; //それの名前を入れるリスト
var newCompList = []; //複製したコンポのリスト
//基礎勉強の部分
//alert(selItem); //選択したアイテムタイプ名の表示
//alert(selItem[0].name); //最初に選択したアイテム名表示
//alert("選択したコンポジションの数 "+selItem.length); //コンポジションの数
for(i=0;i<selItem.length;i++){
selName.push(selItem[i].name); //選択アイテム名をリストに追加
}
//Lv1コンポ(親)の複製
//コンポジション複製:
newComp = selItem[0].duplicate(); //選択したコンポを複製
newComp.name = selName[0]+"_dupCmp"; //複製したコンポの名前変更
newCompList.push(newComp);
//Lv2コンポの複製
//コンポジション複製:
newComp = selItem[1].duplicate(); //選択したコンポを複製
newComp.name = selName[1]+"_dupCmp"; //複製したコンポの名前変更
newCompList.push(newComp);
//コンポ内のレイヤー置き換え
newCompList[0].layer(3).replaceSource(newCompList[1],false);
alert(selName); //コンポジションのリスト名取得と表示
alert(newCompList);
newComp.duration = shotComp[i].duration; //複製したコンポの尺変更(秒で)
newComp.parentFolder = selItem[2];
newMSKComp.push(newComp);
■フォルダ選択ダイアログ
http://nakatoji.lolipop.jp/index.php/extendscript/fileaccess/fileaccess-list/374-2014-06-04-20-42-9
//★フッテージ名をリストで取得したいとき★
//Projectパネルで複数選択してScript実行
//あとはエクセルに貼り付け、データ/テキストから列へ/カンマONでOK/コピーして形式を選択して貼り付け/列と行の入れ替え。
var myItems = app.project.selection;
var myItemName = new Array(app.project.selection.length);
for (var i=0; i <myItems.length; i++){
myItemName[i] = myItems[i].name;
}
//alert(myItemName);
prompt("test",myItemName);
----
参考
http://www.openspc2.org/reibun/AfterEffects6.0/JavaScript/ref/Global/prompt/index.html
https://aruo.net/arbk/blog/article/change_comma_separated_data_into_cells_on_spreadsheets
■コンポジションの複製
■レイヤーの置き換え
■ その他 雑メモ
//選択したアイテムをリスト化(名前取得) ★
var selItem = app.project.selection; //選択しているコンポジションをリスト化
var selName = [] ; //それの名前を入れるリスト
var newCompList = []; //複製したコンポのリスト
//基礎勉強の部分
//alert(selItem); //選択したアイテムタイプ名の表示
//alert(selItem[0].name); //最初に選択したアイテム名表示
//alert("選択したコンポジションの数 "+selItem.length); //コンポジションの数
for(i=0;i<selItem.length;i++){
selName.push(selItem[i].name); //選択アイテム名をリストに追加
}
//Lv1コンポ(親)の複製
//コンポジション複製:
newComp = selItem[0].duplicate(); //選択したコンポを複製
newComp.name = selName[0]+"_dupCmp"; //複製したコンポの名前変更
newCompList.push(newComp);
//Lv2コンポの複製
//コンポジション複製:
newComp = selItem[1].duplicate(); //選択したコンポを複製
newComp.name = selName[1]+"_dupCmp"; //複製したコンポの名前変更
newCompList.push(newComp);
//コンポ内のレイヤー置き換え
newCompList[0].layer(3).replaceSource(newCompList[1],false);
alert(selName); //コンポジションのリスト名取得と表示
alert(newCompList);
newComp.parentFolder = selItem[2];
newMSKComp.push(newComp);
■フォルダ選択ダイアログ
http://nakatoji.lolipop.jp/index.php/extendscript/fileaccess/fileaccess-list/374-2014-06-04-20-42-9