MAGAZINE - みる会図書館


検索対象: UNIX MAGAZINE 2002年5月号
163件見つかりました。

1. UNIX MAGAZINE 2002年5月号

Linux のプートプロセス 図 9 アドレスパスとデータバス 区ト 図 8 8086 のピン配置 GND AD14 AD13 AD12 ADII ADIO AD9 AD8 AD7 AD6 AD5 AD4 AD3 AD2 ADI ADO NMI INTR CLK GND アドレスパス ( AO ~ A19 ) Vcc AD15 AI 6 / S3 AI 7 / S4 AI 8 / S5 AI 9 / S6 BHE/S7 MN/MX RD / (HOLD) RQ/GTI (HLDA) (WR) S2 (DT/R) (DEN) SO QSo (ALE) QS 1 (INTA) TEST READY RESET 40 1 区くーロ メモリ 20 データバス ( DO ~ D15 ) 図 10 リアルモードのアドレス計算 セグメント・レジスタ オフセット 4 ビット左シフト セグメントべース リニアアドレス ADn は An と読み替えてください。 います。以下では、 8086 を例にセグメント機構を説明し ます。 AO ~ A19 のピンはアドレスパス (address bus) を通 してメモリモジュールに接続され、メモリを読み書きする 図 8 は 8086 CPU のピン配置図です。いまではあんな 位置を指定する信号カ毓れます。一方、 D0 ~ D15 はデー に巨大になった pentium のご先祖様は、こんなに小さな タバス (data bus) を通してメモリモジュールに接続さ CPU でした。 8086 はアドレスパスとデータバスの幅が メモリとのあいだに読み書きするデータの信号カヾ充れ 16bit 、レジスタの大きさも 16bit の 16bit CPU です。 ます ( 図 9 ) 。 図 8 にいろいろとたくさん書いてある記号は気にせす こで重要なのは AO ~ A19 のピンの数で、全部で 20 に、 AO から A19 までのピンを探してください。図中 本あります。つまり、 20bit です。 20bit で指定できる に、 AD れ " と書かれているのは、 An と Dn が共有され アドレスは 0 から 1 , 048 , 575 (FFFFFH) までですから ている時分割て切り替えている ) ことを表しているので、 37 UNIX MAGAZINE 2002.5

2. UNIX MAGAZINE 2002年5月号

Linux のプートプロセス 図 4 セグメントとアドレス FFF... F セグメント セグメントべース リニアアドレス 図 6 セグメントは重なってもよい セグメント 図 5 0 セグメントとオフセットからリニアアドレスを求める セグメント レジスタの 指定 マシン語命令 レジスタ値 変換器 セグメントべース 〇→ オフセット値 リニアアドレス は以下の式で表すことかできます ( 図 4 も見てください ) 。 セグメントべース十オフセット リニアアドレス そろそろ、 「で、そのセグメントはどうやって指定するねん」 という疑問カヾ孚かんできたのではないでしようか。 プログラムは、図 3 の、、セグメント・レジスタ " 、ある いは、セレクタレジスタ " に値を代入することでセグメン トを指定します。 CPU のなかには、セグメント・レジス タの値からセグメントべースに変換する回路か詛み込まれ ており、 CPU がメモリにアクセスする際にはかならす、 34 図 5 の変換処理がおこなわれます。 400 300 200 UNIX MAGAZINE 2002.5 接レジスタ値を表記することもあります。 さらに、セグメント・レジスタを使わず、次のように直 ントの頁から数えて 100H 番目のアドレスです。 たとえば、、、 DS : 100H ' は、 DS レジスタカ甘旨すセグメ レジスタ名 : 汎用レジスタ名 レジスタ名 : オフセット値 " ( コロン ) で区切って表記します。 は、下記のようにセグメント・レジスタとオフセットを のため、以降の説明て特定のリニアアドレスを指すときに ンテーション回路によるアドレス変換をともないます。 理アドレスを直孑旨定することはできす、かならすセグメ アアドレスを指定します。言い換えると、プログラムカ するときは、かならすセグメントとオフセットの組でリニ IA-32 の CPU では、プログラムがメモリにアクセス トを指定します。 グラムは、 CS と DS 、 SS レジスタにすべて同しセグメン くあります。たとえは、長子が c 。 m の MS-DOS プロ 重なってしまうケースや、あるいはわざと重ねることはよ 実際のプログラムでも、複数のセグメントカ噫図せすに レスが 200H—2FFH の範囲が重なります。 200H だとすると、これら 2 つのセグメントはリニアアド トが 2 つあり、それぞれのセグメントべースが 100H と ん。たとえば、図 6 のように、大きさが 200H のセグメン のセグメントのアドレス領域か重なっても間題はありませ 通常、システムには複数のセグメントが存在し、複数 説明します。 CPU の重川モードによって異なるので、それぞれあとで レジスタ値からセグメントべースに変換する処理は、 0 100

