Excel VBAでオブジェクト指向プログラミング(Windows Media Player編)

2024-01-07

目次

■Windows Media Player(WMP)の概要

Windows Media Player(WMP)は、Microsoft社が開発したメディアプレイヤーソフトで、Windowsに標準搭載されています。

通常は独立したソフトウェアとして利用していますが、ActiveXコントロールやCOMオブジェクトが提供されていますので、Excel VBAで操作することが可能です。
⇒詳細はMicrosoftのサイト(Windows メディア プレーヤー オブジェクト モデル)を参照して下さい。

WMPの主なオブジェクトは下表の通りですが、本稿では以下に挙げた11種類のオブジェクト(下表の太字で表示したオブジェクト)について、サンプル・プログラムを交えて詳細を説明します。
(1)ルートオブジェクト(Playerオブジェクト)
(2)WMP本体に関するオブジェクト(Controlsオブジェクト、Settingsオブジェクト)
(3)メディアに関するオブジェクト(MediaCollectionオブジェクト、Mediaオブジェクト)
(4)プレイリストに関するオブジェクト(PlaylistCollectionオブジェクト、Playlistオブジェクト)
(5)CDに関するオブジェクト(CdromCollectionオブジェクト、Cdromオブジェクト、CdromRipオブジェクト、CdromBurnオブジェクト)

(WindowsMediaPlayerオブジェクトの階層構造)

オブジェクト 説明
Playerオブジェクト WMPのルートオブジェクト
CdromCollectionオブジェクト CDまたはDVDドライブのコレクション
Cdromオブジェクト ドライブ内のCDまたはDVD
CdromBurnオブジェクト オーディオCDの書き込み
CdromRipオブジェクト オーディオCDの読み込み
ClosedCaptionオブジェクト クローズドキャプション
Controlsオブジェクト トランスポートコントロール
DVDオブジェクト DVDの操作
Errorオブジェクト ErrorItemのコレクション
ErrorItemオブジェクト エラー情報
Libraryオブジェクト ライブラリ
MediaCollectionオブジェクト Mediaのコレクション
Mediaオブジェクト メディアアイテム
Networkオブジェクト ネットワーク接続
PlayerApplicationオブジェクト リモートモード(C++のみ)
PlaylistCollectionオブジェクト Playlistのコレクション
PlaylistArrayオブジェクト プレイリスト(インデックス番号指定)
Playlistオブジェクト プレイリストに関するオブジェクト
Queryオブジェクト 複合クエリ
Settingsオブジェクト 設定
StringCollectionオブジェクト 文字列のコレクション
SyncDeviceオブジェクト SyncDevice(C++のみ)

WMPの利用方法とPlayerオブジェクトの詳細

WMPを利用する際は、ルートオブジェクトであるPlayerオブジェクトを使用可能な状態にする必要があります。

Playerオブジェクトは多くの下位オブジェクトを持ちますが、基本的にはPlayerオブジェクトのメソッドまたはプロパティで設定/取得が可能です。

WMPの利用方法

WMPをプログラムから利用するためには、ActiveXコントロールを使用する方法とActiveXコントロールを使用しない方法があります。

ActiveXコントロールを使用する方法

以下の手順でWindowsMediaPlayerコントロールを配置すれば、ライブラリへの参照が自動的に設定され、Playerオブジェクトがインスタンス化されますので、WMPが利用可能になります。

(1)[開発]タブで[挿入]をクリックし、表示されたメニューの下段「ActiveX コントロール」の最後にある「コントロールの選択(ドライバーとスパナのアイコン)」をクリックします。

(2)表示された一覧表から「Wndows Media Player」を選択し、ユーザフォームやワークシートに配置します。

(3)Wndows Media Playerコントロールのオブジェクト名は、「WindowsMediaPlayer1」になっていますので、名前を変更せずに使用するのであれば、以下のようにコーディングすることになります(オブジェクト変数の定義は不要です)。

  1. WindowsMediaPlayer1.〜メソッド
  2. WindowsMediaPlayer1.〜プロパティ = xxx
  3. xxx = WindowsMediaPlayer1.〜プロパティ

例えば、行番号2の部分を「WindowsMediaPlayer1.URL = “C:\work\xxx.mp3″」のように記述すれば、WindowsMediaPlayerコントロール上でMP3ファイルの再生が開始されます。

ActiveXコントロールを使用しない方法

以下の手順でPlayerオブジェクトをインスタンス化すれば、WMPが利用可能になります。
⇒オブジェクトを使用するための事前準備とオブジェクトブラウザによる調査方法については、Excel VBAでオブジェクト指向プログラミング(事前準備編)を参照して下さい。

(1)Visual Basic Editor(VBE)のファイルメニューから[ツール]-[参照設定]を選択し、参照設定ダイアログでWindows Media Playerのチェックボックスにチェックを入れ、[OK]ボタンを押下します。
(Windows Media Playerが複数表示される場合は、ライブラリ名が「wmp.dll」となっている行を選択して下さい)

(2)プログラムの宣言部でオブジェクト変数を定義し、プログラムの処理部でインスタンスを生成します。

  1. '宣言部
  2. Dim wmp As WindowsMediaPlayer
  3. '処理部
  4. Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  5. wmp.〜メソッド
  6. wmp.〜プロパティ = xxx
  7. xxx = wmp.〜プロパティ

