豊田 孝

 今回は,音楽を演奏する3種類の10行プログラムを紹介します。演奏する音楽ファイルは,Windows 2000に標準で付属する「canyon.mid」というファイルです。このファイルは「c:\winnt\media」フォルダに入っています。もしファイルが見つからない方は,ソース・コード内のファイル名をご自分の環境に合わせて変更し,サンプル・プログラムを実行してください。できれば「c:\winnt\media」フォルダに音楽ファイルをいくつか格納しておくとよいでしょう。

 なお,音楽を演奏するために使用するソフトウエアはMicrosoft Windows Media Player(以後メディア・プレイヤと略記)です。2001年5月時点でのメディア・プレイヤの最新バージョンは7.1であり,マイクロソフトのWebサイトから無料でダウンロードできます。標準インストールしたWindows 2000 Professinal環境で動作を確認していますが,今回紹介するプログラムの実行に関しては,自己責任でお願いいたします。

サンプルプログラム学習上のポイント

 私たちが通常,音楽を聴く場合,MDプレイヤやCDプレイヤなどの演奏機器の電源を入れ,好きな音楽の入ったディスクをセットし,再生ボタンを押します。この一連の操作の最大の目的は「好きな音楽を聴く」ことですから,操作手順が複雑であってはいけません。コンピュータで音楽を演奏する場合,その音楽はファイルとして扱います。Windowsでの音楽データのファイルは,主に拡張子「MID」,「WAV」,「MP3」などのファイルです。このため,コンピュータで音楽を演奏するという行為は,次のように表現できます。

「目的の音楽のファイルを開く」

 この行為をVBScriptで記述すると,次のように表現できます。

Dim myMusic
 Set myMusic = CreateObject("ビバルディの曲")
myMusic.Start
 このコードは次のようなことを語ってくれています。

“コンピュータで音楽を演奏する場合に必要なのは,目的のファイルを指定することである”

図1●「.WAV」ファイルを右クリックすると開かれるメニュー
 ところが,図1[拡大表示]を見てください。図1は拡張子「.WAV」の音楽ファイル上でマウスを右クリックすると開かれるポップアップ・メニューの「アプリケーションから開く」というメニューを選択したところです。皆さんもお使いになったことがあるグラフィカル・ユーザーインタフェース(GUI)でしょう。

 このメニュー画面は,ファイルとアプリケーションを対応付けるものですが,デフォルトの対応付け情報は非常に分かりにくくなっています。ご覧のように,Windows Media Playerという文字が2つも並んでいるからです。なぜ2つなのでしょう。そして,どちらを選択したらよいのでしょう。皆さんの中には「自分のWindowsのメニューと違う」と,思っている人もいるかもしれません。この混乱したメニュー画面は,次のようなことを暗に示しています。

“コンピュータで音楽を演奏する場合,使用するアプリケーション名をまず覚えなければならない”

 私たちは好きな音楽を聴きたいとき,目的の音楽ファイルではなく,使用するアプリケーション・プログラムを先に覚えておかなければならいのでしょうか?これはどこか不自然な感じがします。本日の記事を最後までお読みいただければ,この疑問への回答が見つかるはずです。

図2●Windows 2000のWindows Multimedia Player
 今回紹介する3種類のサンプル・プログラムを見ていくと,「目的の音楽をどのアプリケーションで演奏するか」という不自然さが徐々に弱まってくることが分かります。なお,ソースコードの詳細な説明は次回に持ち越し,今回は動作上の特徴を説明するにとどめます。

サンプル1:非論理的なプログラム

 まずは非論理的なサンプル・コードを紹介します(リスト1)。ここではVBScriptソースコードのみを示します。  ここで使用されているCreateObject命令などの意味を忘れてしまった人は,第1回や第2回連載を読み返してください。このソースコードには次のような命令が含まれています。

myHelper1.Run """C:\Program Files\Windows Media Player\wmplayer.exe"" /Play  ""c:\winnt\media\canyon.mid"""

この行は次のことを示しています。

“目的の音楽ファイル「canyon.mid」を演奏するには,「wmplayer.exe」というプログラムの存在と,音楽データを演奏するための「/Play」オプションについて事前に知っておかなければならない”

図3●Windows XPのWindows Multimedia Player
 Windows 2000(図2[拡大表示])とWindows XP(図3[拡大表示])で実行した結果を次に示します。この画面から分かるように,Windows XPに搭載されるメディア・プレイヤのバージョンは8となります。

 このサンプル・プログラムは,目的の音楽ファイルを演奏するために,演奏するためのアプリケーションの知識を要求しています。どちらかといえば,きわめて非論理的で,不親切です。

