Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: WMPTSE (Read 309721 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

WMPTSE

Hello,

I've done a WMP plug in to support APE Tag (right now !) & other (ID3 in v1.0) inside Media Library.

http://wmptagext.sourceforge.net/

Welcome to the joy of viewing, editing your MPC, OGG, Flac & more files with WMP.

Give feedback about it & comments.

MaB_fr

WMPTSE

Reply #1
I've tried it with some MPC files and it works nicely!
we was young an' full of beans

WMPTSE

Reply #2
OK.

BEWARE, with 0.6 if you add lots of file in a row, the memory usage may boost...

I'm working on it, but you must be warned...   

MaB_fr

WMPTSE

Reply #3
0.7 Released !

In essence, architectural changes needed to allow third-party tag support...

MaB_fr

WMPTSE

Reply #4
Great tool, thanks a lot.  .
EAC>1)fb2k>LAME3.99 -V 0 --vbr-new>WMP12 2)MAC-Extra High




WMPTSE

Reply #8
First, for the record (;-), I never said that WMPTSE support vorbis in any way (for now)...

It supports ogg files if APEv2 tagged...
It may be against the specs, but it is sometimes (often ?) used as such....
So i added it, in a spirit of enabling more user to enjoy the benefits of my work.
If you insists, i can supress the ogg support (personnaly i don't use it).

It would be better to actually WRITE the vorbis tag support.

I've done the work to permit developers to simply do this !
I guess it is time to use it ....

You just have to :

1) make a Win32 dll with TWO exported functions :
- one named Read<your tag type name>Tag [in your case it will be "ReadVorbisTag"]
- one named Write<your tag type name>Tag [in your case it will be "WriteVorbisTag"]

...The TagSupport wizard can do that for you...with all include and so...


2) make WMPTSE load it :
add a registry key named <your tag type name> [in your case "Vorbis"] in HKEY_LOCAL_MACHINE\Soft\Pipool\WMPTSE and just add a string with the file type [in your case "ogg"] with your dll path as value..


3) Code your vorbis tag support :
Your "ReadVorbisTag" function will have 2 parameters
- one is a LPTSTR string to the path of the file to extract the tags from
- one is a structure you'll have to fill with extracted results (see WMPTSE.h - METATAG)
It should return TRUE if it succesfully handled the file or FALSE otherwise (if the file is not Vorbis tagged, for example)

Your "WriteVorbisTag" function will have 2 parameters :
- one is a LPTSTR string to the path of the file to add the tags into
- one is a structure you'll have to fill the vorbis metatag with (see WMPTSE.h - TAGITEM)
It should return TRUE if it succesfully handled the file or FALSE otherwise (if the file is not Vorbis tagged, for example)


I am here to help you in every step it should take.
And i deeply welcome any comments regarding extended tag support.

So, it is up to you now.

MaB_fr

WMPTSE

Reply #9
>It may be against the specs, but it is sometimes (often ?) used as such

Nope, ape2 tags are not used for ogg files by anything I know.

WMPTSE

Reply #10
ok, removed in the next release

MaB_fr

WMPTSE

Reply #11
Have you considered adding (unprotected) AAC/.M4A support for the library?  So far there are plenty solutions to play AAC in WMP, just nothing to make the library directly work with the tags/metadata.

WMPTSE

Reply #12
[...in this post i suppose that by library you mean "Media Library"...;-)]

You CAN do it yourself if it's APEv2 tagged right now...(i should've said "you MUST" ;))

(i'm not much documented about AAC & M4A tagging, because i simply don't use it [yes it IS the developper bias...sorry])

For adding any file type (or extensions, as in "*.aac"), just add a registry string with the path of the tag support dll in the tag type key...

Translated =>
In your case, if your AAC's files are APEv2 tagged, simply put a string named "AAC" in
[HKEY_LOCAL_MACHINE\SOFTWARE\piPOol\WMPTSE\APE] and just set the same value than the "ape" key.

For example, if you have installed the plug in in "C:\Program Files\WMPTSE", you should set the value to "C:\Program Files\WMPTSE\APETagSupport.dll"

If you are successfull, please let me know...i'll modify the install script to add AAC & M4A support.


If AAC & M4A files are not APEv2 tagged, i guess you'll have to wait for somebody to code the tag support dll, or pray that i urgently need to use AAC or M4A as file format...:-)

OR

Do it yourself....:-) As i said before, i MADE a wizard to pre-create the source code squeletton. Then, it is just some file format parsing and data struct filling. Basic C course ;)


Comments, suggestions, reports ...ARE welcomed ;)

MaB_fr

WMPTSE

Reply #13
No, AAC/M4A doesn't use APEv2 tagging.  The tagging/metadata is in the standard MPEG-4 container format.

