忍者ブログ
Admin / Write / Res
SecondLifeの気ままライフ
<< 03   2024/04   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30     05 >>
[111]  [110]  [109]  [108]  [107]  [106]  [105]  [104]  [103]  [102]  [101
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

以前作成した1プリムで88音階弾けるキーボードの中身スクリプトの公開
私はプロではないから色々と見苦しいところはある
UUID(サウンドファイル)のリストは公開しないのでマスクしてます
以下のような感じ

float x=256;
float y=1.0;
float Vol;
integer Pos;
integer RePos;
integer SarchTone;

list Tuch_list=[
0,0,0,
1,1,1,
2,2,2,2,
3,
4,4,4,
5,
6,6,6,
7,7,7,7,
8,
9,9,9,
10,
11,11,11,
12,
13,13,13,
14,14,14,14,
15,
16,16,16,
17,
18,18,18,
19,19,19,19,
20,
21,21,21,
22,
23,23,23,
24,
25,25,25,
26,26,26,26,
27,
28,28,28,
29,
30,30,30,
31,31,31,31,
32,
33,33,33,
34,
35,35,35,
36,
37,37,37,
38,38,38,38,
39,
40,40,40,
41,
42,42,42,
43,43,43,43,
44,
45,45,45,
46,
47,47,47,
48,
49,49,49,
50,50,50,50,
51,
52,52,52,
53,
54,54,54,
55,55,55,55,
56,
57,57,57,
58,
59,59,59,
60,
61,61,61,
62,62,62,62,
63,
64,64,64,
65,
66,66,66,
67,67,67,67,
68,
69,69,69,
70,
71,71,71,
72,
73,73,73,
74,74,74,74,
75,
76,76,76,
77,
78,78,78,
79,79,79,79,
80,
81,81,81,
82,
83,83,83,
84,
85,85,85,
86,86,86,86,
87,
88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,
88,88,88,88
];

list Tone_list=[
"A0","5933feb1-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A0#","be78cc90-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B0","b72b9e7b-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C1","26ed0f29-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C1#","76694637-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D1","0d881f97-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D1#","0e835aad-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E1","3a398b6b-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F1","ab672f8e-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F1#","f06340d9-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G1","b1f87158-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G1#","f4775bf5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A1","7e15855c-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A1#","ce43d232-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B1","fe473eab-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C2","c25a576f-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C2#","cd99b2f6-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D2","cc10ee3d-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D2#","9c113876-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E2","ee9c4acd-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F2","5b1c7dc5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F2#","6ec25e6e-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G2","677ea950-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G2#","c2c99e3b-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A2","eba2c7d5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A2#","a31099c6-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B2","092a670a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C3","fa03cf47-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C3#","7f1f7866-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D3","f327e153-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D3#","39b4b3c9-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E3","3c076f2a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F3","7e0704fc-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F3#","e17f5504-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G3","2c51b725-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G3#","fbcbff5f-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A3","5dd2ea5c-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A3#","62cae7e3-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B3","65624290-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C4","9699d668-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C4#","5b50bf02-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D4","0be195d5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D4#","64d64536-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E4","b99a4959-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F4","e439ca32-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F4#","a89cded2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G4","9f04a14d-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G4#","31c5ed33-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A4","b00dd1ca-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A4#","b88f3a03-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B4","8b35edf8-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C5","f2b282ef-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C5#","0c3c70bd-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D5","dbb56bae-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D5#","a8ca1900-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E5","326758ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F5","811e0c40-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F5#","c0fa3097-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G5","69ebb17e-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G5#","376dc1fb-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A5","d911be21-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A5#","855b686c-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B5","e47fe4bc-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C6","7d7fe1b5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C6#","24a38737-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D6","6454b1ed-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D6#","df6af006-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E6","6f3b93ee-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F6","2a3898a9-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F6#","451d4de5-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G6","1d438104-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G6#","ee56b417-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A6","0530c909-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A6#","a11a4066-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B6","786d3aca-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C7","65476210-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C7#","2964dcd3-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D7","ec1568fc-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"D7#","c24faf67-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"E7","66055e4a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F7","0ea810a7-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"F7#","c233495e-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G7","b62c53c2-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"G7#","e2481d30-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A7","929068ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"A7#","de213874-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"B7","191b63ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"C8","4b82c978-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"RR","4f559bb0-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
];

default{
state_entry()
{
Vol = 1.0 ;
}

touch_start(integer total_number)
{
RePos = 88;
}

touch(integer total_number)
{
vector pos = llDetectedTouchST(0);
Pos = ((llFloor((pos.x*10)*x)/10)*(integer)y)+llCeil(pos.y*y);
SarchTone = llList2Integer(Tuch_list,Pos);

if ( RePos != SarchTone)
{
llTriggerSound(llList2Key(Tone_list,SarchTone*2+1),Vol);
}
RePos = SarchTone;
}
}

とまぁこのようになっているのだ
ほとんどがリストデータばっかしw
default{~}がキーボードのメイン処理部分
そのまま使うコトはキーボードのスカルプUVMAPで作成したプリムと組み合わせないとヘンになるからムリ
でもこれから覚えたいかたの参考に少しでも役に立つならいいかな

解説

float x=256;
float y=1.0;
float Vol;
integer Pos;
integer RePos;
integer SarchTone;

 変数の宣言と定義?だったかな
 float は浮動小数点扱う
 integer は整数
 x=256 y=1 これはスカルプテッドプリムに合わせてここではこの数字で固定
 Vol のほうはここでは数字固定しない
  ここで固定しても良かったんだけど使いまわし応用のためw
 Pos RePos は触った場所の位置を入れておくためのもの
 SarchTone はタッチした位置でトーンリスト番号を示すためのもの

list Tuch_list=[

 コイツはスカルプテッドプリムの面の位置を音階に変換するためのデータベース
 list が宣言で Tuch_list がリストネーム
 =[~~~~] が Tuch_list に入れる中身のデータとなるわけ
 キーボードをスカルでいくつか種類造ったから応用しやすいように別置き

list Tone_list=[

 こちらは音階とそれに対応したサウンドファイルのUUIDのリスト
 ある意味心臓部分
 UUIDを差し替えて別な音色にしやすいように敢えて別置きにしている

default{

 ここから先がメインの処理部分になる

state_entry()
{
Vol = 1.0 ;
}

 Vol サウンドファイルの音量の変数なんでこんな所で固定してるんだw
 い~~の!
 本来は音量コントロールするハズだったけど1プリキーボでムリだったから残骸w
 別Verではきちんと音量コントロールできるようになってるw

touch_start(integer total_number)
{
RePos = 88;
}

 プリムをクリックした時に実行することが書いてある
 この場合だと RePos に 88 をセットしてくださいってことになる
 ちなみに 88 は無音です
 後述する touch(integer total_number) だけだとうまく機能しないので初めに
 コレやっとかなければダメだったみたい
 コレすごく悩んだっけな~
 どうしてもわからなくてFさんに助けられたっけ
 ありがとうFさん

touch(integer total_number)
{
vector pos = llDetectedTouchST(0);
Pos = ((llFloor((pos.x*10)*x)/10)*(integer)y)+llCeil(pos.y*y);
SarchTone = llList2Integer(Tuch_list,Pos);

if ( RePos != SarchTone)
{
llTriggerSound(llList2Key(Tone_list,SarchTone*2+1),Vol);
}
RePos = SarchTone;
}

 ここはタッチ(クリック)し続けている(連打じゃないよ)時に実行することが
 書いてある部分

 vector pos = llDetectedTouchST(0);
 vector は変数宣言で pos に DetectedTouchST の結果を格納する

 Pos = ((llFloor((pos.x*10)*x)/10)*(integer)y)+llCeil(pos.y*y);
 ちょっとややこしいけど vector pos から integer Pos に変換格納する式

 SarchTone = llList2Integer(Tuch_list,Pos);
 ここは Tuch_list から Pos の位置にあるデータを integer 形式で SarchTone
 に格納するよう書いてある

if ( RePos != SarchTone)
{
llTriggerSound(llList2Key(Tone_list,SarchTone*2+1),Vol);
}
RePos = SarchTone;

 ここが音を鳴らすメインの部分
 RePos != SarchTone とは RePos と SarchTone が同じ値でない場合って意味
 if(条件式)
  {
条件式が正しい場合に実行される処理
}
  条件式が正しくない場合に実行される式
 この場合だとRePos と SarchToneが違った場合となるので正しい
 逆に値が同じだった場合は != では正しくないになる
 
 ややこしいけど if文 は touch(integer total_number) の中に入っている
 そのためこのif文を入れないと同じ音が鳴り続けてしまうのだ
 それを防止するためにタッチしている位置が同じ鍵盤上にある場合は連続して
 音を出さないようにするための条件式を入れている

 先にあった touch_start でわざわざ RePos に 88 を設定しているのは
 RePos は最後に触っていた鍵盤の位置を格納しておくもので
 touch の中に設定するとうまく機能しなくて例えば同じ鍵盤を連続してクリック
 した場合に2回目以降のクリックで音が出なくなってしまう
 そのため次のクリック時に無音リセットしているのだ
 
 この記述だと左クリックしたままドラッグして鍵盤を移動させる演奏も可能になる

 ちなみにこのスクリの重さは 0.02~0.03 すげぇ~軽いw
 きょ~たさんの人魚神殿にて計測

おさらい終わりw
PR
この記事にコメントする
Name
Title
Color
Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret(管理人のみ表示)
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
プロフィール
HN:
るし
年齢:
16
性別:
非公開
誕生日:
2007/10/31
職業:
SL職:自由人
趣味:
SL趣味:その時その時興味を持ってやっているコトが趣味
ブログ内検索
アクセス解析
Copyright ©   隠居生活記 All Rights Reserved.
*Material by Pearl Box  * Template by tsukika
忍者ブログ [PR]