3. UNIX MAGAZINE 2002年5月号

ワークステーションのおと一 0 写真 2 冷蔵ケースの上に置かれた局 写真 3 基地局の設備 図 2 traceroute 果 ( その 1 ) C:*>tracert www. ascii . co ・ jp Tracing route t0 at2. ascii ・ co ・ jp [210. xxx. xxx. xx] over a maximum Of 30 hops : 20 20 20 20 20 20 20 20 20 30 20 30 20 30 20 20 20 30 30 30 30 30 30 30 Trace complete. ている PC に対して traceroute を実行してみました ( 図 店長 : 最初、お客さんに教えてもらったんですよ、 こつい 3 ) 。 うサーピスがあるって。 ss : そうなんですか。 さきほどとは経路が違い、日本インターネット工クス チェンジ (JPIX) を経由しています。また、こちらの経 店長 : で、僕もおもしろそうだなあと思ったわけ。 路のほうが RTT (Round Trip Time) が長くなってい ss : 苦労したこととか、ありましたか ? て、ちょっと不議です。 店長 : なかったなあ。申し込んでからすこし日判肋ゞかかっ たぐらいで。でも、それは、まだ始めたはかりだから仕 なぜ導入したの ? 方がないよね。 店長に、どんな動饑で MIS の基地局を置いたのかを訊 ss : ケープルや設置場所、電源なんかも大変ではなかった ? いてみました。 店長 . ご覧のとおり、あれぐらいの大きさだから、とくに 間題はなかったよ。コンセントはちょっと追加したか 店長 . こイ甦リでしよう。 な。電源が近くにないとか、機器を隠したいと思った ら大変かもしれないけど、僕はべつにあれで - ト分だし。 ss : そうですね。でも、どうしてこういうことを始めよう と思らたんですか ? ss : お客さんて使っている人はいますか ? ms brusseIsO. miSー0019. dsl . alpha—web. ne. jp [218. xx. xx. xx] 20 ms mod. mis ー 0019 . dsl. alpha—web. ne . jp [218. xx. xx. xx] 20 30 ms 211. xx . xxx . xx 30 ms 211. xx . xxx . xx 20 ms 211. xx . xxx . xxx 20 ms 158. xxx . xxx . xx ms POSI ー 0. otmgl . idc. ad. jp [ 158 . xxx. xxx. xxx] 20 ms aS2521. nspixp2. wide . ad. jp [ 202 . xxx. x. xxx] 30 20 ms 203. xxx . xxx . xx 30 202 . . . XXX 30 ms 203. xxx . xxx . xxx ms at2 . ascii . co ・ jp [210. xxx. xxx. xx] 30 1 2 3 4 5 6 7 8 9 0 1 2 イ上 4 上イ亠 145 UNIX MAGAZINE 2002.5

4. UNIX MAGAZINE 2002年5月号

