2008年12月26日金曜日

[LSL] 複数の文字列を一気に置き換えたい

スクリプト カテゴリに登録しているわりに最近スクリプトの話題が少ないので、、、(回転と位置のお話の続きはそのうち、、、でも、他の方の素晴らしい記事が最近あがっているので、、、ちょっとお休みかも)

笑い話に近いのですが、、、

よくエディタとかで「置換」または「すべて置換」というメニューで、ある文字列を違う文字列に置き換えることありますよね。それを LSL でやりたい、と思いました。それも複数の文字列をそれぞれ違うものに一気に置き換えたかったのです。

検索したら、lslwiki のライブラリに Sample スクリプトがあり、また、ちょっと考えると、置き換えたいストリングの長さを取得 (llStringLength) して、置き換えたい文字列のパターンでその文字がある位置を特定 (llSubStringIndex) して、置き換えたい文字列を削除 (llDeleteSubString) (もしくはその部分をさけて)して、そこに置き換えるべき文字列をいれ、原文に戻し、また、同じ処理を繰り返し、置き換えたい文字列がなくなることを意味する llSubStringIndex の戻り値が -1 になるまで行う、、というようなスクリプトになると考えました。

そこで lslwiki のサンプルを元に書いたのが、、、こんな感じです。(普通はユーザー関数にするのでこんなことしませんが、タッチすると確認できるようにしてみました。) A を 1 に、B を 2 に、C を 3 に、、、というように E まで置き換えます。

string text = "このようなD長いA文字列をBある文字がEきたらC分解してAリストにCいれます";
list rs_checkList = ["A", "B", "C", "D", "E"];
list rs_replaceList = ["1", "2", "3", "4", "5"];

default{
    touch_start(integer total_number){
        llResetTime();
        string source = text;
        integer i = 0;
        integer max = llGetListLength(rs_checkList);
        string p = "";
        string r = "";
        integer len = 0;
        integer pos = -1;
        for (; i<max; ++i){
            p = llList2String(rs_checkList, i);
            r = llList2String(rs_replaceList, i);
            len = llStringLength(p);
            while (llSubStringIndex(source,p) > -1) {
                 pos = llSubStringIndex(source, p);
                 if (llStringLength(source) == len) {
                       source = r;
                 } else if (pos == 0) {
                       source = r+llGetSubString(source, pos+len, -1);
                 } else if (pos == llStringLength(source) - len) {
                       source = llGetSubString(source, 0, pos-1) + r;
                 } else {
                       source = llGetSubString(source, 0, pos-1) + r + llGetSubString(source, pos+len, -1);
                 }
             }
         }
         llSay(0,text);
         llSay(0,source);
         llSay(0,(string)llGetTime());
     }
}

