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: Updated in_mad Winamp MAD MP3 input plugin (Read 296671 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Updated in_mad Winamp MAD MP3 input plugin

Reply #350
There's something wrong with v2.3 tag handling...

Might be caused by id3frame.h and /libid3tag-0.15.1b/id3tag.h. Both don't contain any definitions for TYER, but only point to TDRC instead.

Updated in_mad Winamp MAD MP3 input plugin

Reply #351
The main problem is that libid3tag was designed to only support v2.4 tags, and so a small piece of code translates any previous ones (including the v1 tag if no v2 tag is found) to v2.4. This results in the ZOBS frames, which contain information about the old frame which is erased when the tag is written by the library. My modification came about by adding the definitions of the v2.3 frames to libid3tag, inhibiting this automatic upgrade of the tag, and improving on a previous modification to write v2.3 tags to specification to the file. This seemed to work ok within the library, although can allow v2.4 frames to slip into v2.3 tags.

The code is very rough, and the plug-in side of the library doesn't look for any other frames than the ID3v2.4 types hence why the problems with v2.3 TYER and v2.4 TDRC frames. This also brings up the issue of strict ID3 tag specification, as I know some taggers do allow a "compatibility mode" where v2.4 frames slip into a v2.3 tag.

It is a mess, and with the introduction of Unicode I ned to sort it out. I've removed both the options and replaced with a single "Enable ID3v2.3 tag support". I was thinking keep ID3v2.3 as v2.3, v2.4 as v2.4, and to keep the library happy have new tags a v2.4.

Updated in_mad Winamp MAD MP3 input plugin

Reply #352
Thanks for the clarification, this explains quite a lot. For the moment I guess I'll simply workaround the ID3v2 mess by adding APE tags to the files. ID3v2.3 ISO 8859-1 will stay for compatibility reasons, while the few applications supporting APEv2 in MP3 will go for this format instead, which has proven being the least troublesome of them all. Most of the files already contain basic APE tags anyway, since they were processed by aacgain.

Edit: Certainly, I'm a complete idiot. Never process 1041 MP3 files without testing a single file for what MP3tag actually does to the tags. With my setting it entirely rewrote APEv2 instead of updating it with the ID3v2 contents, removing aacgain's undo tags. Of course, I noticed this when it was too late to reverse the rewrite. Better keep my fingers of APEv2 in MP3's case, it's not foolproof.

Oh well... not the big deal, since usually there's no need to undo the Album Gain appliance anyway. Would've been another thing if I had used Track Gain instead, but luckily I never use the latter.

Updated in_mad Winamp MAD MP3 input plugin

Reply #353
For unknown reason MAD plugin cannot play some MP3 files. Resaving with mp3DirectCut don't help, but repacking with MP3Packer help. Other decoders also work fine. Here is small cut from beginning of problem file.

Updated in_mad Winamp MAD MP3 input plugin

Reply #354
For unknown reason MAD plugin cannot play some MP3 files. Resaving with mp3DirectCut don't help, but repacking with MP3Packer help. Other decoders also work fine. Here is small cut from beginning of problem file.
Did you MP3Gain some files which were encoded with CRC protection?

Code: [Select]
robert@sly:~> madplay 01-In\ Poison\ Sleep_cut.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright © 2000-2004 Robert Leslie et al.
error: frame 0: CRC check failed
error: frame 2: CRC check failed
error: frame 3: CRC check failed
error: frame 4: CRC check failed
error: frame 5: CRC check failed
error: frame 6: CRC check failed
error: frame 7: CRC check failed
error: frame 8: CRC check failed
error: frame 9: CRC check failed
error: frame 10: CRC check failed
error: frame 11: CRC check failed
error: frame 12: CRC check failed
error: frame 13: CRC check failed
error: frame 14: CRC check failed
error: frame 15: CRC check failed
error: frame 16: CRC check failed
error: frame 17: CRC check failed
error: frame 18: CRC check failed
error: frame 19: CRC check failed
error: frame 20: CRC check failed
error: frame 21: CRC check failed
error: frame 22: CRC check failed
error: frame 23: CRC check failed
error: frame 24: CRC check failed
error: frame 25: CRC check failed
error: frame 26: CRC check failed
error: frame 27: CRC check failed
error: frame 28: CRC check failed
error: frame 29: CRC check failed
error: frame 30: CRC check failed
error: frame 31: CRC check failed
error: frame 32: CRC check failed
error: frame 33: CRC check failed
error: frame 34: CRC check failed
error: frame 35: CRC check failed
error: frame 36: CRC check failed
error: frame 37: CRC check failed
error: frame 38: CRC check failed
error: frame 39: CRC check failed
error: frame 40: CRC check failed
error: frame 41: CRC check failed
error: frame 42: CRC check failed
error: frame 43: CRC check failed
error: frame 44: CRC check failed
error: frame 45: CRC check failed
error: frame 46: CRC check failed
error: frame 47: CRC check failed
error: frame 48: CRC check failed
error: frame 49: CRC check failed
error: frame 50: CRC check failed
error: frame 51: CRC check failed
error: frame 52: CRC check failed
error: frame 53: CRC check failed
error: frame 54: CRC check failed
error: frame 55: CRC check failed
error: frame 56: CRC check failed
error: frame 57: CRC check failed
error: frame 58: CRC check failed
error: frame 59: CRC check failed
error: frame 60: CRC check failed
error: frame 61: CRC check failed
error: frame 62: CRC check failed
error: frame 63: CRC check failed
error: frame 64: CRC check failed
error: frame 65: CRC check failed
error: frame 66: CRC check failed
error: frame 67: CRC check failed
error: frame 68: CRC check failed
error: frame 69: CRC check failed
error: frame 70: CRC check failed
error: frame 71: CRC check failed
error: frame 72: CRC check failed
error: frame 73: CRC check failed
error: frame 74: CRC check failed
error: frame 75: CRC check failed
error: frame 76: CRC check failed
error: frame 77: CRC check failed
error: frame 78: CRC check failed
error: frame 79: CRC check failed
error: frame 80: CRC check failed
error: frame 81: CRC check failed
error: frame 82: CRC check failed
error: frame 83: CRC check failed
error: frame 84: CRC check failed
error: frame 85: CRC check failed
error: frame 86: CRC check failed
error: frame 87: CRC check failed
error: frame 88: CRC check failed
error: frame 89: CRC check failed
error: frame 90: CRC check failed
error: frame 91: CRC check failed
error: frame 92: CRC check failed
error: frame 93: CRC check failed
error: frame 94: CRC check failed
error: frame 95: CRC check failed
error: frame 96: CRC check failed
error: frame 97: CRC check failed
error: frame 98: CRC check failed
error: frame 99: CRC check failed
error: frame 100: CRC check failed
error: frame 101: CRC check failed
error: frame 102: CRC check failed
error: frame 103: CRC check failed
error: frame 104: CRC check failed
error: frame 105: CRC check failed
error: frame 106: CRC check failed
error: frame 107: CRC check failed
error: frame 108: CRC check failed
error: frame 109: CRC check failed
error: frame 110: CRC check failed
error: frame 111: CRC check failed
error: frame 112: CRC check failed
error: frame 113: CRC check failed
error: frame 114: CRC check failed
error: frame 115: CRC check failed
error: frame 116: CRC check failed
error: frame 117: CRC check failed
error: frame 118: CRC check failed
error: frame 119: CRC check failed
error: frame 120: CRC check failed
error: frame 121: CRC check failed
error: frame 122: CRC check failed
error: frame 123: CRC check failed
error: frame 124: CRC check failed
error: frame 125: CRC check failed
error: frame 126: CRC check failed
error: frame 127: CRC check failed
error: frame 128: CRC check failed
error: frame 129: CRC check failed
error: frame 130: CRC check failed
error: frame 131: CRC check failed
error: frame 132: CRC check failed
error: frame 133: CRC check failed
error: frame 134: CRC check failed
error: frame 135: CRC check failed
error: frame 136: CRC check failed
error: frame 137: CRC check failed
error: frame 138: CRC check failed
error: frame 139: CRC check failed
error: frame 140: CRC check failed
error: frame 141: CRC check failed
error: frame 142: CRC check failed
error: frame 143: CRC check failed
error: frame 144: CRC check failed
error: frame 145: CRC check failed
error: frame 146: CRC check failed
error: frame 147: CRC check failed
error: frame 148: CRC check failed
error: frame 149: CRC check failed
error: frame 150: CRC check failed
error: frame 151: CRC check failed
error: frame 152: CRC check failed
error: frame 153: CRC check failed
error: frame 154: CRC check failed
error: frame 155: CRC check failed
error: frame 156: CRC check failed
error: frame 157: CRC check failed
error: frame 158: CRC check failed
error: frame 159: CRC check failed
error: frame 160: CRC check failed
error: frame 161: CRC check failed
error: frame 162: CRC check failed
error: frame 163: CRC check failed
error: frame 164: CRC check failed
error: frame 165: CRC check failed
error: frame 166: CRC check failed
error: frame 167: CRC check failed
error: frame 168: CRC check failed
error: frame 169: CRC check failed
error: frame 170: CRC check failed
error: frame 171: CRC check failed
error: frame 172: CRC check failed
error: frame 173: CRC check failed
error: frame 174: CRC check failed
error: frame 175: CRC check failed
error: frame 176: CRC check failed
error: frame 177: CRC check failed
error: frame 178: CRC check failed
error: frame 179: CRC check failed
error: frame 180: CRC check failed
error: frame 181: CRC check failed
error: frame 182: CRC check failed
error: frame 183: CRC check failed
error: frame 184: CRC check failed
error: frame 185: CRC check failed
error: frame 186: CRC check failed
error: frame 187: CRC check failed
error: frame 188: CRC check failed
error: frame 189: CRC check failed
error: frame 190: CRC check failed
error: frame 191: CRC check failed
error: frame 192: CRC check failed
error: frame 193: CRC check failed
error: frame 194: CRC check failed
error: frame 195: CRC check failed
error: frame 196: CRC check failed
error: frame 197: CRC check failed
error: frame 198: CRC check failed
error: frame 199: CRC check failed
error: frame 200: CRC check failed
error: frame 201: CRC check failed
error: frame 202: CRC check failed
error: frame 203: CRC check failed
error: frame 204: CRC check failed
error: frame 205: CRC check failed
error: frame 206: CRC check failed
error: frame 207: CRC check failed
error: frame 208: CRC check failed
error: frame 209: CRC check failed
error: frame 210: CRC check failed
error: frame 211: CRC check failed
error: frame 212: CRC check failed
error: frame 213: CRC check failed
error: frame 214: CRC check failed
error: frame 215: CRC check failed
error: frame 216: CRC check failed
error: frame 217: CRC check failed
error: frame 218: CRC check failed
error: frame 219: CRC check failed
error: frame 220: CRC check failed
error: frame 221: CRC check failed
error: frame 222: CRC check failed
error: frame 223: CRC check failed
error: frame 224: CRC check failed
error: frame 225: CRC check failed
error: frame 226: CRC check failed
error: frame 227: CRC check failed
error: frame 228: CRC check failed
error: frame 229: CRC check failed
error: frame 230: CRC check failed
error: frame 231: CRC check failed
error: frame 232: CRC check failed
error: frame 233: CRC check failed
error: frame 234: CRC check failed
error: frame 235: CRC check failed
error: frame 236: CRC check failed
error: frame 237: CRC check failed
error: frame 238: CRC check failed
error: frame 239: CRC check failed
error: frame 240: CRC check failed
error: frame 241: CRC check failed
error: frame 242: CRC check failed
error: frame 243: CRC check failed
error: frame 244: CRC check failed
error: frame 245: CRC check failed
error: frame 246: CRC check failed
error: frame 247: CRC check failed
error: frame 248: CRC check failed
error: frame 249: CRC check failed
error: frame 250: CRC check failed
error: frame 251: CRC check failed
error: frame 252: CRC check failed
error: frame 253: CRC check failed
error: frame 254: CRC check failed
error: frame 255: CRC check failed
error: frame 256: CRC check failed
error: frame 257: CRC check failed
error: frame 258: CRC check failed
error: frame 259: CRC check failed
error: frame 260: CRC check failed
error: frame 261: CRC check failed
error: frame 262: CRC check failed
error: frame 263: CRC check failed
error: frame 264: CRC check failed
error: frame 265: CRC check failed
error: frame 266: CRC check failed
error: frame 267: CRC check failed
error: frame 268: CRC check failed
error: frame 269: CRC check failed
error: frame 270: CRC check failed
error: frame 271: CRC check failed
error: frame 272: CRC check failed
error: frame 273: CRC check failed
error: frame 274: CRC check failed
error: frame 275: CRC check failed
error: frame 276: CRC check failed
error: frame 277: CRC check failed
error: frame 278: CRC check failed
error: frame 279: CRC check failed
error: frame 280: CRC check failed
error: frame 281: CRC check failed
error: frame 282: CRC check failed
error: frame 283: CRC check failed
error: frame 284: CRC check failed
error: frame 285: CRC check failed
error: frame 286: CRC check failed
error: frame 287: CRC check failed
error: frame 288: CRC check failed
error: frame 289: CRC check failed
error: frame 290: CRC check failed
error: frame 291: CRC check failed
error: frame 292: CRC check failed
error: frame 293: CRC check failed
error: frame 294: CRC check failed
error: frame 295: CRC check failed
error: frame 296: CRC check failed
error: frame 297: CRC check failed
error: frame 298: CRC check failed
error: frame 299: CRC check failed
error: frame 300: CRC check failed
error: frame 301: CRC check failed
error: frame 302: CRC check failed
error: frame 303: CRC check failed
error: frame 304: CRC check failed
error: frame 305: CRC check failed
error: frame 306: CRC check failed
error: frame 307: CRC check failed
error: frame 308: CRC check failed
error: frame 309: CRC check failed
error: frame 310: CRC check failed
error: frame 311: CRC check failed
error: frame 312: CRC check failed
error: frame 313: CRC check failed
error: frame 314: CRC check failed
error: frame 315: CRC check failed
error: frame 316: CRC check failed
error: frame 317: CRC check failed
error: frame 318: CRC check failed
error: frame 319: CRC check failed
error: frame 320: CRC check failed
error: frame 321: CRC check failed
error: frame 322: CRC check failed
error: frame 323: CRC check failed
error: frame 324: CRC check failed
error: frame 325: CRC check failed
error: frame 326: CRC check failed
error: frame 327: CRC check failed
error: frame 328: CRC check failed
error: frame 329: CRC check failed
error: frame 330: CRC check failed
error: frame 331: CRC check failed
error: frame 332: CRC check failed
error: frame 333: CRC check failed
error: frame 334: CRC check failed
error: frame 335: CRC check failed
error: frame 336: CRC check failed
error: frame 337: CRC check failed
error: frame 338: CRC check failed
error: frame 339: CRC check failed
error: frame 340: CRC check failed
error: frame 341: CRC check failed
error: frame 342: CRC check failed
error: frame 343: CRC check failed
error: frame 344: CRC check failed
error: frame 345: CRC check failed
error: frame 346: CRC check failed
error: frame 347: CRC check failed
error: frame 348: CRC check failed
error: frame 349: CRC check failed
error: frame 350: CRC check failed
error: frame 351: CRC check failed
error: frame 352: CRC check failed
error: frame 353: CRC check failed
error: frame 354: CRC check failed
error: frame 355: CRC check failed
error: frame 356: CRC check failed
error: frame 357: CRC check failed
error: frame 358: CRC check failed
error: frame 359: CRC check failed
error: frame 360: CRC check failed
error: frame 361: CRC check failed
error: frame 362: CRC check failed
error: frame 363: CRC check failed
error: frame 364: CRC check failed
error: frame 365: CRC check failed
error: frame 366: CRC check failed
error: frame 367: CRC check failed
error: frame 368: CRC check failed
error: frame 369: CRC check failed
error: frame 370: CRC check failed
error: frame 371: CRC check failed
error: frame 372: CRC check failed
error: frame 373: CRC check failed
error: frame 374: CRC check failed
error: frame 375: CRC check failed
error: frame 376: CRC check failed
error: frame 377: CRC check failed
error: frame 378: CRC check failed
error: frame 379: CRC check failed
error: frame 380: CRC check failed
error: frame 381: CRC check failed
error: frame 382: CRC check failed
error: frame 383: CRC check failed
error: frame 384: CRC check failed
error: frame 385: CRC check failed
error: frame 386: CRC check failed
error: frame 387: CRC check failed
error: frame 388: CRC check failed
error: frame 389: CRC check failed
error: frame 390: CRC check failed
error: frame 391: CRC check failed
error: frame 392: CRC check failed
error: frame 393: CRC check failed
error: frame 394: CRC check failed
error: frame 395: CRC check failed
error: frame 396: CRC check failed
error: frame 397: CRC check failed
error: frame 398: CRC check failed
error: frame 399: CRC check failed
error: frame 400: CRC check failed
error: frame 401: CRC check failed
error: frame 402: CRC check failed
error: frame 403: CRC check failed
error: frame 404: CRC check failed
error: frame 405: CRC check failed
error: frame 406: CRC check failed
error: frame 407: CRC check failed
error: frame 408: CRC check failed
error: frame 409: CRC check failed
error: frame 410: CRC check failed
error: frame 411: CRC check failed
error: frame 412: CRC check failed
error: frame 413: CRC check failed
error: frame 414: CRC check failed
error: frame 415: CRC check failed
error: frame 416: CRC check failed
error: frame 417: CRC check failed
error: frame 418: CRC check failed
error: frame 419: CRC check failed
error: frame 420: CRC check failed
error: frame 421: CRC check failed
error: frame 422: CRC check failed
error: frame 423: CRC check failed
error: frame 424: CRC check failed
error: frame 425: CRC check failed
error: frame 426: CRC check failed
error: frame 427: CRC check failed
error: frame 428: CRC check failed
error: frame 429: CRC check failed
error: frame 430: CRC check failed
error: frame 431: CRC check failed
431 frames decoded (0:00:11,2), -80,8 dB peak amplitude, 0 clipped samples
Code: [Select]
robert@sly:~> madplay --ignore-crc 01-In\ Poison\ Sleep_cut.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright © 2000-2004 Robert Leslie et al.
431 frames decoded (0:00:11,2), -11,9 dB peak amplitude, 0 clipped samples

Updated in_mad Winamp MAD MP3 input plugin

Reply #355
Did you MP3Gain some files which were encoded with CRC protection?
No. I obtained this files "as is".
Code: [Select]
robert@sly:~> madplay --ignore-crc 01-In\ Poison\ Sleep_cut.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright © 2000-2004 Robert Leslie et al.
431 frames decoded (0:00:11,2), -11,9 dB peak amplitude, 0 clipped samples
Hmm, is there any way to remove/hide CRC info besides using MP3packer?

Updated in_mad Winamp MAD MP3 input plugin

Reply #356
I could add an "Ignore CRC" option to the plug-in, but this wouldn't help with the fact the files are at fault.

I'm currently interested in specifically what problems people are experiencing with ID3v2.3 support. I know and have fixed the TYER/TDRC problem. Are there any others?

I've read quite a way back through this thread to catch and fix most the previous problems in this new code, including Icecast2 streams, a more WA5-like basic title formatting and a few hidden RelayGain ones.

Thanks for all your help

Updated in_mad Winamp MAD MP3 input plugin

Reply #357
I'm sorry if I missed something in this very long thread.

What is the status of UTF-8 encoded text from APEv2? Is it in principle impossible to do that in Winamp or does it require one of the most recent Winamp versions? At the moment UTF-8 special characters are displayed as two bytes.

I am using the in_mad.dll dated 2007-01-02 downloaded from your link.

Updated in_mad Winamp MAD MP3 input plugin

Reply #358
Hi j7n,

The current plug-in still treated it as ANSI, however this re-written version which I'm close to putting out interprets all the text correctly as UTF-8. It includes a nearly completely rewritten APEv2 tag support enabling binary data too.

The only sections left on my todo list are the ID3v2.3 support and the EQU2 editor. I'm happy with the rest and its effect on my files then

Updated in_mad Winamp MAD MP3 input plugin

Reply #359
so good! i like it and have given in_mp3 up!

Updated in_mad Winamp MAD MP3 input plugin

Reply #360
Is it possible to add support for unicode symbols in path/filename?

Updated in_mad Winamp MAD MP3 input plugin

Reply #361
Hi j7n,

The current plug-in still treated it as ANSI, however this re-written version which I'm close to putting out interprets all the text correctly as UTF-8. It includes a nearly completely rewritten APEv2 tag support enabling binary data too.

The only sections left on my todo list are the ID3v2.3 support and the EQU2 editor. I'm happy with the rest and its effect on my files then


Have you made any progress with your update?
Glass half full!

Updated in_mad Winamp MAD MP3 input plugin

Reply #362
I figured I'd post here as well for those who get email notifications on this topic.

I've release an updated version of the plug-in, the new forum topic for it is currently in News Submission forum. The post over there contains the link and information about it.

Updated in_mad Winamp MAD MP3 input plugin

Reply #363
I figured I'd post here as well for those who get email notifications on this topic.

I've release an updated version of the plug-in, the new forum topic for it is currently in News Submission forum. The post over there contains the link and information about it.


Just to save some search time for anyone trying to find the new topic, it's no longer in News Submission. It's now in Validated News:

http://www.hydrogenaudio.org/forums/index....showtopic=60454

Updated in_mad Winamp MAD MP3 input plugin

Reply #364
Hi, I've been listening with in_mad for about a week now. I have a couple of questions... 

1. If I am not dithering and keep at 16-bit, do I even need to use MAD? I just want to make the most of my sound. Even without dsp and eq, i *thought* MAD sounded better than in_mp3.

2. I am unable to find a workaround for listening to AAC+ shoutcast streams. I have deleted the mp3 extension from in_mp3 and winamp will play mp3s and mp3 streams just fine, but no aac streams. 'AAC' is still listed in the file extensions of in_mp3. Any suggestions? Again, I don't use the dither feature of MAD, but thought maybe the internal eq was helping my sound.
Thanks,
Mike


Updated in_mad Winamp MAD MP3 input plugin

Reply #366
Why I use the MAD decoder is the auto-attenuation when clipping occurs. If the Winamp decoder had that, there would be no need for me to use MAD.
Just my 2c

Updated in_mad Winamp MAD MP3 input plugin

Reply #367
Quote
I am unable to find a workaround for listening to AAC+ shoutcast streams. I have deleted the mp3 extension from in_mp3 and winamp will play mp3s and mp3 streams just fine, but no aac streams. 'AAC' is still listed in the file extensions of in_mp3.

Maybe your HTTP streams have no extensions and therefore winamp can't assign them to a specific decoder?

There is little point to use the MAD decoder in Winamp 5.52+. The only unique things it still provides are the interesting stats for stereo mode and clipping. While using the MAD plugin I discovered why some streaming unicasters sound so terrible: simple stereo and clipping by as much as 3 dB due to insufficient bitrate and 0 dB(FS) source.

In Winamp 2 I also decided not to replace the MP3 decoder. We still need the old one for (HE-)AAC, and the built-in in_MP3 has a beautiful spectrum analysis.  Besides no final version with APEv2 support was ever released, only something like betas with confusing version numbers where EQ won't work and there's dependance upon Unicode.

And then both original and MOSPDude's versions have terrible performance. They try to scan the whole file for average bitrate or other stats.

I dare anybody to present examples where in practice we can feel the precision jump from -140 dB to 147 dB!

Updated in_mad Winamp MAD MP3 input plugin

Reply #368
I like this decoder, but unfortunately it has very buggin internetional TAGs support, how do i can return that from original MAD plugin, or fix it? It seemed to work normally in original MAD plugin...