JavaServer Pages 荒井美千子 JavaBeans の利用 ( 2 ) 前回、 Tomcat 4.0.2 がリリースされたことを紹介し ましたが、皆さんが先月号を手にしたころにはすでに新し いバージョンがリリースされていました。 Tomcat 4.0.2 にはリモートからサーバー上の任意のファイルを読めるよ うなセキュリティ上の脆弱生が発見されたため、 2002 年 3 月 1 日に Tomcat 4.0.3 がリリースされました。もし Tomcat 4.0.2 を使っているようなら、 4.0.3 に入れ替え ることをお勧めします。 さて、前回はログインページのサンプルを使って、 JSP ページから JavaBean を使うガ去を説明しました。今回 は、 JavaBeans との付合い方をもうすこし深く知ってい ただきます。また、 JavaBean を作ったり使ったりする ときのちょっとしたテクニックや、注意点なども説明し ます。 JavaBean のスコープ 前回の jsp:useBean" タグの解説では詳しい説明を省 きましたが、このタグには scope 属生を指定できます。 jsp:useBean タグで生成した JavaBean オプジェクトは、 scope 属生て指定されたスコープをもつようになります。 最初にスコーフ窈旨定を利用して、 JavaBean 版のアク セスカウンタを作ってみましよう。 アクセスカウンタ JavaBean ( その 1 ) 図 1 は、 Java で作ったアクセスカウンタ・クラスのソ ースコード、℃ ounterl. java" です。このクラスは Java- 118 ・ va ⅲ e フロノヾテイへのアクセスメソッド ・引数をもたないコンストラクタ Beans のイ兼である、 図 1 スコープを不堋したアクセスカウンタのソースコード (Counter1 ・ java) package counter ; public class CounterI { private int value = 0 ; public Counter1() { } public int getVa1ue ( ) return value ; public void setVaIue(int v) value 十 =v ; UNIX MAGAZINE 2002.5 counterl. jsp" です。このページにアクセスするたびに プジェクトを使ってアクセス数を表示する JSP ページ 図 2 は、 Counter 1 クラスのアクセスカウンタ・オ JavaBean のスコープを指定する ドで取得できます。 value 変数に保存したカウンタ値は getValue() メソッ アクセスカウンタの増研直を渡すイ」にしています。 こでは JSP ページの処理を簡単にするために、引数で 引数で指定された値をプロバティに設定します。しかし、 はプロバティ値を設定するためのメソッドで、一般には VaIue() を呼び出すたびに増えていきます。 setVaIue() ue " 変数にイ尉寺します。この変数は 0 にネ加月化され、 set- Counter1 クラスでは、アクセスカウンタの値を、、 val- 使っていません。 をもっていることを除けば、特別なテクニックはいっさい

5. UNIX MAGAZINE 2002年5月号

ロロロロロ し inux のプートプロセス 図 16 Linux でのセグメント USER DS セグメント セグメント テスクリプタ テーブル USER DS ー USER CS ー KERNEL DS ー KERNEL CS ー USER CS セグメント KERNEL DS セグメント FFFFFFFF KERNEL CS セグメント ているのではなく、レジスタにコピーしたデスクリプタか ら取り出しています。セグメントデスクリプタをレジスタ にコピーする操作は CPU が自重加勺におこなうため、ユー サーが意識する必要はありません。それどころか、ユー サーがそのレジスタから内容を読み出すこともできませ ん。れたレジスタなのです。そのため、このレジスタは 図 3 からは省略しました。 難しそうな言葉がたくさん出てきて、頭のなかで火花 がパチパチと飛んでいる人もいると思います。しかし、 Linux ではセグメントの機能はあまり使われていないの で、それほど深く理解しなくても大丈夫です。ご安じ、くだ Linux が使用するセグメントは図 16 の 4 つです ( 図 中のセグメントの名前は、 asm-i386/segment. h で定義 されているものです ) 。すべてのセグメントはべースア ドレスが 0 から始まり、その大きさは 4GB ( リミ =FFFFFH かっ G=I) で、 80386 のアドレス空間すべ てを含みます。 このようなセグメントの使い方を、、基本フラットモデ ル " といい、システムのもっとも単純なメモリモデルとし て lntel のマニュアルに紹介されています。基本フラット モデルを使用するには、すくなくともコードセグメントと データセグメント用のセグメントデスクリプタを作成する 必要があります ( 理山は次回に説明します ) 。 42 図 16 の 4 つのセグメントの違いはタイプと DPL にあ り、以下のように設定されます。 セグメント KERNEL-CS KERNEL-DS USER-CS USER-DS タイプ DPL 5 1 5 1 0 0 3 3 それぞれのタイプ番号の意味は表 1 を参照してくださ い。 DPL の値はセグメントの牛犲雀レベルを表し、 0 がもっ とも高く、 3 がもっとも低い値になります。讚レベルに ついては次回に詳しく説明しますが、 こではカーネルは 権限 0 、ユーサー・プログラムは権限 3 て動作することだ け慮えておいてください。 こまでのセグメントについての説明を読んで、 「ユーサーとカーネルのセグメントか重なってるんやった ら、もしかしてユーザー・プログラムがカーネルのメモリ を書き換えられるのとちゃう ? なんで、わざわざセグメ ントの不頁を変えてるんやろ」 という疑間が出てくるのではないでしようか。しつは、メ モリの一はセグメントではなく、次に説明する、、ページ ング " でおこなわれます。それでは、なぜ Linux がセグメ ントを設定するのかというと、理由は簡単で、、セグメンテ ーション回路を無効にできないから " です。つまり、 CPU カワ。ロテクトモードで動くにはセグメントデスクリプタを UNIX MAGAZINE 2002.5

6. UNIX MAGAZINE 2002年5月号

RFC ダイジェスト 宇夫陽次朗、小檀伸夫 今回扱うのは、 2001 年 12 月中旬から 2002 年 3 月中 旬に公開された RFC である。ただし、一陪にの RFC は次 回に紹介する。 インターネット全般 RFC3232 Assigned Numbers: RFC 1700 is Replaced by an On-line Database 番号割当て . RFC1700 のオンライン・テータベースへの 旧 fo. 、」 . ReynoIds 他 ( RFC1700 置奐 ) RFC1700 で公開されているインターネット関連の番号 資源の情報は、 RFC ではなくオンライン・データベース で管理・公開されていることを示している。、、広報 (lnfor- mational)" として 2002 年 1 月に公開された。 RFC1700 を置き換えている。 1977 年 11 月から RFC1700 が公開された 1994 年 10 月まで、 IANA の活動は、、番号割当て (Assigned Num- bers) RFC" として公開されていた。しかしそれ以降は、 番号資源はインターネット上で公開されるオンライン・デ ータベースとして管理されている。 RFC3232 は、この朋大を RFC シリーズとして示すた めに公開された。 RFC3233 Defining the IETF IETF の定義 BCP. 、 P. Hoffman 他 ( 別称 . BCP 58 ) 、 IETF" に関する定義をおこなっている。、、点での ーーーーーーーーー ' ーー最良のカ 1 去 CBest Current Practice)" として 2002 年 2 今回の RFC UNIX MAGAZINE 2002.5 月に公開された。 BCP シリーズ (BCP 58 ) としても公 開されている。 RFC などを言当する際に、 IETF 自体に関する言及が 必要な場合がある。そこで RFC3233 は、、、 IETF につい て説明するための公式な文書 " として作成さオ L 、 RFC シ リーズの 1 文書として公開された。 RFC3238 IAB Architectural and Policy Considerations for Open Pluggable Edge Services IAB による OPES のアーキテクチャおよびポリシーに関 する考察 fo. 、 S. FIoyd 他 OPES (Open PluggabIe Edge Service : 刻長 - 可能な 工ッジサービス ) のアーキテクチャおよびポリシーに関す る IAB による考察をまとめている。、、広報 " として 2002 年 1 月に公開された。 昨今言侖か進められている OPES は、コンテンツに対 する処理オ冓を拡張できるようにするためのフレームワー クである。 OPES が前提とするアーキテクチャは、レイ ヤとしてみるとアプリケーション・レベルの欟冓であるが、 ネットワーク内でデータを処理するための汎用の仕組みと して構成されることが予想されるため、インターネットの デサインおよび管理に対する影響が大きいと考えられる。 したがって、 OPES に関するアーキテクチャや伺髄する 言龠には、ポリシー面からの考察が必要になる。 そこで RFC3238 では、 OPES で考慮しなければな らない間題に対する IAB による見解を示している。とく に、データの整全 (integrity) 、プライバシー、セキュ リティについては、 OPES の仕様化の過程でかならす議 論する必要があると IESG に要求している。 173

7. UNIX MAGAZINE 2002年5月号

図 17 パラレルな里 et ・ 5 PIay with UNIX ④ 図 18 snd のフィルタ あの 00 る 0 わ 00000000 0030 0 0 00000000 60 の 00000 の 2 わ 0000 の 00 「に「 sync 」 p い / ( 第い 0.8 re 、 0 : 0. 僕ー lt : ′を 6 ー - 」に ~ 矼 91. の ) 0 0. 引 6 気、 ) 224 -02 455 0.0 1553 -5 20000 410 0.O 1184 -13. 178 -8 ユ 2 0000 ー 60 .0 ー 60 . 0 0 「一」め 000 プ 0 めのののめめ 000 め 0 め 0 のめの 0 誌 リアルタイム性を必要としないものは、サウン ただし、 ドエデイタで作るほうか再生時のマシンの負荷が少なくて すむ。たとえば、特定の帯域をカットするだけのフィルタ リングなどは、カットする帯域カ鴃まっていれば工デイタ で処理したはうがいい。 フィノレタ snd の画面右下に付いている小さな四角い部分を上にド 合はどうすればいいのだろうか。 ラッグすると、いくつかのスライダーと frequency re- 答は簡単である。ノヾートごとにサンフラー・モジュール sponse" と表示された座標か現れる ( 図 18 ) 。 を用意し、それぞれに 1 つのパート ( 音加をロードする。 これは、任意の帯域をプースト / カットできるフィルタ そして、サンプラー・モジュールごとに独立した信号処理 で、 SSM のフィルタよりも細かな調整ができる。実際に 系を割り当て、最終的にミックスすれはいい ( 図 17 ) 。 音を再生しながらポイントの位置と数、そしてゲインを決 空いたサンプラーのバンクがなんとなくもったいない気 められるのもたいへんよろしい。これでヨシと思ったとこ がしないでもないが、処理がとくに重くなるわけでもない ろで [Apply] ボタンを押せは、その結果が保存さ波 こはバーチャルシンセならではの鯊尺さを享受すべ し、 形やソノグラムにも斑央される。 きである。というか、それしか去はない。 リノく一フ どこにでもあるエフェクトだが、 snd のリバープは強力 である。自然なルームリバープのようなものから、爆発に こまで紹介してきた操作の大半は、しつはオーディ 近い過激な音まで効果の幅は広い。 SSM にはリバープ・ オ・エデイタでもできる。とくに、いつも波形とソノグ モジュールがないので、リバープの必要な箇所は snd で ラム表示に使っている snd は、ほとんどシンセサイサー 作るといいだろう。 といっていいくらいの機能をもっている。単純にサンプリ ドラムセクションの場合は、スネアあたりにかけるのが ング音を言各するなら、 SSM より高生能といえるほどだ。 効墻均だ ( 図 19 ) 。 SSM で寅奏するときはリバープの量が オーディオ・エデイタなのだから当り前だが、それで 調整できないので、エフェクト量を変えたサンプリング・ も SSM を使うのはリアルタイム性を求めるからだ。フィ ファイルをいくつカ非っておくか、エンべローフ。て匐髜各す ルタなどの踝を連続的に変化させられるのが、シンセサ るといいかもしれない。 ザーを利用するメリーットなのである。 000000 めの 000 の 00 0 snd で編集 153 UNIX MAGAZINE 2002.5