サンプル2:少し論理的になったプログラム

 今度は発想が多少論理的になったサンプル・プログラムを紹介します。


'*************************************
'プログラム行数 = 5
'機能:特定の音楽ファイルを演奏する
'MusicStart1.vbsとして保存する
'*************************************

Dim myHelper,strURL
  strURL ="file://c:\winnt\media\canyon.mid"
  Set myHelper = CreateObject("InternetExplorer.Application.1")
  myHelper.Navigate2 strURL
  Set myHelper = Nothing
 ソース・コードを見ると分かるように,先に示したサンプル・プログラムに比べると,“音楽を聴く場合に必要なのは,アプリケーションの知識ではなく,目的の音楽ファイル名である”という理想の状態に近づいています。なお,このサンプル・プログラムはWindows 2000 Professionalでは動作しますが,Windows XPベータ版では動作確認できませんでした。ちなみに,Windows Media Playerバージョン8はWindows XPの“売り”の一つといわれています。それでは本日の最後のサンプル・プログラムを見てみましょう。

サンプル3:分かりやすい論理を持ったプログラム

 本日のメインとなるサンプルプログラムを紹介しましょう。ここではこれまで連載のようにVBScriptソースコードとJScriptソースコードを示します。まず,VBScriptソースコードは次のようになります。


'*********************************
'プログラム行数 = 5
'機能:特定の音楽ファイルを演奏する
'MusicStart2.vbsとして保存する
'*********************************

Dim myHelper,myMusic
  Set myHelper = CreateObject("Shell.Application.1")
  Set myMusic = myHelper.NameSpace("c:\winnt\media")
  myMusic.Items.Item(0).Verbs.Item(0).DoIt
  Set myHelper = Nothing
対応するJScriptコードは次の通りです。

/*
'*********************************
'プログラム行数 = 5
'機能:特定の音楽ファイルを演奏する
'MusicStart2.jsとして保存する
'*********************************
*/
var myHelper = new ActiveXObject("Shell.Application.1");
var myMusic = myHelper.NameSpace("c:\\winnt\\media");
myMusic.Items().Item(0).Verbs().Item(0).DoIt();
myMusic = null;
myHelper = null;
 これら2つのサンプル・プログラムを見て,皆さんはどのような感想を持ったでしょうか。この2つのサンプル・プログラムには,演奏したい音楽ファイル名が明示されていません。音楽ファイル名はどうなったのでしょう?

図4●「c:\winnt\media」フォルダ
 そこで,図4[拡大表示]の画面を見ていただきましょう。この画面は「c:\winnt\media」フォルダの内容ですが,ステータスバーには“41個のオブジェクト”というメッセージが表示されています。そして右側の画面に,「canyon.mid」ファイルを先頭に,41個のファイルが表示されています。上のサンプル・コードには演奏対象となるファイル名が明示されていませんが,実は,次に紹介する行が私たちの目に見えない形で音楽ファイルを管理してくれているのです。

myMusic.Items.Item(0).Verbs.Item(0).DoIt

 この行のどこに音楽ファイルが管理されているでしょう?。想像できますか?結論を言えば,この行は私の環境では次のような意味を持っているのです。

myMusic.Items."canyon.midファイルの".Verbs."演奏を"."開始せよ!"

 これは,私たちの日常生活でおなじみのカラオケの操作に似ているといえます。私たちがカラオケを演奏するときには,次のような手順になります。

カラオケ・ボックスに入る.曲集のページをめくる.曲番号を選択.機能を選択(リズム調整,キー調節,エコー機能など).演奏選択.スタート

 いかがでしょうか。私たちは,カラオケで歌いたい曲を,曲名ではなく曲番号で指定します。これと同じように,上のコードの「myMusic.Items.Item(0)」の「0」を任意の番号に変更すると,別の曲を選択し,演奏できるのです。私のWindows環境の場合,c:\winnt\mediaフォルダに41種類の音楽ファイルが入っていますから,0から40までの番号を自由に指定できます。もちろん,後から音楽ファイルをmediaフォルダに追加しても,ソース・コード自体を変更する必要はありません。

 次回は,今回紹介したサンプル・プログラムのソース・コードの意味を詳しく説明した後,同じような論理を持つコードを使って,再度コントロール・パネルの世界をのぞいてみます。さらに次回以降,10行のさまざまなプログラムを通して,Windows 2000/XPの世界の奥,そのまた奥へ潜り込んでいきます。その冒険の成功のカギは,次回紹介する“私たちに分かりやすい論理”にあります。それでは次回またお会いいたしましょう。ごきげんよう!