Thanks for your efforts with APEv2 so far, though.  Very nice.  I'll pray you urgently want to read MPEG-4 container tags. 

WMPTSE

Reply #14
hum...

Sorry, but as for today, i'm continuing my "mpeg 4 free" life ;)....

On the positive side, i've search a bit around the file format supporting APE tagging (resulting first in deleting my OGG mess ;)) and i come with OptimFROG and WavePack, which are now supported (yeah, i know it's just a regsitry add...i coded it ;))

So, good news for kjoonlee, i've decided to take the responsability of coding vorbis support....

See you on the next release...(0.9)

MaB_fr

WMPTSE

Reply #15
Wow, ogg is a mess concerning tagging....

As anyone come with a lib abstracting Ogg/Vorbis, Ogg/Theora, Ogg/Flac, etc differencing regarding comments ?

Why tagging isn't considered a generic stream types...(as opposed as embedding it in a codec stream definition "???").

Has someone as a good logic explanation (except of ogg guys don't wanting to handle it....) ? It seems i missing a point there or something...

Thanks...

MaB_fr

 

WMPTSE

Reply #16
I think the idea with vorbis comments was that it was a stopgap until a "real" metadata format emerged that could be muxed in to ogg.  the problem is that it never emerged, and might never emerge.  people's requirements are too varied.  my hunch is that the only thing more complicated and useful than id3v1 that could catch on is a keyword based system ala flickr.  see also

http://forums.slimdevices.com/showthread.php?t=16452

if you have any questions about the metadata interfaces in libFLAC though feel free to ask.

Josh

WMPTSE

Reply #17
Thanks for the answer....

Sorry but i must be sure, if i understand correctly :

we ends up with a kind of substream "do it as you like" politic.

And there's no way to guarantee my users than i can handle every ogg file comments correctly ?

Am i wrong ?

And if i'm not, isn't it the time to actually get the Vorbis/Theora/Flac guys get some draft for the ogg team to consider ?

Yeah, i know, i'm a bit of a dreamer

MaB_fr


WMPTSE

Reply #19
Quote
And there's no way to guarantee my users than i can handle every ogg file comments correctly ?

ogg is just the container, so far all the comment specs are in the codec layers, so they have to be done individually for each codec according to their APIs.  some file types contained in ogg may not even have a comment spec, I don't know.

the part that can be reused is the representation of comments, since vorbis/flac/speex all use the same vorbis comment spec.  so you could create a generic vorbis comment API that knew how to read/write comments for the different codecs and hide the implementation details.  there is probably something already like that out there.

Josh

WMPTSE

Reply #20
ChristianHJW > if i understand correctly, we have some kind of :

(very sorry, but i usually think in C..:-/)

struct Tag
{
   u_int      Class-ID;
   void *      tag;
};

struct SimpleTag
{
   UTF8Str      TagName;         <= is this an UTF8 ? if so, wouldn't it be simple to make it a C string (as i doesn't see any type with non roman char...)?
   UTF8Str      TagString;
};

struct TargetsTag
{
   u_int      TargetTypeValue;   <= in the examples, there's always ONE targets tag per "tag", why not merging them ?
   UTF8Str      TargetType;
   u_int      UID[ nbofUID ];      <= i must admit i doesn't understand their use...why aren't they a SimpleTag (or maybe a UIDTag...)?
   u_int      nbofUID;
};

struct MatroskaTags
{
   Tag *       TagsTable[ nbTags ];
   u_int      nbTags;
};

i can't see the reason for the ORIGINAL/SAMPLE/COUNTRY tags.....

if i've not miss the most important part, your tag name list is definitelly good, i think.
For the rest, the structure is good, and seems to be kept as simple as possible (which is always good). I can think of some simplification (see comments before), but in general i think it's pretty strong.

I guess your a bit "russian localization" oriented, but it's fine with me for i do think it's the best for date stamping (the logic in "MM-DD-YYYY" is obscure for me...:-)).

MaB_fr

WMPTSE

Reply #21
Quote
Quote
And there's no way to guarantee my users than i can handle every ogg file comments correctly ?

ogg is just the container, so far all the comment specs are in the codec layers, so they have to be done individually for each codec according to their APIs.  some file types contained in ogg may not even have a comment spec, I don't know.

the part that can be reused is the representation of comments, since vorbis/flac/speex all use the same vorbis comment spec.  so you could create a generic vorbis comment API that knew how to read/write comments for the different codecs and hide the implementation details.  there is probably something already like that out there.

Josh
[a href="index.php?act=findpost&pid=340810"][{POST_SNAPBACK}][/a]


hum...isn't it the role of a supposed "container format" ?