8. UNIX MAGAZINE 2002年5月号

et ・ s PIay with UNIX ④ ノイズのイ劬ロ 図 14 発振周波数の言聢 図 12 WaveTabIé ル 0 0 十 0 ミックスしたバスドラムと素のパスドラム 図 13 0 0 OSS ののめの 0 の 0 めめの 0 のめののめのめ 0 め をののめるの 0 め 0 の 0 め 000 めめの 0 20000 .3 にに 0 「一川 0 」山第 ノイズを乗せた場合の波形 図 15 20000 を 0 ) にをを・ 20000 と思ったのは図 12 のあたりだ。 低周波をミックスしたバスドラムと、素のバスドラムを 上交したのか図 13 である。けっきよく、アタック部分に は実音を使い、その後の胴鳴り部分をシンセサイザーで付 け足したような恰好になっている。 ノイズの付加 ノイズで IkHz 遍を強調 バスドラを正弦波でプーストしたのと同しように、ノイ 図 16 ズを付け足してスネアのパートを強調することもできる。 0 0 十 このガ去は、なんとなく音が引っ込みがちだとか、スナッ ピーの鳴りか弱いという場合に使える。 を - A ~ 0 -S 6 。朝 to 何。ユ旦』 PWSH T Ⅲ肥 ー」 D 印ャ 朝「五甑コ : 朝匚師コミゴ上 0 工」 $ ゴー」 基本的に音を付け足すだけだから、モジュールの接続 ) をに第差」 印え引」第」 で WaveTabIe を OsciIIator に交換するだけでもいいが (WaveTabIe にノイズの設定はない ) 、ノイズの周波数特 うな感じになった。 性を制御するためにフィルタを加え、エンべロープでカッ / ヾラレノレな里 トオフを動かすようにしてある ( 図 14 ) 。 設定のポイントは、どの帯域のノイズを、どのくらい乗 これらのエフェクトは、当然のことながらパー に別々に仕掛けたい。ところが、 SSM のサンプラー・モ せるかだ。これは、もとになるスネアドラムの特生とノイ ジュールにはオーディオ出力が 1 つしかない。 8 つある ズを付加する目的により、まったく違う設定になる。 バンクの音源は、すべて 1 つの出力にミックスされる。 今回は、図 15 の下部にあるような畤匪の音を、上部の ミックスしてくれるんだか引リしゃん、とも思うわけ ような特性にするための設定である。もとになっている音 だが、モジュール内のバンクについて個別の処理はできな の減衰が早すぎるのでやや余韻を作り、ドラムパートのな いことになる。それでは、バスドラに低周波、スネアには かで音か沈みがちだったので、ノイズで 1kHz あたりを ートごとに別の処理をしたい場 ノイズといったように 強調してみた。実際の各モジューノレの設定は、図 16 のよ 「は山を「 smc 」 . 2 20000 舗 a 第 " 。」・当主、 eldpe lte ノ、 152 UNIX MAGAZINE 2002.5