でも、これらの処理が変数の宣言を除くと、たった2行程度で終わる、、、のを知って愕然としました。(笑

llParseString2List / llParseStringKeepNulls で文字列分解

ポイントは llParseString2List や llParseStringKeepNulls を使って、指定文字列で List に分解して、llDumpList2String のセパレータに置き換えたい文字をいれて、分解された List をつなげることを繰り返す、という方法です。
string text = "このようなD長いA文字列をBある文字がEきたらC分解してDリストにCいれます";
list rs_checkList = ["A", "B", "C", "D", "E"];
list rs_replaceList = ["1", "2", "3", "4", "5"];
default{
    touch_start(integer total_number)    {
        llResetTime();
        string source = text;
        list sourceList = [];
        integer num = llGetListLength(rs_checkList);
        integer i = 0;
        for(;i<num;++i){
            sourceList = llParseStringKeepNulls(source, llList2List(rs_checkList, i, i), []);
            source = llDumpList2String(sourceList, llList2String(rs_replaceList, i));
        }
        llSay(0,text);
        llSay(0,source);
        llSay(0,(string)llGetTime());
    }
}
み、、、短い、、、(@@
気を取り直して、llParseStiring2List や llParseStringKeepNulls と文字列、置き換え、string, replace などで検索すると、文字列の置き換えで皆さんあたりまえのようにやられていることを発見、、、。
処理時間もあきらかに短くなります。半分以下ですね。
気がついてよかった、、、と思わされた一件でした。

2008年12月24日水曜日

あ、、、入賞してしまったり・・・

入賞しちゃった・・・・

入賞作品発表★BlackChiristmasSSコンテスト by Stone Age Entertainment

まさかコメントがそのまま載るとは思いませんでした。(笑
500L$ ゲットです!ダンス アニメーション購入資金ですね。
T さんのパーティクル(ぜんぜん伏字の意味ないし、、)、R ちゃんの豊富な情報のおかげです。

この R ちゃん情報はshige さんが自分のお店を紹介されたときに教えてくれたそうです。

2008年12月22日月曜日

[MLDU] 保存できるアニメーションの数

今日 22 日は予定通りなら Studio4D さんの新作ダンス アニメーションが発売される日
このところ精力的にリリースされている Studio4D さんには感謝です。
先日は Sine Wave も新作アニメーションのリリースがありました。種類、数ともに豊富な Sine Wave ですが、個人的に最近リリースされるダンス アニメーションは Sine Wave らしさ、、、というか、あの動きの大きな、華麗な感じのものが少なくなってきているような気がします。とはいえ、、、、買っちゃうんですよね ^^;

Sine Wave New Dances

よく MLDU (Massive Link Dance Unit) をご購入されたお客様から「MLDU にはダンス アニメーションいくつ入るのですかぁ?」と聞かれます。 これ、、、ほんとうに入れられない状態まで試したことがないのですが、少なくとも 200 以上のダンス アニメーションをいれることができます。過去の顛末はこちらから。。。

ASUKA SIM のクラブ雷神で LINZOO さんに聞いてみたら実績としての最大値になるでしょう。いま、、、いくつなんだろ?(笑

私が個人的に使っているのも今日時点で 186 のアニメーションが入っていますから、LINZOO さんところだともしかすると 300 くらいになっているかもしれません。

よって、、、ほぼ、困らない数は入れられますよ~、というのがいつもの回答になります。(笑
あ、あと MLDU はクラブ エルフィンさんのところAccess SIM さんのところ、そのほかいくつかのクラブでお使いいただいております。感謝 m(_ _)m

もともと MLDU はメガダンスフロア、ダンスクラブ向けに作ったので、MLDU にいれた数百のダンスから「お気に入り」をセレクトしてノートカードに書き込み、再生順番、再生秒数(オプション)を指定します。このノートカードを複数持つことで、ダイアログのボタンでダンスセットの切り替えをします。このダンスの指定のほうがスクリプト的にはリストを使うのでシビアですが、これも 40 や 50 くらいなら問題ありません。スクリプトが使える残りメモリーも表示されますが、たぶん 200 とかは余裕でしょう。

当初、個人向けを別に作っていたのですが、仕組み一緒だし、どうせなら同じもので、、、というのが MLDU4 になります。ですので、 HUD モードはどちらかといえば個人、少人数向けでの使用を想定していますし、ダンスボールモードはダンスフロアでの利用を想定していました。
そうそう、個人向け、、、ということでノートカードを作らなくても、MLDU にある全ダンスを順番に踊ることができます。[全ダンス] を選べば、MLDU 内にある全ダンスを楽しむことができます。個人利用はこっちのほうが多いのかな。(ただ、お友達の使い方を見ると、ショップ別とかにダンスをわけて、ノートカードによるダンスセットをつくってますね)

海外製に多いダンス HUD タイプのものは地面に Rez してダンスをいれますよね。MLDU4 ももちろんそうなのですが、上述のように個人用とダンスフロア用を一緒にしたので、地面に Rez するとダンスボールになり、HUD として装着すると HUD のサイズとテクスチャを使うので、Rez して見失うことはありません。

ということで、保存できるダンスアニメーション数など気にせず STUDIO4D の新しいダンスをゲットして、MLDU4 にいれてください^^
MLDU4 は STUDIO4D さんのアニメーションショップで購入できます。まずは 1L$ のお試し版を使ってくださいね~。

2008年12月17日水曜日

X'mas カードにいかが?-ElfYourself-

elfyourself8
GION Project プロデューサーの Summy さんの YouTube のビデオをみて、そういえばこのサービス話題になったかも、、、と思い出して作ってみました(笑
Send your own ElfYourself eCards


おもしろい^^
これはすべて Web 上で作ることができます。また、写真も顔を切り抜く、、、なんて作業せずに、とにかく顔がある写真を使えばすぐに作れます。作って、こうやって貼り付けるだけなら無料(!!)なので試してみてはいかがでしょう?
作り方は以下になります。

1. まずは顔が映っているフォトを用意しておきます。
2. http://elfyourself.jibjab.com/ にいきます。
3. [Upload Photo] をクリックします。
elfyourself1
4. アップロードする画像を選ぶウィンドウがでるので、使用する画像を選びます。
5. [Sacale] を使ってサイズをあわせます。傾きを変えたい場合は [Rotate] のスライダーを動かします。
elfyourself2
6. 顔の周りにあるポイントを動かして、顔の輪郭にあわせます。中の画像をドラッグすると動きますので、顔が中心にくるようにして調整することができますよ。調整しおわったら [Done] を押します。
elfyourself3
7. 他の人の顔もアップできます。で、次にダンスを選びます。今回はディスコを選んでみます^^
elfyourself4
8. 作成された動画を見ることができます。ここで [Download] を選ぶと有料(4.99$) を支払う必要がありますが、[Emial/Embed] だと無料で再利用することができます。
elfyourself5
9. 名前とパスワード、生年月日をいれます。すると、以下の画面になるので [Embed] を選びます。
elfyourself6
10. Embed コードがあるのでそれをコピーします。
elfyourself7
これで準備オッケーです。この Embed コードを貼り付けたのが以下(Sさん、Rさん、無断で使っちゃった、、、許して^^)
Send your own ElfYourself eCards

無料の場合は期限があり、そこで消えることになるので、残したい人は 4.99 ドルでダウンロードする、ということになりますね。
他のダンスなんかも一度画像をアップすると楽しめます!
Send your own ElfYourself eCards

面白いですね~。

2008年12月15日月曜日

スナップショットをブログ感覚で - flickr -

前回の投稿でものすごく綺麗なフォトが flickr にあがってます、、、という紹介をしましたが、そういう使い方じゃなく、ブログ感覚で気軽にスナップショットをあげて、その場所や SLURL なんかを一緒に付記するなんて使い方を最近してます。

PC の PrintScreen キーで SS (Screen Shot : スクリーンショット) 撮って、フォトショとかで切り取って png や jpeg で保存して、そこからアップロードって、、めんどくさいと思っている人にはいい方法かもしれません。flickr にさえあげておけば、slmame みたいなブログでもその画像を再利用できますから。

こんな感じで。(ただいま INSOLENCE で恒例の X'mas プレゼント中~です)
3106745883_fab0a74fe2

ですが、、、あいかわらず、flickr は何がどこにあるのかわかりづらく・・・(笑

まず、flickr のアカウント、、、無料なのでとってみましょう。アカウントの作り方はこのあたり、、を参考に
アカウントをもっていらっしゃるのであれば、自分の Home ページのメニュータブの [You] をクリックして展開し、[Your Account] をクリックします。

flickr1

すると、あなたのアカウント情報が表示されます。
アカウント情報の [Email] をクリックします。
flickr2
すると、flickr に登録している email アドレスと一緒に [Your Flickr upload email] というセクションがあり、そこに email アドレスが表示されています。このアドレスに画像を送ることで flickr に登録される仕組みになっています。
flickr3
このアドレスを書きとめておいて、次は Second Life からの操作となります。
Second Life Viewer でのスナップショットの撮り方ですが、通常は [ファイル] - [Take Snapshot(日本語だとスナップショットを撮る?)] ですが、そこに書かれているショートカットの [Ctrl+Shift+S] を覚えると楽です。これを押すと [SnapShot Previe] ウィンドウが開きます。
flickr4
ポイントは [Send via email] (ごめんなさい、英語で、、)が選ばれていることと、[Size] を好みのものに調整していくことでしょう。あと、取り直しは何度でもききますから、良いショットを撮って [Send] ボタンを押します。
すると、スナップショット送信用のウィンドウが開くので、場所の情報や SLURL などをコピーして、本文のところに貼り付けます。残念なのは日本語は通らないようなので注意してください。これは flickr の問題ではなく Linden の問題です、、、。
あと、送信先の email アドレスは、さきほど flickr で書き留めておいた email アドレスになりますね。
flickr5s
これで [Send] で flickr に送信されます。意外にこの登録処理は早くて、flickr サイトの自分の photostream にいくと、すでに登録されていることが確認できます。この時、画像つき email には Linden のロゴも張り付いているのでこれを削除します。
flickr6
これで画像登録終了です。
これ、ブログよりお気軽な感じで記録を残せるのでお勧めです。
あとは、Linden がメールとかエンコードとか、、、ちゃんと対応する気になってくれると日本語が、、、(お友達の話だと、結構前からリクエストがあがっているようなのですが、、、)

2008年12月13日土曜日

Beautiful Photos! - flickr -

セカンドライフでの写真といえばお友達の bark Aabye さんを思い出すのですが(って、bark さん、NHK で紹介されていたのね、、、知らなかった)、以前にも紹介したように flickr にはいろいろなグループ、個人がスナップショットから芸術性の高いものまで投稿されています。

画像ありました~」(Second Life Art グループを紹介)
SL 写真共有 flickr(1)」~「SL 写真共有 flickr(4)」 (flickr への登録方法を紹介)

最近、SL-Babes というサイトの存在を知って、そこの Photo を見ることが多いのですが、このサイト、要は flickr に投稿された画像から(たぶん、、、サイト所有者の個人的な好み?(笑))センスのよい photo を紹介している、、、ということみたいですね。 ただ、flickr に SL-Babes.com というグループがあるので、参加者それぞれが自分の画像をこのグループに投稿して、そこから選んでいるような気がします。(*1) flickr には本当にたくさんの人たちが画像投稿しているので、このようなサイト、グループは素敵な画像を探すのに重宝するかもしれません。

flickr の bark さんの flickr photostream も大好きなのですが、この方の photostream はタメ息が、、、、

Dee Dee Deepdene's photostream


bark さんは画像加工しないというポリシーのもとで素敵な photo をアップしてくれますが、この方は2007年の12月くらいの初期の作品から順を追ってみると、だんだん画像加工やアングル、ポーズ、オリジナル撮影時の陰影の使い方などがどんどん上達(な、、なんてことを言える立場じゃないですが)していくのがわかります。最近のもので驚いたのはこれ。画像をクリックすると flickr でオリジナルを見ることができます。

by Dee Dee Deepdene from flickr photostream

すごすぎ、、、

(*1) flickr の SL-Baes.com グループに参加したら、ベストショットを sl-babes.com で公開するのがルール、、、とありました。
(*2) 追記:DeeDee さんの Back To Nature という set もかなりすごいです。flickr スライドショーはこちら。

2008年12月11日木曜日

高画質モードで貼り付け!- YouTube -

[追記 2009年1月] 通常の埋め込みでも動画再生して HQ モードが有効だと埋め込みプレーヤーの右下に [HQ] ボタンが表示されるようになりましたね!
以前、"High Quality な動画を楽しむ" というタイトルで動画の画質が悪かった YouTube に高画質モードができて面白くなってきました~、という投稿をしました。そこでいくつかの動画サービスの埋込みを試して高画質モードの動画の貼り付けをしましたが、YouTube の高画質モードは埋込みには対応してなくて残念だった記憶がありましたが、、、

世の中に探し出す人はいるものです・・・

ソースは My Digital Life というブログの "How to Embed High Quality and Higher Resolution YouTube videos on Blog or Website" という記事です。

で、早速すでに YouTube に投稿してある Yaz さんの曲の Instant Sorrow で PV 風味に(笑 作った動画を試したのが以下。ただ、やっぱりダウンロードする動画のサイズが大きくなるため、再生している動画がカクカクする方は、ピンクのダウンロードバーが最後にいくまで一時停止して待ってから、再生したほうがいいかもしれません。

Instant Sorrow のタイトル、蛍パーティクル、夜空の星・・・たしかに高画質モード!
あと、、、再生したらモノラルになってしまっていた曲が・・・ステレオになってるかも。
この高画質モードでのブログの埋めこみはちょっとしたおまじないを唱えるだけです。設定の仕方は以下になります。

高画質モード埋込みコードのおまじまい

1. YouTube で貼り付けたい動画の [ 埋込み ] をコピーする。歯車アイコンをクリックすると埋めこみプレーヤーの色やサイズも変更できます。

2. コピーしたコードをブログの投稿編集に貼り付ける。ここの slmame だと [デザインモード] にしないで貼り付けですね。

3. 貼り付けたコードは以下のようになっているはずです。最初の <param name.... ></param> の vallue= と、<embed src=...></embed> の中の src= を確認。(青にしているところです)

<object width="500" height="405">
<param name="movie" value="http://www.youtube.com/v/3hIdFNdK64Q&hl=ja&fs=1
&color1=0x3a3a3a&color2=0x999999&border=1"
>
</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/3hIdFNdK64Q&hl=ja&fs=1
&color1=0x3a3a3a&color2=0x999999&border=1"

type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true"
width="500"
height="405">
</embed>
</object>

4. 上記の 2つの文字列の最後におまじないである &ap=%2526fmt%3D18 を入れます。以下のようになります。ダブルクォーテーションの内側にいれてください。

<object width="500" height="405">
<param name="movie" value="http://www.youtube.com/v/3hIdFNdK64Q&hl=ja&fs=1
&color1=0x3a3a3a&color2=0x999999&border=1
&ap=%2526fmt%3D18">
</param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/3hIdFNdK64Q&hl=ja&fs=1
&color1=0x3a3a3a&color2=0x999999&border=1
&ap=%2526fmt%3D18" 
type="application/x-shockwave-flash"
allowscriptaccess="always"
allowfullscreen="true" width="500"
height="405">
</embed>
</object>

5. これで完了です。実際に貼り付けたのが以下です。これも Yaz さんの曲の PARADOX を使った PV 風味なビデオ(笑

このビデオ、YouTube のほうでは 「高画質でみる」 がありません。もともとビットレートを落としたのか、もとの画質そのものがそれほど綺麗ではないから、、、だと思いますが、PARADOX のタイトルなどを比較すると高画質モードの動画が再生されているようです。
この方法を紹介しているブログにはさらに 720P の HD モードの再生方法も紹介しています。
How to Embed and Play 720p HD (High Definition) YouTube Videos
このおまじないをつかっても、720p に対応したものでないと YouTube から叱られますが、もし対応していると、、、、こんな動画になります。

YouTube がどんどんすごくなってきているかも・・・
[追記] あれれ、、、映画「オーストラリア」のトレーラー、、、日本から見られなくなったみたいです。
では、こちらを、、、

[追記] あれれ、、、またまた見られなくなってるし。では、、こちらで ^_^