I'm sorry but i doesn't understand the logic of forcing it into the codec (which for me is the coding/decoding handler of the actual data....).
Is it accepted that a vorbis stream contains speex data ? I'm very confused about the logic here....
When i read the ogg specs, i've seen lot's of "stream" philosophy....Isn't metadata a specific stream ? Not to be melted with audio data stream ?

As for searching an API to do it, i did...And found nothing "generic".
There's libvorbis for vorbis, libflac for flac, and libtheora for theora. They use the same logic, but seems not to be linked in the source level...

As long as i can't not guarantee to handle metadata correctly in ogg (and without having to support three or more different sourcebase and the logic with it) i'm not taking the risk to do it partially.

I let it to others...:-)
Sorry, kjoonlee...you may never recommends it :-(

Thanks for the answers...

MaB_fr

WMPTSE

Reply #22
Quote
I'm sorry but i doesn't understand the logic of forcing it into the codec (which for me is the coding/decoding handler of the actual data....).
Is it accepted that a vorbis stream contains speex data ? I'm very confused about the logic here....
When i read the ogg specs, i've seen lot's of "stream" philosophy....Isn't metadata a specific stream ? Not to be melted with audio data stream ?

yes.  but like I said, vorbis comments are the codec-specific stopgap until such a metadata stream spec comes along.  it may never come along.

Quote
As long as i can't not guarantee to handle metadata correctly in ogg (and without having to support three or more different sourcebase and the logic with it) i'm not taking the risk to do it partially.

I let it to others...:-)

ogg doesn't have any metadata, so there is no risk of doing it partially.  maybe the problem is that the API on the WMP side cannot support the idea of a .ogg containing different codecs?  but FLACs native container is not even ogg, even though it can be put in ogg or matroska.

as an example of how I would guess it would work:

Code: [Select]
1. wmp asks wmptse for the performer
2. wmptse maps that request to the PERFORMER field
3. wmptse calls its (or someone else's) vorbiscomment layer to get the PERFORMER field
4. inside vorbiscomment layer:
  switch(codec_type)
    case native-flac: use libFLAC to retrieve PERFORMER tag
    case ogg-vorbis: use libvorbis to retrieve PERFORMER tag
    cass ogg-speex: use libspeex to retrieve PERFORMER tag?
    ...


I don't know about libvorbis, but the FLAC metadata api should make this simple enough and I'd be glad to help out with how to write step 4 for different operations.

Josh

WMPTSE

Reply #23
Great doc, thanks !

Code: [Select]
1. wmp asks wmptse for the performer
2. wmptse maps that request to the PERFORMER field
3. wmptse calls its (or someone else's) vorbiscomment layer to get the PERFORMER field
4. inside vorbiscomment layer:
  switch(codec_type)
    case native-flac: use libFLAC to retrieve PERFORMER tag
    case ogg-vorbis: use libvorbis to retrieve PERFORMER tag
    cass ogg-speex: use libspeex to retrieve PERFORMER tag?
    ...


Sorry but you guessed wrong

WMP doesn't ask for anything, that's the whole problem...and that's what wmptse resolves.

I have not documented it already, but in the spirit, wmptse is a workaround...
Optimised, customisable, but ....it is.

For that, i must get ALL the metadata in one raw. Simply because WMP doesn't specify which data has been added/modified/deleted (in fact, i even doesn't know the file name added for 'add' in the medialibrary...i must SEARCH IT with a "just added" trick...[no comments  i found no other way]).

Then i can parse all these metadata and add it in WMP (which in a pretty "create your own stack overflow", sends it to the medialibrary as a change [yes, my changes because of WMP notifying me of some change are considered changes and are notified to ME even before i've finished doing them !!! again i had to trick it a bit (Critical sections are my friends), but it's safe now]).

On the other side, i can read metadata and write it "per changes" on the tagged file.

That's why the plug in api (or tagsupport API) in WMPTSE is unbalanced between read and write...

For now, i think i will code a native Flac support. It seems released and well documented...

MaB_fr

WMPTSE

Reply #24
So, just released 0.9...

Good news for kjoonlee, Vorbis is "read" supported (you can view Ogg Vorbis comments in WMP, but you can't edit/change them)

Sorry grommet, no news of MP4/AAC support...

WavPack and OptimFROG supported right through the setup...

And always APE and MPC support.

http://wmptagext.sourceforge.net/

or direct download link :

http://prdownloads.sourceforge.net/wmptage....9.msi?download

Enjoy...Comments always welcome...And bug report needed !!!

For now on, no more functionnality add.
It's just code cleaning (LOTS) and debugging (only one reported...by me :-()  ! until 1.0 release.

Thanks for jcoalson (great lib !!) for the FLAC help.
Thanks SebastianG, Lear and kode54 for the libVorbis help.

[i always thinked we doesn't thank enough people who gives....;-)]

MaB_fr