Flash Pro CS6に、音声ファイルを数百ファイル、ライブラリに読み込みたいんだけど、手で1ファイルずつ取り込みなんてしたくないよね。
そこでJSFL (PhotoshopやIllustratorでのjsx) を使うよ。
ググったら同じことをしている人がいた。 http://stackoverflow.com/questions/12199900/how-to-use-jsfl-to-import-lot-of-bitmaps-from-different-folder-to-library-and-ke 以下は、そこのコードほぼそのまま。 ライブラリに階層フォルダを作るやりかたを少し変えている。
import-files-to-lib.jsfl
// http://stackoverflow.com/questions/12199900/how-to-use-jsfl-to-import-lot-of-bitmaps-from-different-folder-to-library-and-ke
var dom = fl.getDocumentDOM();
fl.outputPanel.clear()
var fileList = new Array();
function listFile(filepath){
var files=FLfile.listFolder(filepath,"files");
for(i=0;i<files.length;i++){
if(filepath.lastIndexOf("/") != filepath.length -1 ){
filepath+="/";
}
fileList.push(filepath + files[i]);
}
var folders = FLfile.listFolder(filepath , "directories");
for(var j=0;j<folders.length;j++) {
var subPath = filepath + folders[j] + "/";
listFile(subPath);
//make sure that this stops at a reasonable point.
if (fileList.length > 1000)
return;
}
}
function importFile(URI){
var filename = URI.slice(URI.lastIndexOf("/")+1);
if(dom.importFile(URI)) {
var subFolder = URI.slice(URI.slice(0,URI.lastIndexOf("/")).lastIndexOf('/')+1, URI.lastIndexOf('/'));
if(subFolder){
dom.library.newFolder(subFolder);
dom.library.moveToFolder(subFolder, filename, true);
}
}
return;
}
var folder = fl.browseForFolderURL("Select a folder.")
if(folder) listFile(folder);
for(i=0; i<fileList.length; i++){
importFile(fileList[i])
}
これを import-files-to-lib.jsfl
とかのファイル名で保存(UTF-8でBOMつける必要あり)して、FlashProの[コマンド - コマンドを実行]で実行。
フォルダを指定すると、そのフォルダ以下にある150ファイルも10秒でライブラリ読み込み完了。
ライブラリのフォルダは、R:\a\b\voice_gack\あO2E.wav
の場合 voice_gack
という最下層フォルダ名だけ使う。
リンケージを追加
ただ、こうやって読み込んだファイルはリンケージがついてないので、ActionScriptから制御できない。リンケージもつける。
add-linkage-all.jsfl
fl.outputPanel.clear();
var items = fl.getDocumentDOM().library.items;
//var items = fl.getDocumentDOM().library.getSelectedItems();
for(var i=0; i<items.length; i++){
if(items[i].itemType == 'folder') continue;
//名前から拡張子を除く
if(items[i].name.match(/\./)){
fl.trace(items[i].name + ' -> ' + items[i].name.slice(items[i].name.indexOf('/')+1, items[i].name.lastIndexOf('.')));
//items[i].name = items[i].name.slice(items[i].name.indexOf('/')+1, items[i].name.lastIndexOf('.'));
}
//リンケージ「ActionScript用に書きだし」「最初のフレームに書き出し」
items[i].linkageExportForRS = false;
items[i].linkageExportForAS = true;
items[i].linkageExportInFirstFrame = true;
items[i].linkageClassName = items[i].name.slice(items[i].name.indexOf('/')+1, items[i].name.lastIndexOf('.'));
}
このスクリプトは「ライブラリ」にあるすべてのアイテムのリンケージを変えてしまう。選択したアイテムのみリンケージを変えるには、var items = fl.getDocumentDOM().library.getSelectedItems();
の行のコメントを外してその前の行をコメント化する。
このスクリプトを[コマンド - コマンドを実行]で実行。すると元のファイル名から拡張子外した名前をリンケージの「クラス名」に設定してくれる。
環境
- Windows7 64bit
- FlashPro CS6
0 件のコメント:
コメントを投稿