ホーム ] 筆者の音楽ライフ変遷 ] gigabeat 60V ] WMP概要 ] 全体システム ] 評価/再生リスト ] メデイア情報の設定 ] コードによるライブラリ管理 ] ライブラリによるアプリケーション ] 音楽データベース ]

上へ
基本事項
media オブジェクト
レイティング管理
プレイリスト

コードによるライブラリ管理

プレイリスト

最終更新日:2006/09/02 修正

 PlayListは、Mediaのコレクションで、ライブラリからGet関数にて選択・抽出したサブセットである。このItem が、個々の処理対象のMedia(ここでは音源) となる。例えば、ライブラリから、作曲者がXXXXXX のMediaの集団を、PlayList として確保できる。これをコードにて再生したり、属性を表示したり、変更したりできる訳である。

 ここでは、PlayList 自体を如何ににコードでアクセスするかを研究する。

●概要

○内容

 プレイリスト(再生リスト)は、抽象的なものと、具体的なものとがある。抽象的なものは、コードにて生成されるオブジェクトで、コードで実行中の間だけ存在する。具体的なものは、XMLで記述され、.wpl ファイルとして保存されたものである。WMP のUIで表示されている再生リストはファイルとして保存されたものである。

○構造

 いずれにしても、プレイリストは、再生すべき具体的なメディアを再生順に並べたものである。オブジェクトでは、メディアのコレクションであり、XMLでは、具体的なソースへのフルパス(URL)の羅列となっている。

<PlayList .wpl の中身の例>

<?wpl version="1.0"?>
 <smil>
  <head>
   <meta name="Generator" content="Microsoft Windows Media Player -- 9.0.0.3349"/>
    <author/>
     <title>XXXXXXXX</title>
  </head>
  <body>
   <seq>
    <media src="P:\MusicLibrary\Popular\P20060714094819081.wma" tid="{3B6938C0-1FC2-4F03-95F4-E680FF4CA3E9}"/>
    <media src="P:\MusicLibrary\Popular\P20060714094352908.wma" tid="{AD56962C-4930-4FED-8AD0-FEDA1AFB6D2C}"/>
    <media src="P:\MusicLibrary\Popular\P20060714095723454.wma" tid="{905548A7-A86D-4B5C-A1D0-0451B4DFE6DC}"/>
    <media src="P:\MusicLibrary\Popular\P20060714100426763.wma" tid="{146F8B0A-54CF-4315-A7E4-9FBFAFD936E7}"/>
   </seq>
  </body>
 </smil>

●参照と再生

○参照

 PlayList は、ライブラリを構成する一つのオブジェクトなので、media の1種である。従って、

     player.mediaCollection.getAll

で、PlayListも含まれる。PlayList のみ明示的に確保したければ、

  playListArray = player.playlistCollection.getAll

とする。playListArray にて、playListArray.Item(index) で、個々のPlayList にアクセスできる。

 しかし、このplayListArray には、イリーガルなものも含まれており、単純にアクセスするとエラーになってしまう。どうも、実ファイルを検索しに行ってエラーを起こすようである。従って、以下のように、意味のあるもののみ選び出すと良い。

Dim PLA As IWMPPlaylistArray
PLA = player.playListCollection.getAll
p = 0
For i = 0 To PLA.count - 1
   Try
      If PLA.Item(i).name Like "XXXX*" Then     '特定の再生リストを選び出す
         ・・・・・・・・・・・・・・・・・・・                         '適当な処理(PLA上のIndexも記録しておけば、後でアクセスが楽)
         p = p + 1
      End If
   Catch
      '空白(イリーガルなものを省く)
   End Try
Next

特定のPlayListであれば、

  player.playListCollection.getByName("XXXXX")

とする。Name は、生成時に指定した名称。

○再生

 player.currentPlayList = PL (確保したPlayList)

で良い。

●生成

○空白のPlayListインスタンス

 このオブジェクトには、New がなく、空白の(メモリ上の)インスタンスを直接生成できないようだ。以下のようにすれば良い(みたい)。

   Dim PL As IWMPPlaylist = player.mediaCollection.getByAlbum("xxxxyyyyzzzz")

WMPのライブラリには存在しないアルバム名などを指定してGetする。

   For i = 0 To Cnt - 1
      PL.appendItem(anymedia)
   Next

その後、mediaを追加すれば、任意のPlayListを生成できる。この手法にて、あるPlayListから更にユーザに選曲させ、それだけを再生する場合に有効となる。下図参照。


 

○newPlayList(実ファイル)

PL はPlayList

   PL = player.playListCollection.newPlayList("XXXXX")

にて、空白の実プレイリストを生成する。すると、XXXXX.wpl なるXMLファイルが、既定のフォルダに生成される。このメソッドは、実行する度に実際にファイルが生成されるので注意方。 同じ名前があると、自動的に番号が振られる。プレイリストの保存場所は、オプションの"音楽の録音"で指定したフォルダの下に、My PlayLists なるフォルダが作られ、そこに保存される。今のところ、任意のパスを指定する方法は筆者には分らない。

○アイテムの追加

  PL.appendItem(media)       media を追加

  PL.InsertItem(index, media)   media を、index に挿入

とすれば、media が追加され、ファイルにも反映される。

●筆者のルール

 .wpl のプレイリストは、ポータブルでもそのまま使用されるし、また自製アプリでも参照/再生する。特にポータブルでは、ポピュラーやクラシックが渾然となっているので、識別し良いようにする。以下のように、プレイリスト名に接頭語を付加する。

  • c_XXXXXXX:Classic のプレイリスト
  • j_XXXXXXX:Japan Popular のプレイリスト
  • w_XXXXXXX:World Popular のプレイリスト

 これで、ポータブルでは再生リストがグルーピングできるし、アプリで識別できる。