HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0114
UEAWMP ActiveXでのCDトラック情報について6解決


UEA

リンク

2015/1/14(Wed) 14:58:28|NO.66947

Windows Media Player ActiveXコントロールで、
CD-ROMに入った音楽CDのトラック情報を取得したいんですがうまくいきません。
MSDNを見ながら試行錯誤しましたが考え方から間違っているのかも…
と思い質問させていただきました。
ローカルのMP3やM4Aファイルのタグ取得は成功しているのですが…
「トラック情報」という表現が正しいのか怪しいですが、
要するにWMPが検索してくれたタイトルやアーティスト情報を取得したいのです。
現在書いたプログラムを一部除外して示します。


pos 0, 0 onexit *exit comres getmember newcom wmp,"WMPlayer.OCX.7" //cdromCollectionオブジェクト取得 wmpcdc = wmp("cdromCollection") //cdromCollectionからCdromオブジェクト取得 mcall wmpcdc, "item", "0" wmpcdr = getmember //Playlistオブジェクト取得 wmpcdl = wmpcdr("playlist") //CD情報取得 repeat wmpcdl("attributeCount") mcall wmpcdl, "getItemInfo", wmpcdl("attributeName", cnt - 0) mes ""+wmpcdl("attributeName", cnt - 0)+":"+getmember+"" loop //トラック情報を取得しようとする //itemメソッドはMedia オブジェクトを返します。(MSDNより) //インデックスを1にしているのは適当 mcall wmpcdl("item"), 1 wmpmedia = getmember *exit mcall wmp, "close" : end

Playlist.itemメソッドでMediaオブジェクトを取得して… と考えたのですが
デバッグウィンドウでみると実際に返ってきたのはCdromオブジェクトと同じ。
何か大きな勘違いがあって、MSDNの資料を見ただけでは解決できず…
どなたか私にヒントをくださいm(__)m



この記事に返信する


774

リンク

2015/1/15(Thu) 19:06:23|NO.66964

質問内容が込み入っている為、見当違いな事を言ってるかも知れませんが…

PlaylistオブジェクトはCDRomCollectionではなく、
PlaylistCollection配下のアイテムっぽいですよ。

>http://msdn.microsoft.com/ja-jp/library/cc410997.aspx



UEA

リンク

2015/1/15(Thu) 22:48:03|NO.66965

774様、回答ありがとうございます。
内容が整理されておらず、読みづらくてすみません。
最大の目的は、「CDのトラックのメタデータを取得したい」ということです。

教えていただいたオブジェクトモデルのツリーでは、
確かにPlaylistオブジェクトはPlaylistCollectionに接続されていますね。
これは気づかなかったことで、視野を広げることができました。
でも、CdromオブジェクトからはPlaylistオブジェクトしか取得できませんよね…
オブジェクト同士の関係について整理したいと思います。

No.66947のプログラムでは、「Mediaオブジェクトを取得すればメタデータが取得できる」
という1つの思い込みにもとづいて、Playlistオブジェクトを取得しています。
そこで、Mediaオブジェクトを取得する方法のひとつにplayerオブジェクトの
「currentMedia」プロパティがあり、これを使用してMediaオブジェクトを取得できました。


comres getmember newcom wmp,"WMPlayer.OCX.7" wmp("URL") = "wmpcd://0/3" mcall wmpmedia, "setItemInfo", "", "" mes wmpmedia("sourceURL") //"wmpcd://0/3"が格納されている mes wmpmedia("duration") //トラックの再生時間が格納 repeat wmpmedia ("attributeCount") mcall wmpmedia, "getAttributeName", cnt - 1 mcall wmpmedia, "getItemInfo", getmember dialog getmember loop
これでタグが取得できないかと思ったのですが得られるのは空データばかり。

うまくまとめられないので無理やりまとめます。
まず、Mediaオブジェクトを取得すれば目的を達成できるという考えは間違いでしょうか。
また、CDのメディアタグ取得の【手順】だけでもヒントをいただければと思います。
ご面倒でなければ、ご助言いただけると幸いです。



