PDA

View Full Version : Id3TAG in WAV file



Pico1965
11-24-2005, 03:31 PM
Hiii

I currently use Musicmatch jukebox 9.

It insert in wav file all id3tag (image, text etc).

Why other software like WMP, dbpowerAMP don't save and read tag in WAV file ?

Thanks

MrVideo
11-24-2005, 03:54 PM
Hiii

I currently use Musicmatch jukebox 9.

It insert in wav file all id3tag (image, text etc).

Why other software like WMP, dbpowerAMP don't save and read tag in WAV file ?

Thanks

I suspect it is because the WAVE spec doesn't allow for tags of any kind. The fact that MusicMatch does it doesn't make it right.

Like I said, just a guess.

Spoon
11-25-2005, 01:40 PM
Correct, certain limited tags are supported by wave, not hte full range. That doesn't stop another program from writing the id tags. If you can send me a small ( < 10MB)wav file that is tagged:

http://www.dbpoweramp.com/email.htm

Pico1965
11-30-2005, 05:11 AM
I do what you wants !

I wait your feedback

Spoon
11-30-2005, 01:45 PM
The file is tagged wrongly, the file breaks the wave container and looks to have an id3v2 type ID tag tacked on the end, here is what Music Converter R12 says about this file (r12 has what I think the worlds most complete and advanced wave reader, it is top draw stuff):

RIFF Header 'RIFF' Length: 385048 FormType 'WAVE'
*** Information: Warning 'RiffSizeLeft != FileSizeLeft' must be extra data on end of file. [clRIFFHandler::ScanFile]
Got Chunk 'fmt ' Length: 16 RiffSizeLeft: 385036 ChunkPosition: 12
Got Chunk 'data' Length: 385012 RiffSizeLeft: 385012 ChunkPosition: 36

as you can see they have just tacked some info on the end of the file, you cannot do that with wave files, any data has to be in specific chunks. BTW you can refer to this message if you wish to press MusicMatch for doing something so vulgar...

Pico1965
12-01-2005, 01:44 PM
Excuse. I have not understood the tenor of your answer.

MMJB with the exception of others player tagged the files wave

If I reproduce the files that I have sended to you with MMJB, I find all the information that I have inserted.

Mrvideo says that the tagged of the files wave is outside standard

Probably it would be enough to see where to try them and... to read them.

P.S. They are however aware that the community thinks MMJB one of gets worse player in circulation. Unfortunately to abandon means it retag beyond 100MB of files wav.

Thanks however of the attention

Spoon
12-01-2005, 03:02 PM
It might be out of the standard, but you cannot go writing id3v2 tags to the end of formats you are not supposed to. We and no other company will be adding reading support of id3v2 to wav files, it is just wrong.

nab128
03-13-2007, 10:03 PM
We and no other company will be adding reading support of id3v2 to wav files, it is just wrong.

Actually Tag&Rename have just added support for ID3v2 tags in wave files. It looks like its in a legal though non-standard wave chunk.

How do I get the info about what R12 says about a wave file e.g.

RIFF Header 'RIFF' Length: 385048 FormType 'WAVE'
Got Chunk 'fmt ' Length: 16 RiffSizeLeft: 385036 ChunkPosition: 12
Got Chunk 'data' Length: 385012 RiffSizeLeft: 385012 ChunkPosition: 36


Will dMC ever support more tag fields in wave files e.g.composer, artwork etc.?

Spoon
03-14-2007, 04:01 AM
>files e.g.composer, artwork etc.?

Not using the standard list chunks there is no provision.

If you have dBpoweramp Reference you can (in dBpoweramp Configuration >> Music Converter >> Settings for Popup info) enable to display the chunks inside a wave file.

nab128
03-15-2007, 11:56 PM
Could you map composer to ISRC perhaps. This is probably the next most common tag and would be very useful for me and maybe others.

"ISRC - Source. Identifies the name of the person or organization who supplied the original subject of the file."

Anyway is "itrk" a standard LIST chunk field? Voyetra website -

"itrk Track Number - this is an AudioStation extension (noted by the lower case).
WAVE files use a standard RIFF INFO chunk as documented by Microsoft.
So does AudioStation. The only custom bit is the itrk field which we
store the track number in."

If you use 1 non standard field why not others too?

Spoon
03-16-2007, 03:03 AM
Both the items you mentioned can be changed to the other standard (ie use ISRC) inCodecs Advanced in dBpoweramp Configration

nab128
03-18-2007, 10:39 PM
Thank you spoon, I didn't know about all these settings! R12 is really amazing and powerful.

But still I don't want to put album in ISRC I want to map composer to ISRC. Is it possible?

Can you add support for composer tag in the future?

Spoon
03-19-2007, 03:49 AM
In the next few days the DSP effects are being updated, the effect ID Tag Manilpulation has a 'Map' function where you could move the composer to album.

nab128
04-06-2007, 01:34 AM
This is great thanks Spoon!