9. UNIX MAGAZINE 2002年5月号

Let ね y wit 020X SpiraISynth ModuIar(6) 0 サンプリング音の加工 四本三 前回は、マイクで抬ってきた音でドラムパターンを組ん でみた。しかし、リズムは刻めるものの、ドラムセットと してなんだかイマイチだなあ、と感しることもある。 「やつばり普通のドラムのほうがいいんしゃない ? 」 ごもっとも。私もよくそう思う。そもそも、サンプリン グした音がそのままイメージどおりに使えることのほうが 珍しい。もともとドラムの音ではないのだから、ドラムと して使ってみてしつくりこないのは当り前で、それにいろ いろなエフェクトを加えて、、らしい ~ 音に仕立て上げるの か腕の見せ所である。 アナログ・シンセサイサーとは、しつはフィルタやアン フ。のかたまりであり、それらを通すことでアナログのオー ディオ信号を処理している。つまり、発振器以外の各モ ジュールは、いわばオーディオ信号に対するエフェクタ なのである。 というわけで、今月は SSM (SpiralSynth Modular) のモジュールをエフェクタとして使い、サンプリング・サ ウンドの加工に騨艾することにした。 それにしても、なぜイマイチと感しるのだろうか。 それは、事前に具体的な音のイメージができあがって いて、処理結果がそれとマッチしないからである。この問 題を鮹夬するには、ます自うゞどんなイメージをもってい るのかを把握し、そのイメージに近づけるような処理を考 えれはいい。ただし、処理内容とその結果の関係カ吩から なければ、意図どおりの音は得られない。すなわち、処理 と結果のイメージ形成がシンセサイザーの操作には不可欠 であり、具ー勺な処理を知っていれはいるほど応用も利け UNIX MAGAZINE 2002.5 は、イメージする音に到達するまでの試行錯誤の回数も減 らせるのである。 ドラムサウンドの成り立ち ますは基本から。我々か通にイメージする、、普通のド ラムサウンド " の成り立ちから入っていこう。ドラムサウ ンドの成り立ちをモジュールでシミュレートすれば、ほか の音素材からでもドラムパートが合成できる。 以下では、リズムパターンのなかでももっとも出現頻 度の咼いハイハットとスネアドラム、バスドラムの 3 つ のパートについて考えてみる。各パートの音の相違を簡単 にいうと、音域と減袞速度の違いということに尽きる。各 ートの特匪を把握しておけば、サンプリング用の音を拾 ノ、 ってくる場合の目安になるし、事前のオーディオ編集のメ ドも立てやすくなるはすだ。 ハイハット この楽器を知らない人のために書いておくと、ハイハッ トとはシンバルを 2 枚重ねたものである。 ・・などとい うミもフタもない説明から始めたのは、ドラムマシンの使 い方は理解していても、サンプリングの対象となる本物の 楽器の構造をほとんど知らない人がいるからだ 。フし、つ 状兄は、おもしろいような、おもしろくないような。私と してはただただ、、ううむ " とうなるしかない。 さて、 2 枚のシンバルはフットペダルで開閉できるよ うになっている。こ窈作だけでも、、シャンシャン " とか 、、スチッスチッ " という音は出せるが、、、チキチキ " や、、チ ッチッ " のようにスティックで叩くこともある。、、叩くこ ともある " というより、音楽のスタイルによってはスティ 147