774

リンク

2015/1/16(Fri) 19:47:24|NO.66972

失礼しました、そちらにも在ったのですね^^;

UEA様の目的としては
「音楽CDからMP3タグのような曲毎の情報を取得したい」
という解釈で宜しいのでしょうか。

仮にそうだとして、果たしてその情報はCD-ROM内に存在するのでしょうか?

音楽CDから取得できたのは、データ(ファイル)としての情報とトラック(曲)数程度で、
タイトルやアーティストと言ったデータの内容に関する情報は無かったように思います。
但し、音楽CD買ったのは遠い昔ですので最近のなら在るのかも知れません…

ちなみにWMP(アプリケーション)の場合は
>たとえば CD を取り込むと、Windows Media Player はオンライン データベースを検索し、
>CD のトラックに関連するメディア情報をダウンロードします。
といった機能でそれらが存在しなくても表示されるようです。

目的の解釈からして取り違えてましたら、すみません無視しといて下さい。



UEA

リンク

2015/1/16(Fri) 20:48:24|NO.66973

>「音楽CDからMP3タグのような曲毎の情報を取得したい」
>という解釈で宜しいのでしょうか。
その通りでございます。

>タイトルやアーティストと言ったデータの内容に関する情報は無かったように思います。
はい、私もそのように認識しております。
紛れててわかりづらいですが、NO.66947にもWMPが検索した情報、と書いております。
個人的にはGraceNoteのCDDBのほうが多くのCDが登録されていていいんですが…(^_^;)

いろいろと試行錯誤しているのですがなかなか成功せず、やはり何か勘違いしているようですね…



774

リンク

2015/1/17(Sat) 01:47:02|NO.66978

なるほど、そういう事でしたか。

MediaCollection.getByAlbum辺りから、そのCD内の曲のデータを引っ張り出せないでしょうか。
CDRomCollectionやcurrentMediaでは素の情報のみのような気がします。

実際のメディアから得た情報を元に件の検索で得た情報を付加したものを
どこか(メディアライブラリ?)で一元管理、GUI上のプレイリストにはそこからの情報を表示。
という流れでは無いかという想像です。

で、それに当りそうなのはMediaCollectionかな〜と、思いっきり憶測だけで適当な事言ってます。



UEA

リンク

2015/1/17(Sat) 02:54:32|NO.66980

NO.50295のAさんのレスを見てふと思い、試してみたらあっさり取得できてしまいました(-_-;)
以下にそのプログラムを残しておきます。

onexit *exit comres getmember newcom wmp,"WMPlayer.OCX.7" wmpcdc = wmp("cdromCollection") //cdromCollectionからCdromオブジェクト取得 mcall wmpcdc, "item", "0" wmpcdr = getmember //CdromからPlaylistオブジェクト取得 wmpcdl = wmpcdr("playlist") //PlaylistオブジェクトのItemプロパティ(?)からMediaオブジェクト取得 wmpmedia = wmpcdl("Item", 3)//この引数はインデックスなので0はトラック1 //基本のタグ情報だけ取得してみる mcall wmpmedia, "getItemInfo", "Title" mes ""+getmember+"" mcall wmpmedia, "getItemInfo", "Artist" mes ""+getmember+"" mcall wmpmedia, "getItemInfo", "Album" mes ""+getmember+"" stop *exit mcall wmp, "close" end
これまでPlaylistオブジェクトのitemメソッドを呼び出して…と思っていたら
このプログラムではmcallを使わずMediaオブジェクトをitemプロパティ(?)から取得。
Playlist.attributeNameのようにプロパティにデータを渡すこともあるようですが
正直のところこの発想はありませんでした。
とりあえずわかりにくくならないように解決済みにします。
結局"item"はプロパティなのかメソッドなのか、よく分かってませんので、
どなたか詳しい方いらっしゃいましたらヒントをくださると幸いです。
レスくださった774様、本当にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.