So far I have found 9 fields in the converted wave file

IART Artist
INAM Title
IPRD Album
IGNR Genre
ICRD Year
itrk Track
ICMT Comment
TORG Label
ICOP Copyright

Better than id3v1 already!

Are there any more INFO fields you have mapped?

I just found Quicktime displays the IART, ICOP, INAM and ICMT fields under 'Show Movie Info' but no information shows in iTunes, WMP etc.

Spoon
04-06-2007, 03:19 AM
A quick paste of the code:


case mmioFOURCC('D', 'I', 'S', 'P'): RetListTags.AddTag(L"Sound Scheme Title", GotValue.w()); break;
case mmioFOURCC('I', 'A', 'R', 'L'): RetListTags.AddTag(L"Archival Location", GotValue.w()); break;
case mmioFOURCC('I', 'A', 'R', 'T'): RetListTags.AddTag(L"Artist", GotValue.w()); break;
case mmioFOURCC('I', 'C', 'M', 'S'): RetListTags.AddTag(L"Commissioned", GotValue.w()); break;
case mmioFOURCC('I', 'C', 'M', 'T'): RetListTags.AddTag(L"Comment", GotValue.w()); break;
case mmioFOURCC('I', 'C', 'O', 'P'): RetListTags.AddTag(L"Copyright", GotValue.w()); break;
case mmioFOURCC('I', 'C', 'R', 'D'): RetListTags.AddTag(L"Year", GotValue.w()); break;
case mmioFOURCC('I', 'C', 'R', 'P'): RetListTags.AddTag(L"Cropped", GotValue.w()); break;
case mmioFOURCC('I', 'D', 'I', 'M'): RetListTags.AddTag(L"Dimensions", GotValue.w()); break;
case mmioFOURCC('I', 'D', 'P', 'I'): RetListTags.AddTag(L"DPI", GotValue.w()); break;
case mmioFOURCC('I', 'E', 'N', 'G'): RetListTags.AddTag(L"Engineer", GotValue.w()); break;
case mmioFOURCC('I', 'G', 'N', 'R'): RetListTags.AddTag(L"Genre", GotValue.w()); break;
case mmioFOURCC('I', 'K', 'E', 'Y'): RetListTags.AddTag(L"Keywords", GotValue.w()); break;
case mmioFOURCC('I', 'L', 'G', 'T'): RetListTags.AddTag(L"Lightness", GotValue.w()); break;
case mmioFOURCC('I', 'M', 'E', 'D'): RetListTags.AddTag(L"Medium", GotValue.w()); break;
case mmioFOURCC('I', 'N', 'A', 'M'): RetListTags.AddTag(L"Title", GotValue.w()); break;
case mmioFOURCC('I', 'P', 'L', 'T'): RetListTags.AddTag(L"Palette Setting", GotValue.w()); break;
case mmioFOURCC('I', 'S', 'B', 'J'): RetListTags.AddTag(L"Subject", GotValue.w()); break;
case mmioFOURCC('I', 'S', 'F', 'T'): RetListTags.AddTag(L"Encoded By", GotValue.w()); break;
case mmioFOURCC('I', 'S', 'H', 'P'): RetListTags.AddTag(L"Sharpness", GotValue.w()); break;

//-------Sony Say ISRC is ALBUM IPRD is product--------
case mmioFOURCC('I', 'S', 'R', 'C'):
{
if (AlbumType == 0)
RetListTags.AddTag(L"ISRC", GotValue.w());
else
RetListTags.AddTag(L"Album", GotValue.w());
}
break;
case mmioFOURCC('I', 'P', 'R', 'D'):
{
if (AlbumType == 0)
RetListTags.AddTag(L"Album", GotValue.w());
else
RetListTags.AddTag(L"Product", GotValue.w());
break;
}

case mmioFOURCC('I', 'S', 'R', 'F'): RetListTags.AddTag(L"Source", GotValue.w()); break;
case mmioFOURCC('i', 't', 'r', 'k'): RetListTags.AddTag(L"Track", GotValue.w()); break;
case mmioFOURCC('T', 'R', 'C', 'K'): RetListTags.AddTag(L"Track", GotValue.w()); break;
case mmioFOURCC('I', 'T', 'C', 'H'): RetListTags.AddTag(L"Technician", GotValue.w()); break;
case mmioFOURCC('T', 'L', 'E', 'N'): RetListTags.AddTag(L"Length", GotValue.w()); break;
case mmioFOURCC('T', 'U', 'R', 'L'): RetListTags.AddTag(L"URL", GotValue.w()); break;
case mmioFOURCC('T', 'V', 'E', 'R'): RetListTags.AddTag(L"Version", GotValue.w()); break;
case mmioFOURCC('L', 'O', 'C', 'A'): RetListTags.AddTag(L"Location", GotValue.w()); break;
case mmioFOURCC('T', 'O', 'R', 'G'): RetListTags.AddTag(L"Label", GotValue.w()); break;