10. UNIX MAGAZINE 2002年5月号

( 0 ・・一 oprn ・ nt Kit fO ′ ( ap ′ー′ 0 使います。この関数を 1 回呼び出すと、傾きセンサーをは しめ 13 個のセンサー情報をすべて同時に取得できます。 プログラムでは、センサー情報のなかで、傾きセンサーの 出力だけに注目する BNISensorSIant6() 関数を新たに 作成しています。 BNISensorSlant6() では、 BNIGet- SensorInfo() 以、タ ) センサー関数 BNISensKnock() を 用いて叩かれたことを判別したり、プログラムの終了フラ グのセット ( 肉球センサーを調べる ) をしています。 main() では、この BNISensorSIant6() 窈区り値と関 数へのポインタ酉リを使い、状況に応してリアクションを とる関数を呼び出しています。センサーから読み込新青報 を増やして配列を大きくしたり、配列自体を複数作成すれ は、いろいろな応用か考えられるでしよう。 リスト 1 七転ひ八起きのカプリロ (updown ・ c) このプログラムでは、倒れた状態から起き上がらせるた めに、既存のモーションデータを呼び出しています。利用 するモーションデータを決めるとき、プログラミングキッ トのムービーファイルがたいへん役に立ちました。さきほ ども書いたように、 C 開発環境の API で用意されている モーションデータと、プログラミングキットのモーショ ンデータは同しもので、ムービーファイルのファイル名 ( 173. avi ) の番号の部分 ( 173 ) が、そのままモーション データの番号になります。ムービーを順に見ていけば、起 き上がる徂こ使えるモーションと、そのに必喫な時 間を求めることかできます。 #include く bnlapi . h> char eyebuf [ 3 ] ; int fp—void(void) { return(O) ; int fp-gaeshi (void) { / * BN—I AP I ヘッダファイル * / モーションアイ用パッファ * / / * 何もしない * / / * 仰向けから復帰 * / BNITraceOut ( 2 , "fp-gaeshi") ; BNIDoMotion(173) ; retu てⅡ ( 3000 ) ; / * がえし * / / * 顔立ちから復帰 * / int fp—taoreoki2 (void) { BNITraceOut ( 2 , "fp—taoreoki2" ) ; BNIDoMotio Ⅱ ( 199 ) ; return(5200) ; int fp—taoreoki (void) { / * 倒れ起き 2 * / / * お尻立ちから復帰 * / 'fp—taoreoki") ; BNITraceOut ( 2 , BNIDoMoti0 Ⅱ ( 190 ) ; return(3000) ; int fp—okiagari (void) { / * 倒れ起き * / / * 右横から復帰 * / "fp—okiagari") ; BNITraceOut ( 2 , BNIDoMotio Ⅱ ( 183 ) ; return(3000) ; / * 起き上がり 1 * / / * 左横から復帰 * / int fp—aomukenobi (void) { "fp—aomukenobi" ) ; BNITraceOut(2, BNIDoMotion(213) ; BNIWaitMi11iSec(2000) ; UNIX MAGAZINE 2002.5 / * 仰向けで伸び * / 133