例えば、行番号2の部分を「wmp.URL = “C:\work\xxx.mp3″」のように記述すれば、バックグラウンドでMP3ファイルの再生が開始され、音声だけが聞こえる状態になります。
なお、行番号2の部分を「wmp.openPlayer (“C:\work\xxx.mp3")」のように記述すると、別のウィンドウでWMPlが実行されます。

(※1)行番号5を「Set wmp = New WindowsMediaPlayer」のように記述すると実行時エラーになるため、CreateObject関数にGUIDを指定して「Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")」のように記述しています。

(※2)オブジェクトブラウザでwmp.dll(WMPLib)を調べると、「WMPCoreオブジェクト」というものがあり、Playerオブジェクトとほぼ同等のメソッドおよびプロパティを持っていますが、「WindowsMediaPlayerの内部オブジェクトなので非公開」という説明文が記載されています。

Playerオブジェクト(WindowsMediaPlayer)のメソッド

Playerオブジェクトで提供されているメソッドは下表の通りです。

closeメソッド
説明 Windows Media Playerのリソースを解放する
定義 Sub close()
launchURLメソッド
説明 レンダリングする既定のブラウザにURLを送信する
定義 Sub launchURL(bstrURL As String)
newMediaメソッド
説明 新しいMediaオブジェクトを作成する
定義 Function newMedia(bstrURL As String) As IWMPMedia
newPlaylistメソッド
説明 新しいPlaylistオブジェクトを作成する
定義 Function newPlaylist(bstrName As String, bstrURL As String) As IWMPPlaylist
openPlayerメソッド
説明 指定したURLを使用してWindows Media Playerを開く
定義 Sub openPlayer(bstrURL As String)

Playerオブジェクト(WindowsMediaPlayer)のプロパティ

Playerオブジェクトで提供されているプロパティは下表の通りです。

cdromCollectionプロパティ(読み取り専用)
説明 CdromCollectionオブジェクトを取得
定義 Property cdromCollection() As IWMPCdromCollection
closedCaptionプロパティ(読み取り専用)
説明 ClosedCaptionオブジェクトを取得
定義 Property closedCaption() As IWMPClosedCaption
controlsプロパティ(読み取り専用)
説明 Controlsオブジェクトを取得
定義 Property controls() As IWMPControls
currentMediaプロパティ
説明 現在のMediaオブジェクトを設定/取得
定義 Property currentMedia() As IWMPMedia
currentPlaylistプロパティ
説明 現在のPlaylistオブジェクトを設定/取得
定義 Property currentPlaylist() As IWMPPlaylist
dvdプロパティ(読み取り専用)
説明 DVDオブジェクトを取得
定義 Property dvd() As IWMPDVD
enableContextMenuプロパティ
説明 コンテキストメニューを有効にするかどうかを設定/取得(Trueの場合、有効。既定値はTrue)
定義 Property enableContextMenu() As Boolean
enabledプロパティ
説明 Windows Media Playerコントロールを有効にするかどうかを設定/取得(Trueの場合、有効。既定値はTrue)
定義 Property enabled() As Boolean
Errorプロパティ(読み取り専用)
説明 Errorオブジェクトを取得
定義 Property Error() As IWMPError
fullScreenプロパティ
説明 ビデオコンテンツを全画面表示モードで再生するかどうかを設定/取得(Trueの場合、全画面表示。既定値はFalse)
定義 Property fullScreen() As Boolean
isOnlineプロパティ(読み取り専用)
説明 ユーザがネットワークに接続しているかどうかを取得(Trueの場合、ネットワーク接続)
定義 Property isOnline() As Boolean
isRemoteプロパティ(読み取り専用)
説明 Windows Media Playerコントロールをリモートモードで実行しているかどうかを取得(Trueの場合、リモートモード)
定義 Property isRemote() As Boolean
mediaCollectionプロパティ(読み取り専用)
説明 MediaCollectionオブジェクトを取得
定義 Property mediaCollection() As IWMPMediaCollection
networkプロパティ(読み取り専用)
説明 Networkオブジェクトを取得
定義 Property network() As IWMPNetwork
openStateプロパティ(読み取り専用)
説明 コンテンツソースの状態を取得

(※)WMPOpenState列挙体の値は、以下の通り。
wmposUndefined(0):未定義
wmposPlaylistChanging(1):新しいプレイリストを読み込み中
wmposPlaylistLocating(2):プレイリストを検索中
wmposPlaylistConnecting(3):プレイリストに接続中
wmposPlaylistLoading(4):プレイリストを取得中
wmposPlaylistOpening(5):プレイリストをオープン中
wmposPlaylistOpenNoMedia(6):プレイリストはオープン済
wmposPlaylistChanged(7):新しいプレイリストをcurrentPlaylistに割り当て中
wmposMediaChanging(8):新しいメディア項目を読み込み中
wmposMediaLocating(9):メディア項目を検索中
wmposMediaConnecting(10):メディア項目を保持するサーバーに接続中
wmposMediaLoading(11):メディア項目を取得中
wmposMediaOpening(12):メディア項目をオープン中
wmposMediaOpen(13):メディア項目はオープン済
wmposBeginCodecAcquisition(14):コーデックの取得を開始
wmposEndCodecAcquisition(15):コーデックの取得を終了
wmposBeginLicenseAcquisition(16):DRMライセンスの取得を開始
wmposEndLicenseAcquisition(17):DRMライセンスの取得を終了
wmposBeginIndividualization(18):DRMの個別化を開始
wmposEndIndividualization(19):DRMの個別化を終了
wmposMediaWaiting(20):メディア項目を待機中
wmposOpeningUnknownURL(21):不明な種類のURLをオープン中

定義 Property openState() As WMPOpenState
playerApplicationプロパティ(読み取り専用)
説明 PlayerApplicationオブジェクトを取得
定義 Property playerApplication() As IWMPPlayerApplication
playlistCollectionプロパティ(読み取り専用)
説明 PlaylistCollectionオブジェクトを取得
定義 Property playlistCollection() As IWMPPlaylistCollection
playStateプロパティ(読み取り専用)
説明 Windows Media Playerの状態を取得

(※)WMPPlayState列挙体の値は、以下の通り。
wmppsUndefined(0):未定義
wmppsStopped(1):停止中
wmppsPaused(2):一時停止中
wmppsPlaying(3):再生中
wmppsScanForward(4):高速早送り中
wmppsScanReverse(5):高速巻き戻し中
wmppsBuffering(6):データ取得中
wmppsWaiting(7):待機中(接続済でセッション開始待ち)
wmppsMediaEnded(8):メディア項目の再生完了
wmppsTransitioning(9):新しいメディア項目を準備中
wmppsReady(10):準備完了
wmppsReconnecting(11):再接続中
wmppsLast(12):最後のplaystate

定義 Property playState() As WMPPlayState
settingsプロパティ(読み取り専用)
説明 Settingsオブジェクトを取得
定義 Property settings() As IWMPSettings
statusプロパティ(読み取り専用)
説明 Windows Media Playerの状態を文字列で取得
定義 Property status() As String
stretchToFitプロパティ
説明 Windows Media Playerコントロールのビデオ表示のサイズに合せてビデオを拡大するかどうかを設定/取得(Trueの場合、ビデオを拡大。既定値はFalse)
定義 Property stretchToFit() As Boolean
uiModeプロパティ
説明 ユーザインターフェイスの表示方法を設定/取得

(※)指定可能な値は、以下の通り。
invisible:ユーザインターフェイスなし
none:コントロールなし
mini:コントロールを一部表示(再生/一時停止、停止、ミュート、ボリュームのみ)
full:コントロールを全て表示(既定値)
custom:カスタムユーザインターフェイス(C++のみ)

定義 Property uiMode() As String
URLプロパティ
説明 再生するメディア項目を設定/取得
定義 Property URL() As String
versionInfoプロパティ(読み取り専用)
説明 Windows Media Playerのバージョン情報を取得
定義 Property versionInfo() As String
windowlessVideoプロパティ
説明 Windows Media Playerコントロールがウィンドウレスモードでビデオをレンダリングするかどうかを設定/取得(Trueの場合、レンダリングする。既定値はFalse)
定義 Property windowlessVideo() As Boolean

WMP本体に関するオブジェクト(Controlsオブジェクト、Settingsオブジェクト)の詳細

WMPの本体に関するオブジェクトとして、WMPのトランスポートコントロール(再生、停止、一時停止など)を表すControlsオブジェクト、WMPの設定を表すSettingsオブジェクトについて、詳細を説明します。

Controlsオブジェクト(IWMPControls)の詳細

Controlsオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

audioLanguageCountプロパティ(読み取り専用)
説明 サポートされているオーディオ言語の数を取得
定義 Property audioLanguageCount() As Long
currentAudioLanguageプロパティ
説明 再生するオーディオ言語のロケール識別子(LCID)を設定/取得
定義 Property currentAudioLanguage() As Long
currentAudioLanguageIndexプロパティ
説明 再生するオーディオ言語に対応するインデックスを設定/取得
定義 Property currentAudioLanguageIndex() As Long
currentItemプロパティ
説明 現在のメディア項目を設定/取得
定義 Property currentItem() As IWMPMedia
currentMarkerプロパティ
説明 現在のマーカー番号を設定/取得
定義 Property currentMarker() As Long
currentPositionプロパティ
説明 メディア項目内の現在の位置を秒単位で設定/取得
定義 Property currentPosition() As Double
currentPositionStringプロパティ(読み取り専用)
説明 メディア項目内の現在の位置を文字列で設定/取得
定義 Property currentPositionString() As String
currentPositionTimecodeプロパティ
説明 メディア項目内の現在の位置をタイムコード形式で設定/取得
定義 Property currentPositionTimecode() As String
fastForwardメソッド
説明 メディア項目の早送りを開始する
定義 Sub fastForward()
fastReverseメソッド
説明 メディア項目の巻き戻しを開始する
定義 Sub fastReverse()
getAudioLanguageDescriptionメソッド
説明 指定したインデックスに対応するオーディオ言語の説明を取得する
定義 Function getAudioLanguageDescription(lIndex As Long) As String
getAudioLanguageIDメソッド
説明 指定したインデックスに対応するオーディオ言語のロケール識別子(LCID)を取得する
定義 Function getAudioLanguageID(lIndex As Long) As Long
getLanguageNameメソッド
説明 指定したロケール識別子(LCID)を持つオーディオ言語の名前を取得する
定義 Function getLanguageName(lLangID As Long) As String
isAvailableプロパティ(読み取り専用)
説明 指定した機能が使用可能かどうかを取得(Trueの場合、使用可能)

(※)bstrItem引数に指定可能な値は、以下の通り。
currentItem:currentItemプロパティを設定できるかどうか
currentMarker:特定のマーカーをシークできるかどうか
currentPosition:特定の位置をシークできるかどうか
fastForward:高速早送りを使用可能かどうか
fastReverse:高速巻き戻しを使用可能かどうか
next:プレイリスト内の次のエントリをシークできるかどうか
pause:pauseメソッドを使用できるかどうか
play:playメソッドを使用できるかどうか
previous:プレイリスト内の前のエントリをシークできるかどうか
step:stepメソッドを使用できるかどうか
stop:stopメソッドを使用できるかどうか

定義 Property isAvailable(bstrItem As String) As Boolean
nextメソッド
説明 現在のメディア項目をプレイリスト内の次のメディア項目に設定する
定義 Sub next()
pauseメソッド
説明 メディア項目の再生を一時停止する
定義 Sub pause()
playメソッド
説明 メディア項目の再生を開始する
定義 Sub play()
playItemメソッド
説明 指定したメディア項目の再生を開始(一時停止中の場合は再開)する
定義 Sub playItem(pIWMPMedia As IWMPMedia)
previousメソッド
説明 現在のメディア項目をプレイリスト内の前のメディア項目に設定する
定義 Sub previous()
stepメソッド
説明 現在のビデオメディア項目を1フレーム進める

(※)lStep引数に指定可能な値は、以下の通り。
1:次のフレームに進める
-1:前のフレームに戻す

定義 Sub step(lStep As Long)
stopメソッド
説明 メディア項目の再生を停止する
定義 Sub stop()

Settingsオブジェクト(IWMPSettings)の詳細

Settingsオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

autoStartプロパティ
説明 現在のメディア項目が自動的に再生を開始するかどうかを設定/取得(Trueの場合、開始する。既定値はTrue)
定義 Property autoStart() As Boolean
balanceプロパティ
説明 現在のステレオバランスを設定/取得
定義 Property balance() As Long
baseURLプロパティ
説明 相対パス解決に使用するベースURLを設定/取得
定義 Property baseURL() As String
defaultAudioLanguageプロパティ(読み取り専用)
説明 既定のオーディオ言語のロケール識別子(LCID)を取得
定義 Property defaultAudioLanguage() As Long
defaultFrameプロパティ
説明 ScriptCommandイベントで受信したURLの表示に使用するフレームの名前を設定/取得
定義 Property defaultFrame() As String
enableErrorDialogsプロパティ
説明 エラーダイアログボックスを自動的に表示するかどうかを設定/取得(Trueの場合、表示する。既定値はTrue)
定義 Property enableErrorDialogs() As Boolean
getModeメソッド
説明 プレイリストの再生モードを取得する(戻り値がTrueの場合、アクティブ)

(※)bstrMode引数に指定可能な値は、以下の通り。
autoRewind:トラックを最後まで再生した後、最初に戻る
loop:トラックのシーケンスを繰り返す
showFrame:再生していない場合、最も近いキーフレームを現在の位置に表示(ビデオメディアのみ)
shuffle:トラックをランダムな順序で再生

定義 Function getMode(bstrMode As String) As Boolean
invokeURLsプロパティ
説明 URLイベントがWebブラウザを起動する必要があるかどうかを設定/取得(Trueの場合、Webブラウザの起動が必要。既定値はTrue)
定義 Property invokeURLs() As Boolean
isAvailableプロパティ(読み取り専用)
説明 指定した機能が使用可能かどうかを取得(Trueの場合、使用可能)

(※)bstrItem引数に指定可能な値は、以下の通り。
AutoStart:autoStartプロパティを使用可能かどうか
Balance:balanceプロパティを使用可能かどうか
BaseURL:baseURLプロパティを使用可能かどうか
DefaultFrame:defaultFrameプロパティを使用可能かどうか
EnableErrorDialogs:enableErrorDialogsプロパティを使用可能かどうか
GetMode:getModeメソッドを使用可能かどうか
InvokeURLs:invokeURLsプロパティを使用可能かどうか
Mute:muteプロパティを使用可能かどうか
PlayCount:playCountプロパティを使用可能かどうか
Rate:rateプロパティを使用可能かどうか
SetMode:setModeメソッドを使用可能かどうか
Volume:volumeプロパティを使用可能かどうか

定義 Property isAvailable(bstrItem As String) As Boolean
mediaAccessRightsプロパティ(読み取り専用)
説明 ライブラリアクセスに対して現在付与されている権限を取得

(※)取得可能な値は、以下の通り。
none:現在のメディア項目のアクセス権のみ
read:読み取りアクセス権のみ
full:読み取り/書き込みアクセス権

定義 Property mediaAccessRights() As String
muteプロパティ
説明 オーディオがミュートされているかどうかを設定/取得(Trueの場合、ミュート。既定値はFalse)
定義 Property mute() As Boolean
playCountプロパティ
説明 メディア項目の再生回数を設定/取得(既定値は1)
定義 Property playCount() As Long
rateプロパティ
説明 ビデオメディアの現在の再生レートを設定/取得
定義 Property rate() As Double
requestMediaAccessRightsメソッド
説明 ライブラリへの指定したレベルのアクセスを要求する

(※)bstrDesiredAccess引数に指定可能な値は、以下の通り。
none:現在のメディア項目のアクセス権のみ
read:読み取りアクセス権のみ
full:読み取り/書き込みアクセス権

定義 Function requestMediaAccessRights(bstrDesiredAccess As String) As Boolean
setModeメソッド
説明 プレイリストの再生モードを設定する

(※)bstrMode引数に指定可能な値は、以下の通り。
autoRewind:トラックを最後まで再生した後、最初に戻る
loop:トラックのシーケンスを繰り返す
showFrame:再生していない場合、最も近いキーフレームを現在の位置に表示(ビデオメディアのみ)
shuffle:トラックをランダムな順序で再生

(※)varfMode引数に指定可能な値は、以下の通り。
True:アクティブにする
False:非アクティブにする

定義 Sub setMode(bstrMode As String, varfMode As Boolean)
volumeプロパティ
説明 現在のボリュームを設定/取得
定義 Property volume() As Long

サンプル・プログラム(1)~InputBoxでWindowsMediaPlayerを操作(1)

予めExcelシートのA列に音楽ファイルのフルパスを入力しておき、以下のプログラムを起動するとInputBoxが表示され、コマンド入力待ちになりますので、「PLAY(再生)」「NEXT(次へ)」「PREV(前へ)」「STOP(停止)」のいずれかのコマンドを入力すると、指定した動作を実行します。

行番号8でSettingsオブジェクトのautoStartプロパティにFalseを設定して自動的に再生が開始されないようにしたうえ、行番号10でPlayerオブジェクトのURLプロパティに最初の音楽ファイルを設定して、行番号11~37の繰返し処理に入ります。
行番号12でInputBoxを表示し、行番号13~15は「キャンセル」ボタン(または「Esc」キー)が押下された時にループから抜ける処理、行番号16~36が入力したコマンドに対応する処理です。
行番号18はControlsオブジェクトのplayメソッドを実行、行番号20はControlsオブジェクトのstopメソッドを実行、行番号27~28はPlayerオブジェクトのURLプロパティに次の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行、行番号34~35はPlayerオブジェクトのURLプロパティに前の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行しています。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim rcnt As Long
  4. Private Sub Sample1()
  5.     Set sht = ActiveSheet
  6.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  7.     wmp.settings.autoStart = False
  8.     rcnt = 1
  9.     wmp.URL = sht.Cells(rcnt, 1)
  10.     Do
  11.         wStr = InputBox(“コマンドを入力して下さい")
  12.         If StrPtr(wStr) = 0 Then
  13.             Exit Do
  14.         End If
  15.         Select Case UCase(wStr)
  16.         Case “PLAY"
  17.             wmp.Controls.Play
  18.         Case “STOP"
  19.             wmp.Controls.stop
  20.             Exit Do
  21.         Case “NEXT"
  22.             rcnt = rcnt + 1
  23.             If rcnt > sht.Cells(sht.Rows.Count, 1).End(xlUp).Row Then
  24.                 rcnt = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  25.             End If
  26.             wmp.URL = sht.Cells(rcnt, 1)
  27.             wmp.Controls.Play
  28.         Case “PREV"
  29.             rcnt = rcnt – 1
  30.             If rcnt < 1 Then
  31.                 rcnt = 1
  32.             End If
  33.             wmp.URL = sht.Cells(rcnt, 1)
  34.             wmp.Controls.Play
  35.         End Select
  36.     Loop
  37.     wmp.Close
  38.     Set wmp = Nothing
  39. End Sub

サンプル・プログラム(2)~InputBoxでWindowsMediaPlayerを操作(2)

WindowsMediaPlayerコントロールを使用して、サンプル・プログラム(1)と同様の処理を行うプログラムです。

行番号6でWMPのトランスポートコントロール(再生、停止、一時停止など)を非表示に設定し、行番号7でSettingsオブジェクトのautoStartプロパティにFalseを設定して自動的に再生が開始されないようにしたうえ、行番号9でPlayerオブジェクトのURLプロパティに最初の音楽ファイルを設定して、行番号10~36の繰返し処理に入ります。
行番号11でInputBoxを表示し、行番号12~14は「キャンセル」ボタン(または「Esc」キー)が押下された時にループから抜ける処理、行番号15~35が入力したコマンドに対応する処理です。
行番号17はControlsオブジェクトのplayメソッドを実行、行番号19はControlsオブジェクトのstopメソッドを実行、行番号26~27はPlayerオブジェクトのURLプロパティに次の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行、行番号33~34はPlayerオブジェクトのURLプロパティに前の音楽ファイルを設定してからControlsオブジェクトのplayメソッドを実行しています。

  1. Dim sht As Worksheet
  2. Dim rcnt As Long
  3. Private Sub Sample2()
  4.     Set sht = ActiveSheet
  5.     WindowsMediaPlayer1.uiMode = “none"
  6.     WindowsMediaPlayer1.settings.autoStart = False
  7.     rcnt = 1
  8.     WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
  9.     Do
  10.         wStr = InputBox(“コマンドを入力して下さい")
  11.         If StrPtr(wStr) = 0 Then
  12.             Exit Do
  13.         End If
  14.         Select Case UCase(wStr)
  15.         Case “PLAY"
  16.             WindowsMediaPlayer1.Controls.Play
  17.         Case “STOP"
  18.             WindowsMediaPlayer1.Controls.stop
  19.             Exit Do
  20.         Case “NEXT"
  21.             rcnt = rcnt + 1
  22.             If rcnt > sht.Cells(sht.Rows.Count, 1).End(xlUp).Row Then
  23.                 rcnt = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  24.             End If
  25.             WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
  26.             WindowsMediaPlayer1.Controls.Play
  27.         Case “PREV"
  28.             rcnt = rcnt – 1
  29.             If rcnt < 1 Then
  30.                 rcnt = 1
  31.             End If
  32.             WindowsMediaPlayer1.URL = sht.Cells(rcnt, 1)
  33.             WindowsMediaPlayer1.Controls.Play
  34.         End Select
  35.     Loop
  36. End Sub

WindowsMediaPlayerコントロールのuiModeを"none"に設定するとトランスポートコントロールが非表示になりますが、WindowsMediaPlayerコントロール上でマウスを右クリックすると、下図のようなコンテキストメニューが表示されますので、このメニューから操作することは可能です。

メディアに関するオブジェクト(MediaCollectionオブジェクト、Mediaオブジェクト)の詳細

メディアに関するオブジェクトとして、メディア項目のコレクションを表すMediaCollectionオブジェクト、個々のメディアを表すMediaオブジェクトについて、詳細を説明します。

MediaCollectionオブジェクト(IWMPMediaCollection)の詳細

MediaCollectionオブジェクトで提供されているメソッドは下表の通りです(プロパティはありません)。

addメソッド
説明 ライブラリに新しいメディア項目またはプレイリストを追加する
定義 Function add(bstrURL As String) As IWMPMedia
createQueryメソッド
説明 新しいQueryオブジェクトを作成する
定義 Function createQuery() As IWMPQuery
getAllメソッド
説明 ライブラリ内の全てのメディア項目を含むPlaylistオブジェクトを取得する
定義 Function getAll() As IWMPPlaylist
getAttributeStringCollectionメソッド
説明 指定したメディア種類内の指定した属性の全ての値のセットを表すStringCollectionオブジェクトを取得する
定義 Function getAttributeStringCollection(bstrAttribute As String, bstrMediaType As String) As IWMPStringCollection
getByAlbumメソッド
説明 指定したアルバムからメディア項目を含むPlaylist オブジェクト取得する
定義 Function getByAlbum(bstrAlbum As String) As IWMPPlaylist
getByAttributeメソッド
説明 指定した属性の指定した値を含むメディア項目のプレイリストを取得する
定義 Function getByAttribute(bstrAttribute As String, bstrValue As String) As IWMPPlaylist
getByAttributeAndMediaTypeメソッド
説明 指定した属性とメディア種類を持つMediaオブジェクトを含むPlaylistオブジェクトを取得する
定義 Function getByAttributeAndMediaType(bstrAttribute As String, bstrValue As String, bstrMediaType As String) As IWMPPlaylist
getByAuthorメソッド
説明 指定した作成者のメディア項目を含むPlaylistオブジェクトを取得する
定義 Function getByAuthor(bstrAuthor As String) As IWMPPlaylist
getByGenreメソッド
説明 指定したジャンルのメディア項目を含むPlaylistオブジェクトを取得する
定義 Function getByGenre(bstrGenre As String) As IWMPPlaylist
getByNameメソッド
説明 指定した名前のメディア項目を含むPlaylistオブジェクトを取得する
定義 Function getByName(bstrName As String) As IWMPPlaylist
getMediaAtomメソッド
説明 指定したプロパティが使用可能なプロパティのセット内に存在するインデックスを取得する
定義 Function getMediaAtom(bstrItemName As String) As Long
getPlaylistByQueryメソッド
説明 クエリ条件に一致するMediaオブジェクトを含むPlaylistオブジェクトを取得する
定義 Function getPlaylistByQuery(pQuery As IWMPQuery, bstrMediaType As String, bstrSortAttribute As String, fSortAscending As Boolean) As IWMPPlaylist
getStringCollectionByQueryメソッド
説明 クエリ条件に一致する文字列を含むStringCollectionオブジェクトを取得する
定義 Function getStringCollectionByQuery(bstrAttribute As String, pQuery As IWMPQuery, bstrMediaType As String, bstrSortAttribute As String, fSortAscending As Boolean) As IWMPStringCollection
isDeletedメソッド
説明 指定したメディア項目が削除済アイテムフォルダ内にあるかどうかを取得する(Trueの場合、削除済)
定義 Function isDeleted(pItem As IWMPMedia) As Boolean
removeメソッド
説明 メディア コレクションから項目を削除する
定義 Sub remove(pItem As IWMPMedia, varfDeleteFile As Boolean)
setDeletedメソッド
説明 指定したメディア項目を削除済アイテムフォルダに移動する
定義 Sub setDeleted(pItem As IWMPMedia, varfIsDeleted As Boolean)

Mediaオブジェクト(IWMPMedia)の詳細

Mediaオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

attributeCountプロパティ(読み取り専用)
説明 メディア項目に関連付けられている属性の数を取得
定義 Property attributeCount() As Long
durationプロパティ(読み取り専用)
説明 メディア項目の長さを秒単位で取得
定義 Property duration() As Double
durationStringプロパティ(読み取り専用)
説明 メディア項目の長さをHH:MM:SS形式で取得
定義 Property durationString() As String
Errorプロパティ(読み取り専用)
説明 メディア項目にエラーがある場合、ErrorItemオブジェクトを取得
定義 Property Error() As IWMPErrorItem
getAttributeCountByTypeメソッド
説明 指定した属性名と言語に関連付けられている属性の数を取得する
定義 Function getAttributeCountByType(bstrType As String, bstrLanguage As String) As Long
getAttributeNameメソッド
説明 指定したインデックスに対応する属性の名前を取得する
定義 Function getAttributeName(lIndex As Long) As String
getItemInfoメソッド
説明 メディア項目の指定した属性の値を取得する
定義 Function getItemInfo(bstrItemName As String) As String
getItemInfoByAtomメソッド
説明 指定したインデックス番号を持つ属性の値を取得する
定義 Function getItemInfoByAtom(lAtom As Long) As String
getItemInfoByTypeメソッド
説明 指定した属性名、言語、インデックスに対応する属性の値を取得する
定義 Function getItemInfoByType(bstrType As String, bstrLanguage As String, lIndex As Long) As Variant
getMarkerNameメソッド
説明 指定したインデックス位置にあるマーカーの名前を取得する
定義 Function getMarkerName(MarkerNum As Long) As String
getMarkerTimeメソッド
説明 指定したインデックス位置のマーカーの時刻を取得する
定義 Function getMarkerTime(MarkerNum As Long) As Double
imageSourceHeightプロパティ(読み取り専用)
説明 メディア項目の高さをピクセル単位で取得
定義 Property imageSourceHeight() As Long
imageSourceWidthプロパティ(読み取り専用)
説明 メディア項目の幅をピクセル単位で取得
定義 Property imageSourceWidth() As Long
isIdenticalプロパティ(読み取り専用)
説明 指定したオブジェクトが現在のオブジェクトと同じかどうかを取得(Trueの場合、同じオブジェクト)
定義 Property isIdentical(pIWMPMedia As IWMPMedia) As Boolean
isMemberOfメソッド
説明 指定したメディア項目が指定したプレイリストのメンバーであるかどうかを取得する(Trueの場合、プレイリストのメンバー)
定義 Function isMemberOf(pPlaylist As IWMPPlaylist) As Boolean
isReadOnlyItemメソッド
説明 指定したメディア項目の属性が読み取り専用かどうかを取得する(Trueの場合、読み取り専用)
定義 Function isReadOnlyItem(bstrItemName As String) As Boolean
markerCountプロパティ(読み取り専用)
説明 メディア項目内のマーカーの数を取得
定義 Property markerCount() As Long
nameプロパティ
説明 メディア項目の名前を設定/取得
定義 Property name() As String
setItemInfoメソッド
説明 メディア項目の指定した属性の値を設定する
定義 Sub setItemInfo(bstrItemName As String, bstrVal As String)
sourceURLプロパティ(読み取り専用)
説明 メディア項目のURLを取得
定義 Property sourceURL() As String

サンプル・プログラム(3)~MediaCollectionオブジェクトに含まれるMediaオブジェクトの名前を一覧表示

MediaCollectionオブジェクトに含まれるMediaオブジェクトの名前をExcelシートに一覧表示するプログラムです。

行番号7でMediaCollectionオブジェクトを取得し、行番号8~10の処理をCountプロパティの数だけ実行します。
行番号9でMediaオブジェクトのNameプロパティの内容をExcelシートのA列にセットしています。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim mc As IWMPMediaCollection
  4. Dim i As Long
  5. Private Sub Sample3()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set mc = wmp.mediaCollection
  9.     For i = 0 To mc.getAll().Count – 1
  10.         sht.Cells(i + 1, 1) = mc.getAll().Item(i).Name
  11.     Next i
  12.     Set mc = Nothing
  13.     Set wmp = Nothing
  14. End Sub

サンプル・プログラム(4)~MediaCollectionオブジェクトにMediaオブジェクトを追加

ExcelシートのA列に入力された音楽ファイルのフルパスがMediaCollectionオブジェクトに未登録であれば、Mediaオブジェクトを追加するプログラムです。

行番号9でMediaCollectionオブジェクトを取得し、行番号10~21の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号11~15の処理をMediaCollectionオブジェクトのCountプロパティの数だけ繰返し、行番号12で音楽ファイルのパスが登録済かどうかを確認、未登録であれば行番号17でMediaオブジェクトを追加します。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim mc As IWMPMediaCollection
  4. Dim rcnt, mcnt As Long
  5. Private Sub Sample4()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set mc = wmp.mediaCollection
  9.     For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  10.         For mcnt = 0 To mc.getAll().Count – 1
  11.             If sht.Cells(rcnt, 1) = mc.getAll().Item(mcnt).SourceUrl Then
  12.                 Exit For
  13.             End If
  14.         Next mcnt
  15.         If mcnt > mc.getAll().Count – 1 Then
  16.             mc.Add (sht.Cells(rcnt, 1))
  17.             mcnt = mc.getAll().Count – 1
  18.         End If
  19.         pl.appendItem pIWMPMedia:=mc.getAll().Item(mcnt)
  20.     Next rcnt
  21.     Set mc = Nothing
  22.     Set wmp = Nothing
  23. End Sub

サンプル・プログラム(5)~Mediaオブジェクトの属性名を一覧表示

MediaオブジェクトのgetItemInfoメソッドやsetItemInfoメソッドのbstrItemName引数に指定可能な属性名をExcelシートに一覧表示するプログラムです。

行番号9でMediaCollectionオブジェクトを取得し、行番号10~12の処理をMediaオブジェクトのattributeCountプロパティの数だけ繰返し、行番号11で属性名をExcelシートのA列にセットしています。

(※)属性の詳細については、Microsoftのサイト(Windows Media Player 属性リファレンス)を参照して下さい。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim mc As IWMPMediaCollection
  4. Dim i As Long
  5. Private Sub Sample5()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set mc = wmp.mediaCollection
  9.     For i = 0 To mc.getAll().Item(0).attributeCount – 1
  10.         sht.Cells(i + 1, 1) = mc.getAll().Item(0).getAttributeName(i)
  11.     Next i
  12.     Set mc = Nothing
  13.     Set wmp = Nothing
  14. End Sub

サンプル・プログラム(6)~Mediaオブジェクトの属性値を一覧表示

MediaCollectionオブジェクトに含まれるMediaオブジェクトの属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽ファイルを対象としており、ExcelシートのA列に「アルバム名」、B列に「トラック番号」、C列に「アーティスト名」、D列に「曲名」を表示しています。

行番号9でMediaCollectionオブジェクトを取得し、行番号10~15の処理をMediaCollectionオブジェクトのCountプロパティの数だけ繰返し、行番号11~14で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim mc As IWMPMediaCollection
  4. Dim i As Long
  5. Private Sub Sample6()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set mc = wmp.mediaCollection
  9.     For i = 0 To mc.getAll().Count – 1
  10.         sht.Cells(i + 1, 1) = mc.getAll().Item(i).getItemInfo(“WM/AlbumTitle")
  11.         sht.Cells(i + 1, 2) = mc.getAll().Item(i).getItemInfo(“WM/TrackNumber")
  12.         sht.Cells(i + 1, 3) = mc.getAll().Item(i).getItemInfo(“Author")
  13.         sht.Cells(i + 1, 4) = mc.getAll().Item(i).getItemInfo(“Title")
  14.     Next i
  15.     Set mc = Nothing
  16.     Set wmp = Nothing
  17. End Sub

プレイリストに関するオブジェクト(PlaylistCollectionオブジェクト、Playlistオブジェクト)の詳細

プレイリストに関するオブジェクトとして、プレイリストのコレクションを表すPlaylistCollectionオブジェクト、個々のプレイリストを表すPlaylistオブジェクトについて、詳細を説明します。

PlaylistCollectionオブジェクト(IWMPPlaylistCollection)の詳細

PlaylistCollectionオブジェクトで提供されているメソッドは下表の通りです(プロパティはありません)。

getAllメソッド
説明 ライブラリ内の全てのプレイリストを含むPlaylistArrayオブジェクトを取得する
定義 Function getAll() As IWMPPlaylistArray
getByNameメソッド
説明 指定した名前のプレイリストを含むPlaylistArrayオブジェクトを取得する
定義 Function getByName(bstrName As String) As IWMPPlaylistArray
importPlaylistメソッド
説明 ライブラリに静的プレイリストを追加する
定義 Function importPlaylist(pItem As IWMPPlaylist) As IWMPPlaylist
isDeletedメソッド
説明 指定したプレイリストが削除済アイテムフォルダ内にあるかどうかを取得する(Trueの場合、削除済)
定義 Function isDeleted(pItem As IWMPPlaylist) As Boolean
newPlaylistメソッド
説明 ライブラリに新しいプレイリストを作成する
定義 Function newPlaylist(bstrName As String) As IWMPPlaylist
removeメソッド
説明 ライブラリからプレイリストを削除する
定義 Sub remove(pItem As IWMPPlaylist)
setDeletedメソッド
説明 プレイリストを削除済アイテムフォルダに移動する
定義 Sub setDeleted(pItem As IWMPPlaylist, varfIsDeleted As Boolean)

Playlistオブジェクト(IWMPPlaylist)の詳細

Playlistオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

appendItemメソッド
説明 プレイリストの末尾にメディア項目を追加する
定義 Sub appendItem(pIWMPMedia As IWMPMedia)
attributeCountプロパティ(読み取り専用)
説明 プレイリストに関連付けられている属性の数を取得
定義 Property attributeCount() As Long
attributeNameプロパティ(読み取り専用)
説明 インデックスで指定された属性の名前を取得
定義 Property attributeName(lIndex As Long) As String
clearメソッド
説明 プレイリストから全てのメディア項目を削除する
定義 Sub clear()
countプロパティ(読み取り専用)
説明 プレイリスト内の項目の数を取得
定義 Property count() As Long
getItemInfoメソッド
説明 プレイリスト属性の値を取得する
定義 Function getItemInfo(bstrName As String) As String
insertItemメソッド
説明 プレイリストの指定した場所にメディア項目を挿入する
定義 Sub insertItem(lIndex As Long, pIWMPMedia As IWMPMedia)
isIdenticalプロパティ(読み取り専用)
説明 指定したオブジェクトが現在のオブジェクトと同じかどうかを取得(Trueの場合、同じオブジェクト)
定義 Property isIdentical(pIWMPPlaylist As IWMPPlaylist) As Boolean
Itemプロパティ(読み取り専用)
説明 指定したインデックス位置にあるメディア項目を取得
定義 Property Item(lIndex As Long) As IWMPMedia
moveItemメソッド
説明 プレイリスト内の項目の位置を変更する
定義 Sub moveItem(lIndexOld As Long, lIndexNew As Long)
nameプロパティ
説明 プレイリストの名前を設定/取得
定義 Property name() As String
removeItemメソッド
説明 プレイリストから指定した項目を削除する
定義 Sub removeItem(pIWMPMedia As IWMPMedia)
setItemInfoメソッド
説明 プレイリスト属性の値を設定する
定義 Sub setItemInfo(bstrName As String, bstrValue As String)

サンプル・プログラム(7)~PlaylistオブジェクトにMediaオブジェクトを追加し、属性値を一覧表示

ExcelシートのA列に入力された音楽ファイルのフルパスからMediaオブジェクトを作成し、Playlistオブジェクトに追加したうえ、Mediaオブジェクトの属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽ファイルを対象としており、ExcelシートのB列に「アルバム名」、C列に「トラック番号」、D列に「アーティスト名」、E列に「曲名」を表示しています。

行番号9でPlaylistオブジェクトを新規作成し、行番号10~12の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号11で音楽ファイルのフルパスからMediaオブジェクトを新規作成し、Playlistオブジェクトに追加しています。
行番号13~18の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号14~17で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。

なお、できあがったPlaylistオブジェクトをPlayerオブジェクトのcurrentPlaylistプロパティに設定すれば、プレイリストの再生が開始されます。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim pl As IWMPPlaylist
  4. Dim rcnt, i As Long
  5. Private Sub Sample7()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set pl = wmp.newPlaylist(“test", “")
  9.     For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  10.         pl.appendItem pIWMPMedia:=wmp.newMedia(sht.Cells(rcnt, 1))
  11.     Next rcnt
  12.     For i = 0 To pl.Count – 1
  13.         sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
  14.         sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“WM/TrackNumber")
  15.         sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Author")
  16.         sht.Cells(i + 1, 5) = pl.Item(i).getItemInfo(“Title")
  17.     Next i
  18.     Set pl = Nothing
  19.     Set wmp = Nothing
  20. End Sub

サンプル・プログラム(8)~Playlistオブジェクトの属性名を一覧表示

PlaylistオブジェクトのgetItemInfoメソッドやsetItemInfoメソッドのbstrName引数に指定可能な属性名をExcelシートに一覧表示するプログラムです。

行番号9でPlaylistオブジェクトを新規作成し、行番号10~12の処理をPlaylistオブジェクトのattributeCountプロパティの数だけ繰返し、行番号11で属性名をExcelシートのA列にセットしています。

(※)属性の詳細については、Microsoftのサイト(Windows Media Player 属性リファレンス)を参照して下さい。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim pl As IWMPPlaylist
  4. Dim i As Long
  5. Private Sub Sample8()
  6.     Set sht = ActiveSheet
  7.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  8.     Set pl = wmp.newPlaylist(“test", “")
  9.     For i = 0 To pl.attributeCount – 1
  10.         sht.Cells(i + 1, 1) = pl.attributeName(i)
  11.     Next i
  12.     Set pl = Nothing
  13.     Set wmp = Nothing
  14. End Sub

CDに関するオブジェクト(CdromCollectionオブジェクト、Cdromオブジェクト、CdromRipオブジェクト、CdromBurnオブジェクト)の詳細

CDに関するオブジェクトとして、CD/DVDドライブのコレクションを表すCdromCollectionオブジェクト、個々のCD/DVDドライブを表すCdromオブジェクト、オーディオCDの読み込みに関するCdromRipオブジェクト、オーディオCDの書き込みに関するCdromBurnオブジェクトについて、詳細を説明します。

CdromCollectionオブジェクト(IWMPCdromCollection)の詳細

CdromCollectionオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

countプロパティ(読み取り専用)
説明 システムで使用可能なCD/DVDドライブの数を取得
定義 Property count() As Long
getByDriveSpecifierメソッド
説明 特定のドライブ文字に関連付けられているCdromオブジェクトを取得する
定義 Function getByDriveSpecifier(bstrDriveSpecifier As String) As IWMPCdrom
Itemメソッド
説明 指定したインデックス位置にあるCdromオブジェクトを取得する
定義 Function Item(lIndex As Long) As IWMPCdrom

Cdromオブジェクト(IWMPCdrom)の詳細

Cdromオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

driveSpecifierプロパティ(読み取り専用)
説明 CD/DVDドライブ文字を取得
定義 Property driveSpecifier() As String
ejectメソッド
説明 ドライブからCD/DVDを取り出す
定義 Sub eject()
Playlistプロパティ(読み取り専用)
説明 CDのトラックまたはDVDのルートレベルのタイトルエントリを表すPlaylistオブジェクトを取得
定義 Property Playlist() As IWMPPlaylist

CdromRipオブジェクト(IWMPCdromRip)の詳細

CdromRipオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

ripProgressプロパティ(読み取り専用)
説明 CDリッピングの進行状況を完了率として取得
定義 Property ripProgress() As Long
ripStateプロパティ(読み取り専用)
説明 リッピングプロセスの状態を取得

(※)WMPRipState列挙体の値は、以下の通り。
wmprsUnknown(0):有効でない
wmprsRipping(1):リッピング中
wmprsStopped(2):停止

定義 Property ripState() As WMPRipState
startRipメソッド
説明 CDをリッピングする
定義 Function startRip() As HRESULT
stopRipメソッド
説明 CDのリッピングプロセスを停止する
定義 Function stopRip() As HRESULT

Microsoftのドキュメントには「リッピングするCDのIWMPCdromインターフェイスをキャストして 、IWMPCdromRipインターフェイスを取得します」と記載されていますが、Cdromオブジェクトと同じアドレスを割り当てれば良いだけなので、以下のように記述すれば使用可能になります。
行番号5を「Set cd = wmp.cdromcollection.getByDriveSpecifier(“D:")」と記述しても大丈夫です。

  1. Dim cr As IWMPCdrom
  2. Dim cd As IWMPCdromRip
  3. Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  4. Set cd = cr

CdromBurnオブジェクト(IWMPCdromBurn)の詳細

CdromBurnオブジェクトで提供されているメソッドおよびプロパティは下表の通りです。

burnFormatプロパティ
説明 書き込むCDの種類を取得

(※)WMPBurnFormat列挙体の値は、以下の通り。
wmpbfAudioCD(0):オーディオCD
wmpbfDataCD(1):データCD

定義 Property burnFormat() As WMPBurnFormat
burnPlaylistプロパティ
説明 CDに書き込むプレイリストを設定/取得
定義 Property burnPlaylist() As IWMPPlaylist
burnProgressプロパティ(読み取り専用)
説明 CD書き込みの進行状況を完了率として取得
定義 Property burnProgress() As Long
burnStateプロパティ(読み取り専用)
説明 書き込みプロセスの状態を取得

(※)WMPBurnState列挙体の値は、以下の通り。
wmpbsUnknown(0):有効でない
wmpbsBusy(1):ビジー
wmpbsReady(2):準備完了
wmpbsWaitingForDisc(3):待機中
wmpbsRefreshStatusPending(4):書き込みプレイリストが変更された
wmpbsPreparingToBurn(5):書き込み準備中
wmpbsBurning(6):書き込み中
wmpbsStopped(7):停止
wmpbsErasing(8):消去中
wmpbsDownloading(9):ダウンロード中

定義 Property burnState() As WMPBurnState
eraseメソッド
説明 CDを消去する
定義 Function erase() As HRESULT
getItemInfoメソッド
説明 CDの指定した属性の値を取得する

(※)bstrItem引数に指定可能な値は、以下の通り。
AvailableTime:CDで使用できる時間を秒単位で取得
Blank:CDが空白かどうかを取得
FreeSpace:CDの空き領域をバイト単位で取得
TotalSpace:CDの合計領域をバイト単位で取得

定義 Function getItemInfo(bstrItem As String) As String
isAvailableメソッド
説明 CDドライブとメディアに関する情報を取得する

(※)bstrItem引数に指定可能な値は、以下の通り。
Burn:ドライブがCDバーナーかどうか
Disc:ドライブにCDがあるかどうか
Erase:CDが消去できるかどうか
Write:CDに書き込めるかどうか

定義 Function isAvailable(bstrItem As String) As Boolean
labelプロパティ
説明 CDボリュームラベル文字列を設定/取得
定義 Property label() As String
refreshStatusメソッド
説明 現在のBurnプレイリストの状態情報を更新する
定義 Function refreshStatus() As HRESULT
startBurnメソッド
説明 CDを書き込む
定義 Function startBurn() As HRESULT
stopBurnメソッド
説明 CD書き込みプロセスを停止する
定義 Function stopBurn() As HRESULT

Microsoftのドキュメントには「書き込むCDのIWMPCdromインターフェイスをキャストすることで、IWMPCdromBurnインターフェイスを取得します」と記載されていますが、Cdromオブジェクトと同じアドレスを割り当てれば良いだけなので、以下のように記述すれば使用可能になります。
行番号5を「Set cb = wmp.cdromcollection.getByDriveSpecifier(“D:")」と記述しても大丈夫です。

  1. Dim cr As IWMPCdrom
  2. Dim cb As IWMPCdromBurn
  3. Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  4. Set cb = cr

サンプル・プログラム(9)~CD Playlistに含まれるMediaオブジェクトの属性値を一覧表示

CD Playlistに含まれるMediaオブジェクト(トラックに相当)の属性値をExcelシートに一覧表示するプログラムです。
このサンプル・プログラムは音楽CDを対象としており、ExcelシートのB列に「アルバム名」、C列に「トラック番号」、D列に「アーティスト名」、E列に「曲名」を表示しています。

行番号10~11でDドライブの音楽CDからPlaylistオブジェクトを取得し、行番号12~17の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号13~16で「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットしています。

なお、CD PlaylistをPlayerオブジェクトのcurrentPlaylistプロパティに設定すれば、CD の再生が開始されます。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim cr As IWMPCdrom
  4. Dim pl As IWMPPlaylist
  5. Dim i As Long
  6. Private Sub Sample9()
  7.     Set sht = ActiveSheet
  8.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  9.     Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  10.     Set pl = cr.Playlist
  11.     For i = 0 To pl.Count – 1
  12.         sht.Cells(i + 1, 1) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
  13.         sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/TrackNumber")
  14.         sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“Author")
  15.         sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Title")
  16.     Next i
  17.     Set pl = Nothing
  18.     Set cr = Nothing
  19.     Set wmp = Nothing
  20. End Sub

サンプル・プログラム(10)~CDをリッピングしてMP3ファイルを作成

音楽CDをリッピングしてMP3ファイルを作成するプログラムです。
まずCD PlaylistをExcelシートに一覧表示して一旦停止し、取り込み対象を決定してから処理を再開すると、音楽CDをリッピングしてMP3ファイルを作成します。

行番号11~13でDドライブの音楽CDからPlaylistオブジェクトを取得し、行番号14~20の処理をPlaylistオブジェクトのCountプロパティの数だけ繰返し、行番号15~19で「取り込み要否」「アルバム名」「トラック番号」「アーティスト名」「曲名」をExcelシートにセットして一旦停止します。
ExcelシートのA列に表示される「取り込み要否」が『True』のトラックが取り込み対象になりますので、必要に応じて修正を行った後、プログラムの処理を再開します。

行番号22~28でExcelシートの「取り込み要否」の内容をMediaオブジェクトのSelectedForRip属性に設定し、行番号29でリッピングを開始。行番号30~32でリッピング終了まで待機し、行番号33でCDを排出しています。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim cr As IWMPCdrom
  4. Dim cd As IWMPCdromRip
  5. Dim pl As IWMPPlaylist
  6. Dim i As Long
  7. Private Sub Sample10()
  8.     Set sht = ActiveSheet
  9.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  10.     Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  11.     Set cd = cr
  12.     Set pl = cr.Playlist
  13.     For i = 0 To pl.Count – 1
  14.         sht.Cells(i + 1, 1) = pl.Item(i).getItemInfo(“SelectedForRip")
  15.         sht.Cells(i + 1, 2) = pl.Item(i).getItemInfo(“WM/AlbumTitle")
  16.         sht.Cells(i + 1, 3) = pl.Item(i).getItemInfo(“WM/TrackNumber")
  17.         sht.Cells(i + 1, 4) = pl.Item(i).getItemInfo(“Author")
  18.         sht.Cells(i + 1, 5) = pl.Item(i).getItemInfo(“Title")
  19.     Next i
  20.     Stop
  21.     For i = 1 To sht.Cells(sht.Rows.Count, 2).End(xlUp).Row
  22.         If sht.Cells(i, 1) = True Then
  23.             pl.Item(i – 1).setItemInfo bstrItemName:="SelectedForRip", bstrVal:="True"
  24.         Else
  25.             pl.Item(i – 1).setItemInfo bstrItemName:="SelectedForRip", bstrVal:="False"
  26.         End If
  27.     Next i
  28.     cd.startRip
  29.     Do Until cd.ripState = wmprsStopped
  30.         DoEvents
  31.     Loop
  32.     cr.eject
  33.     Set pl = Nothing
  34.     Set cd = Nothing
  35.     Set cr = Nothing
  36.     Set wmp = Nothing
  37. End Sub

CdromRipオブジェクトに関する補足説明

CdromRipオブジェクトは少しクセがあってわかり難いので、サンプル・プログラム(10)に沿って補足説明をしておきます。

(1)MP3ファイルの作成
CdromRipオブジェクトのstartRipメソッドを実行すると、WMPの[ツール]-[オプション]-[音楽の取り込み]で設定した方法で取り込まれます。
MP3ファイルを作成するのであれば、予め「取り込みの設定」で「形式」を『MP3』に設定しておく必要があります(下図参照)。

(2)MediaオブジェクトのSelectedForRip属性
MediaオブジェクトのSelectedForRip属性は、WMPで音楽CDを取り込む際に表示されるトラック一覧(下図参照)の左端のチェックボックスに対応しており、チェックされた状態(『True』)のトラックが取り込み対象になります。
WMPがCDを読み込んだ際、ライブラリに取り込まれていないトラックには『True』、取り込み済のトラックには『False』が設定されます。
なお、前掲のサンプル・プログラム(5)でMediaオブジェクトの属性名を一覧表示してもSelectedForRip属性は表示されません。

(3)CDリッピングを行う際の留意事項
MediaオブジェクトのSelectedForRip属性の確認を行わずにCDをリッピングするだけであれば、前半のPlaylistを表示する処理等(行番号14~28)は不要ですが、行番号13「Set pl = cr.Playlist」の記述は残しておかないとリッピングされません。

Microsoftのドキュメントには記載されていませんが、有識者の方々が公開されている情報によると、「Cdromオブジェクトの機能を使用しないと、アドレスが有効にならない」とのことです。
なお、筆者の場合は「Set pl = cr.Playlist」を追加してもリッピングが開始されず、エラーにもならずに処理が終了してしまうという事象に悩まされましたが、そのPC環境ではWMPでCDのリッピングを行ったことがなかったため、「取り込みオプション(下図参照)」が未設定だったことが原因でした。
一度設定してしまえば、この画面が表示されることはなく、正常にリッピングできるようになります。

(4)シンプルにCDリッピングだけを行うプログラム
WMPの設定に従って無条件にCDリッピングを行うだけであれば、以下のようなコードで実現可能です。

  1. Dim wmp As WindowsMediaPlayer
  2. Dim cr As IWMPCdrom
  3. Dim cd As IWMPCdromRip
  4. Dim pl As IWMPPlaylist
  5. Private Sub Sample10()
  6.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  7.     Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  8.     Set cd = cr
  9.     Set pl = cr.Playlist
  10.     cd.startRip
  11.     Do Until cd.ripState = wmprsStopped
  12.         DoEvents
  13.     Loop
  14.     cr.eject
  15.     Set pl = Nothing
  16.     Set cd = Nothing
  17.     Set cr = Nothing
  18.     Set wmp = Nothing
  19. End Sub

サンプル・プログラム(11)~Excelシートで指定した音楽ファイルをCDに書き込み

予めExcelシートのA列に音楽ファイルのフルパスを入力しておき、その内容をプレリストとして音楽CDに書き込むプログラムです。

行番号11でPlaylistオブジェクトを新規作成し、行番号12~14の処理をExcelシートのA列に入力された音楽ファイルの数だけ実行します。
行番号13で音楽ファイルのフルパスからMediaオブジェクトを新規作成し、Playlistオブジェクトに追加しています。

行番号15~16でDドライブを書き込み用のドライブとして設定し、行番号17~19で書き込みの準備を行った後、書き込み可能な状態であれば、行番号21で書き込みを開始。行番号22~24で書き込み終了まで待機し、行番号26でCDを排出しています。

  1. Dim sht As Worksheet
  2. Dim wmp As WindowsMediaPlayer
  3. Dim pl As IWMPPlaylist
  4. Dim cr As IWMPCdrom
  5. Dim cb As IWMPCdromBurn
  6. Dim rcnt As Long
  7. Private Sub Sample11()
  8.     Set sht = ActiveSheet
  9.     Set wmp = CreateObject(“new:{6BF52A52-394A-11d3-B153-00C04F79FAA6}")
  10.     Set pl = wmp.newPlaylist(“test", “")
  11.     For rcnt = 1 To sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
  12.         pl.appendItem pIWMPMedia:=wmp.newMedia(sht.Cells(rcnt, 1))
  13.     Next rcnt
  14.     Set cr = wmp.cdromcollection.getByDriveSpecifier(“D:")
  15.     Set cb = cr
  16.     cb.burnFormat = WMPBurnFormat.wmpbfAudioCD
  17.     cb.burnPlaylist = pl
  18.     cb.refreshStatus
  19.     If (cb.isAvailable(“Burn") = True) And (cb.isAvailable(“Disc") = True) And (cb.isAvailable(“Write") = True) And (cb.burnState = WMPBurnState.wmpbsReady) Then
  20.         cb.startBurn
  21.         Do Until cb.burnState = wmpbsStopped
  22.             DoEvents
  23.         Loop
  24.     End If
  25.     cr.eject
  26.     Set cb = Nothing
  27.     Set cr = Nothing
  28.     Set pl = Nothing
  29.     Set wmp = Nothing
  30. End Sub

 

国本温子(著),緑川吉行(著),できるシリーズ編集部(著)
出版社:インプレス
発売日:2022/3/23
単行本(ソフトカバー):A5判/912ページ

大村あつし(著),古川順平(著)
出版社:技術評論社
発売日:2021/1/9
単行本(ソフトカバー):A5判/800ページ

高橋宣成(著)
出版社:技術評論社
発売日:2019/11/25
単行本(ソフトカバー):B5変形判/576ページ